You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
38 lines
1.4 KiB
38 lines
1.4 KiB
.. _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 |
|
mpsc_lockfree.rst |
|
spsc_lockfree.rst
|
|
|