![]()  | 
  
    Multi-ApplicationOnlineProfiling
    2.1
    
   | 
 
This is an implementation of a Buffered LIFO data storage. More...
Modules | |
| Internals | |
| Not to be used directly.  | |
Data Structures | |
| struct | Buffered_LIFO | 
| Structure defining buffered LIFO.  More... | |
Functions | |
| void | Buffered_LIFO_init (struct Buffered_LIFO *lifo, size_t sizeof_payload, uint64_t chunk_size) | 
| Initializes a Buffered_LIFO ready to contains elems of size sizeof_payload with chunk_size chunks.  More... | |
| void | Buffered_LIFO_release (struct Buffered_LIFO *lifo, void(*free_func)(void *)) | 
| Releases a Buffered_LIFO and all its chunks.  More... | |
| void | Buffered_LIFO_push (struct Buffered_LIFO *lifo, void *elem) | 
| Push an element of size sizeof_payload in the Buffered_LIFO.  More... | |
| void * | Buffered_LIFO_pop (struct Buffered_LIFO *lifo, void *elem) | 
| Push an element of size sizeof_payload in the Buffered_LIFO.  More... | |
| void * | Buffered_LIFO_head (struct Buffered_LIFO *lifo) | 
| Get a reference to the head element of the Buffered_LIFO note that as no lock is held this reference can be invalidated by another thread. In such context you can use Buffered_LIFO_head_locked instead.  More... | |
| void * | Buffered_LIFO_head_locked (struct Buffered_LIFO *lifo) | 
| Get a reference to the head element of the Buffered_LIFO but keeps the LIFO locked in order to allow thread safe manipulation of the head. Note that Buffered_LIFO_head_unlock must be called to unlock the LIFO after !  More... | |
| void | Buffered_LIFO_head_unlock (struct Buffered_LIFO *lifo) | 
| Unlocks the Buffered_LIFO after a call to Buffered_LIFO_head.  More... | |
This is an implementation of a Buffered LIFO data storage.
It is implemented using several Buffered_LIFO_chunk.
Sample usage :
Consequently in this configuration, we pop elems in the reverse order by definition of the LIFO (2,1,0).
| void* Buffered_LIFO_head | ( | struct Buffered_LIFO * | lifo | ) | 
Get a reference to the head element of the Buffered_LIFO note that as no lock is held this reference can be invalidated by another thread. In such context you can use Buffered_LIFO_head_locked instead.
| lifo | pointer to an initialized Buffered_LIFO | 
Definition at line 188 of file Buffered_LIFO.c.

| void* Buffered_LIFO_head_locked | ( | struct Buffered_LIFO * | lifo | ) | 
Get a reference to the head element of the Buffered_LIFO but keeps the LIFO locked in order to allow thread safe manipulation of the head. Note that Buffered_LIFO_head_unlock must be called to unlock the LIFO after !
| lifo | pointer to an initialized Buffered_LIFO | 
Definition at line 198 of file Buffered_LIFO.c.

| void Buffered_LIFO_head_unlock | ( | struct Buffered_LIFO * | lifo | ) | 
Unlocks the Buffered_LIFO after a call to Buffered_LIFO_head.
| lifo | pointer to an initialized Buffered_LIFO | 
Definition at line 204 of file Buffered_LIFO.c.

| void Buffered_LIFO_init | ( | struct Buffered_LIFO * | lifo, | 
| size_t | sizeof_payload, | ||
| uint64_t | chunk_size | ||
| ) | 
Initializes a Buffered_LIFO ready to contains elems of size sizeof_payload with chunk_size chunks.
| sizeof_payload | size of a payload element | 
| chunk_size | the number of elements the chunk can contain | 
Definition at line 132 of file Buffered_LIFO.c.
| void* Buffered_LIFO_pop | ( | struct Buffered_LIFO * | lifo, | 
| void * | elem | ||
| ) | 
Push an element of size sizeof_payload in the Buffered_LIFO.
| lifo | pointer to an initialized Buffered_LIFO | 
| elem | pointer to an elem of sizeof_payload to which we want data to be copied | 
Definition at line 171 of file Buffered_LIFO.c.

| void Buffered_LIFO_push | ( | struct Buffered_LIFO * | lifo, | 
| void * | elem | ||
| ) | 
Push an element of size sizeof_payload in the Buffered_LIFO.
| lifo | pointer to an initialized Buffered_LIFO | 
| elem | pointer to an elem of sizeof_payload | 
Definition at line 164 of file Buffered_LIFO.c.

| void Buffered_LIFO_release | ( | struct Buffered_LIFO * | lifo, | 
| void(*)(void *) | free_func | ||
| ) | 
Releases a Buffered_LIFO and all its chunks.
| sizeof_payload | size of a payload element | 
| chunk_size | the number of elements the chunk can contain | 
| free_func | a function to be called over each elem still present in the FIFO (NULL if node) | 
Definition at line 141 of file Buffered_LIFO.c.
