92 Commits

Author SHA1 Message Date
5889426478 core: rope: add bstr support 2026-02-03 14:39:33 +00:00
c13b7a7e3a core: stream: add bstr support
despite not being a b_object, the b_stream interface can now detect when
a b_bstr instance has been passed as a stream parameter and use the correct
functions to handle writing to it.

this allows any function that expects a b_stream parameter to be called
with a b_bstr instance instead, allowing complex stream-based I/O operations
to be directed towards bounded character arrays with no heap allocation
required.
2026-02-03 14:36:48 +00:00
23aba2a27f core: add bstr data structure
bstr is very similar to b_stringstream, with the key difference being it can be
stack-allocated. this allows you to write a complex formatted string to a
stack-allocated character buffer with no heap memory allocation required.
bstr also supports automatically-managed dynamic string buffers for unbounded
string construction.
2026-02-03 14:34:58 +00:00
bdcd4163c7 core: stringstream: added read-support
any characters written to a stringstream can be optionally read back again
using the b_stream read API.

this functions similar to a ringbuffer, with two key differences:
 1) the buffer is not circular, and will continuously expand to accomodate all incoming data.
 2) reading data from the stringstream does not remove it from the buffer.
2026-02-03 14:33:06 +00:00
add05ef478 core: iterator: added inline definition of is_valid() 2026-02-03 14:32:15 +00:00
68ab79fe2a core: hash: add support for hashing the contents of ropes 2026-02-03 14:31:35 +00:00
ce9195c130 core: queue: implement moving queue entries
this works exactly the same as moving btree nodes.
2026-02-03 14:30:53 +00:00
837a42e249 core: btree: implement moving btree nodes
moving a btree node is similar to simply using memmove() or memcpy(), with the added
bonus of updating the pointers in the wider data structure to the new node memory
and zeroing the old node memory so that it isn't used accidentally after the move
is complete.
2026-02-03 14:28:58 +00:00
6b65727535 core: error: rename b_error_release to b_error_discard 2025-11-04 10:03:10 +00:00
493b9ec4a4 core: iterator: implement const iterators 2025-11-01 09:58:18 +00:00
0cbab62391 core: type: fix interface type components not being initialised properly 2025-11-01 09:57:32 +00:00
abf1d45602 core: class: validate magic number in class header 2025-11-01 09:56:52 +00:00
360428c8e8 core: object: validate magic number in object header 2025-11-01 09:56:22 +00:00
144c3a4c68 core: error: clean up includes and formatting 2025-10-29 14:32:19 +00:00
2ee2f8c115 core: object: remove legacy iterator interface usage 2025-10-29 14:31:09 +00:00
1e4b5bc4e6 core: btree: replace legacy iterator interface 2025-10-29 14:30:33 +00:00
c2b894ef22 core: queue: replace legacy iterator interface 2025-10-29 14:29:05 +00:00
009b6c6292 core: iterator: re-design b_iterator as a b_object interface 2025-10-29 13:52:27 +00:00
b58015baff core: type: check if a class tries to implement an interface it doesn't extend or inherit 2025-10-28 15:17:50 +00:00
e8eee9ca0d core: type: make get_type static 2025-10-28 15:16:07 +00:00
5b090c72c7 core: stream: change read/write buffer type from unsigned char* to void* 2025-10-28 15:14:57 +00:00
2687477cb2 core: ringbuffer: update from simple struct to a b_object type 2025-10-28 15:14:09 +00:00
5f2bbc7151 core: class: add functions to get a registered class, and get the name of a class 2025-10-28 15:11:54 +00:00
75e9291da3 core: error: update header include guard 2025-10-25 19:36:25 +01:00
a429e76721 core: stream: add utf-8 awareness to b_stream interface
b_stream can now read/write utf-8 encoded data, and will do so unless
the stream is in binary mode.

b_stream will also report an error it encounters invalid utf-8 data
(unless binary mode is enabled).
2025-10-25 00:02:33 +01:00
f6f49faf97 core: encoding: add utf-8 functions from b_string to b_wchar interface 2025-10-25 00:02:15 +01:00
3e82d12476 core: hash: fix hash backends erasing ctx function pointers 2025-10-25 00:01:16 +01:00
7c9a753007 core: object: add nullptr checks to data retrieval functions 2025-10-25 00:00:37 +01:00
1d9549c0c2 core: error: update b_stringstream usage to use b_stream interface 2025-10-24 12:33:23 +01:00
a5762e537b core: stringstream: convert to a b_object type inheriting from b_stream 2025-10-24 12:32:54 +01:00
fd4f60e37f core: stream: convert to a b_object interface and base class 2025-10-24 12:32:16 +01:00
8840971d83 core: object: add more virtual function dispatch macros 2025-10-24 12:31:51 +01:00
ed105307c7 core: type: fix registration of types that extend something other than b_object 2025-10-24 12:29:24 +01:00
36b624849c core: object: add functions to retrieve multiple parts of an object at once 2025-10-24 12:28:50 +01:00
ab1c2b370d core: object: implement rvalue object support 2025-10-19 20:58:32 +01:00
2cc1a541c2 core: object: implement b_object_is_type() 2025-10-19 13:46:44 +01:00
ff2ff6f136 core: stream: update generic pointer usage for stdio streams 2025-10-19 11:26:04 +01:00
d5bd8fa32a core: stream: add a second generic pointer to b_stream 2025-10-19 10:22:35 +01:00
c389e32dc6 core: add B_NPOS definition 2025-10-19 10:22:11 +01:00
379bd048b2 core: object: make interface query functions const; remove type parameters 2025-10-19 10:21:43 +01:00
e1e4544b67 core: macros: fix bad return type on unref() function template 2025-10-18 21:54:34 +01:00
4044961478 core: rename b_retain/b_release to b_object_ref/b_object_unref 2025-10-18 21:51:51 +01:00
503dc56328 core: add macros for performing non-virtual class method dispatch 2025-10-18 21:41:40 +01:00
a0b7b5b85b core: remove type parameter from object interface query functions 2025-10-18 21:06:20 +01:00
06add543bf Merge branch 'main' into feature/new-object-system 2025-10-15 11:13:00 +01:00
9d2ebfce2e core: move new object system to core module
this will allow a wider range of data structures (e.g. b_error, b_stream, b_stringstream) to make use
of the new object system, and other modules and library users can use the object system without
depending on the blue-object or blue-ds modules.

blue-ds will become a simple library of data structures (string, hashmap, etc), built on top of the
core object system.
2025-10-15 10:38:18 +01:00
cbaeb002f8 core: stream: b_stream_read_line_s now includes linefeed in output and correctly reports EOF condition 2025-09-22 10:32:37 +01:00
bc5986150c core: stream: fix buffer overflow in stream indentation stack 2025-09-22 10:31:53 +01:00
4ab524a66b core: hash: rename b_hash_string to avoid conflict with b_string 2025-09-22 10:31:30 +01:00
d52992c8ba core: printf: switch to an enhanced version of embedded printf 2025-09-22 10:30:40 +01:00