1.. _data_structures:
2
3Data Structures
4###############
5
6Zephyr provides a library of common general purpose data structures
7used within the kernel, but useful by application code in general.
8These include list and balanced tree structures for storing ordered
9data, and a ring buffer for managing "byte stream" data in a clean
10way.
11
12Note that in general, the collections are implemented as "intrusive"
13data structures.  The "node" data is the only struct used by the
14library code, and it does not store a pointer or other metadata to
15indicate what user data is "owned" by that node.  Instead, the
16expectation is that the node will be itself embedded within a
17user-defined struct.  Macros are provided to retrieve a user struct
18address from the embedded node pointer in a clean way.  The purpose
19behind this design is to allow the collections to be used in contexts
20where dynamic allocation is disallowed (i.e. there is no need to
21allocate node objects because the memory is provided by the user).
22
23Note also that these libraries are uniformly unsynchronized; access to
24them is not threadsafe by default.  These are data structures, not
25synchronization primitives.  The expectation is that any locking
26needed will be provided by the user.
27
28.. toctree::
29  :maxdepth: 1
30
31  slist.rst
32  dlist.rst
33  mpsc_pbuf.rst
34  spsc_pbuf.rst
35  rbtree.rst
36  ring_buffers.rst
37  mpsc_lockfree.rst
38  spsc_lockfree.rst
39