37 lines
1.3 KiB
ReStructuredText
37 lines
1.3 KiB
ReStructuredText
.. _data_structures:
|
|
|
|
Data Structures
|
|
###############
|
|
|
|
Zephyr provides a library of common general purpose data structures
|
|
used within the kernel, but useful by application code in general.
|
|
These include list and balanced tree structures for storing ordered
|
|
data, and a ring buffer for managing "byte stream" data in a clean
|
|
way.
|
|
|
|
Note that in general, the collections are implemented as "intrusive"
|
|
data structures. The "node" data is the only struct used by the
|
|
library code, and it does not store a pointer or other metadata to
|
|
indicate what user data is "owned" by that node. Instead, the
|
|
expectation is that the node will be itself embedded within a
|
|
user-defined struct. Macros are provided to retrieve a user struct
|
|
address from the embedded node pointer in a clean way. The purpose
|
|
behind this design is to allow the collections to be used in contexts
|
|
where dynamic allocation is disallowed (i.e. there is no need to
|
|
allocate node objects because the memory is provided by the user).
|
|
|
|
Note also that these libraries are uniformly unsynchronized; access to
|
|
them is not threadsafe by default. These are data structures, not
|
|
synchronization primitives. The expectation is that any locking
|
|
needed will be provided by the user.
|
|
|
|
.. toctree::
|
|
:maxdepth: 1
|
|
|
|
slist.rst
|
|
dlist.rst
|
|
mpsc_pbuf.rst
|
|
spsc_pbuf.rst
|
|
rbtree.rst
|
|
ring_buffers.rst
|