diff --git a/.gitignore b/.gitignore index 7816b81..d74e3e9 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,4 @@ build dist coverage +.vscode/* \ No newline at end of file diff --git a/.vscode/c_cpp_properties.json b/.vscode/c_cpp_properties.json new file mode 100644 index 0000000..45fac2d --- /dev/null +++ b/.vscode/c_cpp_properties.json @@ -0,0 +1,17 @@ +{ + "configurations": [ + { + "name": "Linux", + "includePath": [ + "${workspaceFolder}/**", + "${workspaceFolder}/include" + ], + "defines": [], + "compilerPath": "/usr/bin/clang", + "cStandard": "c17", + "cppStandard": "c++14", + "intelliSenseMode": "linux-clang-x64" + } + ], + "version": 4 +} \ No newline at end of file diff --git a/docs/html/annotated.html b/docs/html/annotated.html deleted file mode 100644 index 02d3db6..0000000 --- a/docs/html/annotated.html +++ /dev/null @@ -1,109 +0,0 @@ - - -
- - - - -|
- µEvLoop
-
- A fast and lightweight event loop aimed at embedded platforms in C99.
- |
-
| Cuel_application_t | Top-level container for µEvLoop'd application |
| Cuel_autopool_t | Automatic pools are wrappers to object pools. They manage the acquisition and release cycle from objects issued at the pool by wrapping them in automatic pointers |
| Cuel_autoptr | Automatic pointers are pointers wrapped by information of where they were issued |
| Cuel_closure_t | Defines a closure, a tuple <function, context, destructor> |
| Cuel_conditional_t | Conditionals are constructs that provide functional flow control |
| Cuel_cqueue_t | Defines a circular queue of void pointers |
| ▼Cuel_event_t | Events are special messages passed around the core. They represent tasks to be run at some point by the system |
| ▼Cuel_event_detail | |
| Cuel_event_listener | Contains the context of a particular signal listener |
| Cuel_event_observer | Contains the reference to an observer variable |
| Cuel_event_signal | Contains information related to an emitted signal |
| Cuel_event_timer | Contains information suitable for scheduling an event at the scheduler |
| Cuel_evloop_t | The event loop object |
| Cuel_func_mapper_t | Maps elements of an iterator to an area of memory. Each element is assigned to a void pointer slot |
| Cuel_iterator_array_t | A specialised iterator suitable for iterating over arrays of arbitrary data |
| Cuel_iterator_t | Iterators are data structures that wrap arbitrary collections of data and define ways of enumerating them |
| Cuel_llist_node_t | Defines a node of the linked list. Holds a void pointer |
| Cuel_llist_t | Defines a linked list. If it is empty, head == tail == NULL. Pushing or popping from both the head or tail is always O(1) |
| Cuel_module_t | A module is an isolated unit of behaviour with lifecycle hooks |
| Cuel_objpool_t | Pre-allocated memory bound to speciffic types suitable for providing dynamic object management in the stack |
| Cuel_pipeline_t | A pipeline is an ordered closure list to be run in sequence |
| Cuel_promise_segment_t | Defines a single synchronous operation to be invoked when the promise is either resolved or rejected |
| Cuel_promise_store_t | An issuer of promises. Contains references to pools for promises and segments |
| Cuel_promise_t | A promise is association of an asynchronous operation to the possible execution paths that follow its resolution. It is also a holder for the value it was settled with |
| Cuel_scheduer_t | The scheduler object |
| Cuel_signal_relay_t | Contains a signal vector and operates on in |
| Cuel_syspools_t | A container for the system pools |
| Cuel_sysqueues_t | A container for the system's internal queues |
- 1.8.17
-
-
-
diff --git a/docs/html/application_8h.html b/docs/html/application_8h.html
deleted file mode 100644
index 3e7b090..0000000
--- a/docs/html/application_8h.html
+++ /dev/null
@@ -1,554 +0,0 @@
-
-
-
-
-
-
-
-|
- µEvLoop
-
- A fast and lightweight event loop aimed at embedded platforms in C99.
- |
-
The application module is a convenient top-level container for the system internals. -More...
-#include "uevloop/system/containers/system-pools.h"#include "uevloop/system/containers/system-queues.h"#include "uevloop/system/event-loop.h"#include "uevloop/system/scheduler.h"#include "uevloop/system/signal.h"#include "uevloop/utils/module.h"
Go to the source code of this file.
--Data Structures | |
| struct | uel_application_t |
| Top-level container for µEvLoop'd application. More... | |
-Typedefs | |
| -typedef enum uel_app_event | uel_app_event_t |
| Alias to the uel_app_event enum. | |
-Enumerations | |
| enum | uel_app_event { UEL_APP_READY = 0, -UEL_APP_CRASHED, -UEL_APP_IDLE, -UEL_APP_EVENT_COUNT - } |
| Events emitted by the application relay. Unused ATM. | |
-Functions | |
| void | uel_app_init (uel_application_t *app) |
| Initialises an uel_application_t instance. More... | |
| void | uel_app_load (uel_application_t *app, uel_module_t **modules, size_t module_count) |
| Loads modules into an application and run their lifecycle hooks. More... | |
| uel_module_t * | uel_app_require (uel_application_t *app, size_t id) |
| Fetches a module from the app's registry. More... | |
| void | uel_app_tick (uel_application_t *app) |
| Ticks the application. More... | |
| void | uel_app_update_timer (uel_application_t *app, uint32_t timer) |
| Updates the internal timer of an application, located at the scheduler. More... | |
| uel_event_t * | uel_app_run_later (uel_application_t *app, uint16_t timeout_in_ms, uel_closure_t closure, void *value) |
| Enqueues a closure for later execution. More... | |
| uel_event_t * | uel_app_run_at_intervals (uel_application_t *app, uint16_t interval_in_ms, bool immediate, uel_closure_t closure, void *value) |
| Enqueues a closure for execution at intervals. More... | |
| void | uel_app_enqueue_closure (uel_application_t *app, uel_closure_t *closure, void *value) |
| Enqueues a closure to be invoked. More... | |
| uel_event_t * | uel_app_observe (uel_application_t *app, volatile uintptr_t *condition_var, uel_closure_t *closure) |
| Sets up an observer. More... | |
The application module is a convenient top-level container for the system internals.
-| void uel_app_enqueue_closure | -( | -uel_application_t * | -app, | -
| - | - | uel_closure_t * | -closure, | -
| - | - | void * | -value | -
| - | ) | -- |
Enqueues a closure to be invoked.
-Proxies the call to uel_evloop_enqueue_closure() with uel_application_t::event_loop as parameter.
-| app | The uel_application_t instance |
| closure | The closure to be enqueued |
| value | The value to invoked the closure with |
| void uel_app_init | -( | -uel_application_t * | -app | ) | -- |
Initialises an uel_application_t instance.
-| app | The uel_application_t instance |
| void uel_app_load | -( | -uel_application_t * | -app, | -
| - | - | uel_module_t ** | -modules, | -
| - | - | size_t | -module_count | -
| - | ) | -- |
Loads modules into an application and run their lifecycle hooks.
-| app | The application onto which to load the modules |
| modules | The modules to be loaded |
| module_count | The number of modules being loaded |
| uel_event_t* uel_app_observe | -( | -uel_application_t * | -app, | -
| - | - | volatile uintptr_t * | -condition_var, | -
| - | - | uel_closure_t * | -closure | -
| - | ) | -- |
Sets up an observer.
-Proxies the call to uel_evloop_observe() with uel_application_t::event_loop as parameter.
| app | The uel_application_t instance |
| condition_var | The address of the value to be observed |
| closure | The closure to be invoked on change dection |
| uel_module_t* uel_app_require | -( | -uel_application_t * | -app, | -
| - | - | size_t | -id | -
| - | ) | -- |
Fetches a module from the app's registry.
-| app | The application from where to fetch the module |
| id | The module ID to be fetched |
idth position in the registry | uel_event_t* uel_app_run_at_intervals | -( | -uel_application_t * | -app, | -
| - | - | uint16_t | -interval_in_ms, | -
| - | - | bool | -immediate, | -
| - | - | uel_closure_t | -closure, | -
| - | - | void * | -value | -
| - | ) | -- |
Enqueues a closure for execution at intervals.
-Proxies the call to uel_sch_run_at_intervals() with uel_application_t::scheduler as parameter.
-| app | The uel_application_t instance |
| interval_in_ms | The delay in milliseconds two executions of the closure |
| immediate | If this flag is set, the the event will be created with a due time to the current time. |
| closure | The closure to be invoked when the due time is reached |
| value | The value to invoked the closure with |
| uel_event_t* uel_app_run_later | -( | -uel_application_t * | -app, | -
| - | - | uint16_t | -timeout_in_ms, | -
| - | - | uel_closure_t | -closure, | -
| - | - | void * | -value | -
| - | ) | -- |
Enqueues a closure for later execution.
-Proxies the call to uel_sch_run_later() with uel_application_t::scheduler as parameter.
-| app | The uel_application_t instance |
| timeout_in_ms | The delay in milliseconds until the closure is run |
| closure | The closure to be invoked when the due time is reached |
| value | The value to invoked the closure with |
| void uel_app_tick | -( | -uel_application_t * | -app | ) | -- |
Ticks the application.
-Yields control to the application runtime. This will:
| app | The uel_application_t instance |
| void uel_app_update_timer | -( | -uel_application_t * | -app, | -
| - | - | uint32_t | -timer | -
| - | ) | -- |
Updates the internal timer of an application, located at the scheduler.
-| app | The uel_application_t instance |
| timer | The current application timer, in milliseconds |
- 1.8.17
-
-
-
diff --git a/docs/html/application_8h__incl.map b/docs/html/application_8h__incl.map
deleted file mode 100644
index 6822142..0000000
--- a/docs/html/application_8h__incl.map
+++ /dev/null
@@ -1,16 +0,0 @@
-
diff --git a/docs/html/application_8h__incl.md5 b/docs/html/application_8h__incl.md5
deleted file mode 100644
index d2fcc45..0000000
--- a/docs/html/application_8h__incl.md5
+++ /dev/null
@@ -1 +0,0 @@
-ee75ab967f4694f782f6fd9e7979ccb6
\ No newline at end of file
diff --git a/docs/html/application_8h__incl.png b/docs/html/application_8h__incl.png
deleted file mode 100644
index e328542..0000000
Binary files a/docs/html/application_8h__incl.png and /dev/null differ
diff --git a/docs/html/application_8h_source.html b/docs/html/application_8h_source.html
deleted file mode 100644
index e4d2c6a..0000000
--- a/docs/html/application_8h_source.html
+++ /dev/null
@@ -1,181 +0,0 @@
-
-
-
-
-
-
-
-|
- µEvLoop
-
- A fast and lightweight event loop aimed at embedded platforms in C99.
- |
-
- 1.8.17
-
-
-
diff --git a/docs/html/automatic-pool_8h.html b/docs/html/automatic-pool_8h.html
deleted file mode 100644
index 75a2a14..0000000
--- a/docs/html/automatic-pool_8h.html
+++ /dev/null
@@ -1,539 +0,0 @@
-
-
-
-
-
-
-
-|
- µEvLoop
-
- A fast and lightweight event loop aimed at embedded platforms in C99.
- |
-
Defines automatic pointers and automatic pools, objects that wrap object pools and objects managed by them. These wrappers provide basic automatic memory management. -More...
-
Go to the source code of this file.
--Data Structures | |
| struct | uel_autoptr |
| Automatic pointers are pointers wrapped by information of where they were issued. More... | |
| struct | uel_autopool_t |
| Automatic pools are wrappers to object pools. They manage the acquisition and release cycle from objects issued at the pool by wrapping them in automatic pointers. More... | |
-Macros | |
| #define | UEL_DECLARE_AUTOPOOL_BUFFERS(type, size_log2n, id) |
| Declares the necessary buffers to back an automatic pool, so the programmer doesn't have to reason much about it. More... | |
| #define | UEL_AUTOPOOL_BUFFERS(id) (uint8_t *)&id##_buffer, id##_pool_buffer, id##_pool_queue_buffer |
| Refers to a previously declared buffer set. More... | |
| #define | UEL_AUTOPOOL_BUFFERS_IN(id, obj) |
| Refers to a previously declared buffer set. More... | |
| #define | UEL_AUTOPOOL_BUFFERS_AT(id, obj) |
| Refers to a previously declared buffer set. More... | |
-Typedefs | |
| -typedef void ** | uel_autoptr_t |
Aliases uel_autoptr_t to void ** so it can be cast to pointers to other types. | |
-Functions | |
| void | uel_autoptr_dealloc (uel_autoptr_t autoptr) |
| Deallocates an automatic pointer. More... | |
| void | uel_autopool_init (uel_autopool_t *pool, size_t size_log2n, size_t item_size, uint8_t *object_buffer, struct uel_autoptr *autoptr_buffer, void **queue_buffer) |
| Initialises an automatic pool. More... | |
| uel_autoptr_t | uel_autopool_alloc (uel_autopool_t *pool) |
| Allocates an object and wrap it in a automatic pointer. More... | |
| bool | uel_autopool_is_empty (uel_autopool_t *pool) |
| Checks if a pool is depleted. More... | |
| void | uel_autopool_set_constructor (uel_autopool_t *pool, uel_closure_t constructor) |
| Sets the constructor closure of an autopool. More... | |
| void | uel_autopool_set_destructor (uel_autopool_t *pool, uel_closure_t destructor) |
| Sets the destructor closure of an autopool. More... | |
Defines automatic pointers and automatic pools, objects that wrap object pools and objects managed by them. These wrappers provide basic automatic memory management.
-| #define UEL_AUTOPOOL_BUFFERS | -( | -- | id | ) | -(uint8_t *)&id##_buffer, id##_pool_buffer, id##_pool_queue_buffer | -
Refers to a previously declared buffer set.
-This is a convenience macro to supply the buffers generated by UEL_DECLARE_AUTOPOOL_BUFFERS() to the uel_autopool_init() function.
| id | The identifier used to declare the pool buffers |
| #define UEL_AUTOPOOL_BUFFERS_AT | -( | -- | id, | -
| - | - | - | obj | -
| - | ) | -- |
Refers to a previously declared buffer set.
-This is a convenience macro to supply the buffers generated by UEL_DECLARE_AUTOPOOL_BUFFERS() to the uel_autopool_init() function. Use this if the buffers were defined inside an object whose address is accessible in the current scope
| id | The identifier used to declare the pool buffers |
| obj | The address of the object storing the pool buffers |
| #define UEL_AUTOPOOL_BUFFERS_IN | -( | -- | id, | -
| - | - | - | obj | -
| - | ) | -- |
Refers to a previously declared buffer set.
-This is a convenience macro to supply the buffers generated by UEL_DECLARE_AUTOPOOL_BUFFERS() to the uel_autopool_init() function. Use this if the buffers were defined inside a local object, accessible in the current scope.
| id | The identifier used to declare the pool buffers |
| obj | The object storing the pool buffers |
| #define UEL_DECLARE_AUTOPOOL_BUFFERS | -( | -- | type, | -
| - | - | - | size_log2n, | -
| - | - | - | id | -
| - | ) | -- |
Declares the necessary buffers to back an automatic pool, so the programmer doesn't have to reason much about it.
-Use this macro as a shortcut to create the required buffers for an automatic pool. This will declare three buffers in the calling scope.
-| type | The type of the objects the pool will contain |
| size_log2n | The number of elements the pool will contain in log2 form |
| id | A valid identifier for the pools. |
| uel_autoptr_t uel_autopool_alloc | -( | -uel_autopool_t * | -pool | ) | -- |
Allocates an object and wrap it in a automatic pointer.
-The allocated object is submited to the contructor closure set in the autopool.
-| pool | The automatic pool from where to acquire the object |
| void uel_autopool_init | -( | -uel_autopool_t * | -pool, | -
| - | - | size_t | -size_log2n, | -
| - | - | size_t | -item_size, | -
| - | - | uint8_t * | -object_buffer, | -
| - | - | struct uel_autoptr * | -autoptr_buffer, | -
| - | - | void ** | -queue_buffer | -
| - | ) | -- |
Initialises an automatic pool.
-| pool | The pool to be initialised |
| size_log2n | The number of objects in the pool in its log2 form |
| item_size | The size of each object in the pool. If special alignment is required, it must be included in this value. |
| object_buffer | The buffer that contains each object in the pool. Must be 2**size_log2n * item_size long. |
| autoptr_buffer | The buffer that contains each autoptr object to be issued. Must be 2**size_log2n * item_size long. |
| queue_buffer | A void pointer array that will be used as the buffer to the object pointer queue. Must be 2**size_log2n long. |
| bool uel_autopool_is_empty | -( | -uel_autopool_t * | -pool | ) | -- |
Checks if a pool is depleted.
-| pool | The pool to be verified |
| void uel_autopool_set_constructor | -( | -uel_autopool_t * | -pool, | -
| - | - | uel_closure_t | -constructor | -
| - | ) | -- |
Sets the constructor closure of an autopool.
-This closure is invoked when uel_autoptr_alloc() is called and takes a bare pointer to the object being alloc'ed as parameter.
| pool | The autopool onto which to attach the constructor |
| constructor | The constructor closure |
| void uel_autopool_set_destructor | -( | -uel_autopool_t * | -pool, | -
| - | - | uel_closure_t | -destructor | -
| - | ) | -- |
Sets the destructor closure of an autopool.
-This closure is invoked when uel_autoptr_dealloc() is called and takes a bare pointer to the object being dealloc'ed as parameter.
| pool | The autopool onto which to attach the destructor |
| destructor | The destructor closure |
| void uel_autoptr_dealloc | -( | -uel_autoptr_t | -autoptr | ) | -- |
Deallocates an automatic pointer.
-When called, the destructor closure defined at the autopointer's source autopool is invoked. Afterwards, the autopointer is returned to its pool.
-
- 1.8.17
-
-
-
diff --git a/docs/html/automatic-pool_8h__incl.map b/docs/html/automatic-pool_8h__incl.map
deleted file mode 100644
index f08d690..0000000
--- a/docs/html/automatic-pool_8h__incl.map
+++ /dev/null
@@ -1,6 +0,0 @@
-
diff --git a/docs/html/automatic-pool_8h__incl.md5 b/docs/html/automatic-pool_8h__incl.md5
deleted file mode 100644
index d99e40a..0000000
--- a/docs/html/automatic-pool_8h__incl.md5
+++ /dev/null
@@ -1 +0,0 @@
-5680677957ec5d9de6f4454e1f430082
\ No newline at end of file
diff --git a/docs/html/automatic-pool_8h__incl.png b/docs/html/automatic-pool_8h__incl.png
deleted file mode 100644
index dd3999a..0000000
Binary files a/docs/html/automatic-pool_8h__incl.png and /dev/null differ
diff --git a/docs/html/automatic-pool_8h_source.html b/docs/html/automatic-pool_8h_source.html
deleted file mode 100644
index 0d82fd4..0000000
--- a/docs/html/automatic-pool_8h_source.html
+++ /dev/null
@@ -1,157 +0,0 @@
-
-
-
-
-
-
-
-|
- µEvLoop
-
- A fast and lightweight event loop aimed at embedded platforms in C99.
- |
-
- 1.8.17
-
-
-
diff --git a/docs/html/bc_s.png b/docs/html/bc_s.png
deleted file mode 100644
index 224b29a..0000000
Binary files a/docs/html/bc_s.png and /dev/null differ
diff --git a/docs/html/bdwn.png b/docs/html/bdwn.png
deleted file mode 100644
index 940a0b9..0000000
Binary files a/docs/html/bdwn.png and /dev/null differ
diff --git a/docs/html/circular-queue_8h.html b/docs/html/circular-queue_8h.html
deleted file mode 100644
index 527b479..0000000
--- a/docs/html/circular-queue_8h.html
+++ /dev/null
@@ -1,427 +0,0 @@
-
-
-
-
-
-
-
-|
- µEvLoop
-
- A fast and lightweight event loop aimed at embedded platforms in C99.
- |
-
Defines circular queues, fast and efficient FIFO data structures. -More...
-
Go to the source code of this file.
--Data Structures | |
| struct | uel_cqueue_t |
| Defines a circular queue of void pointers. More... | |
-Functions | |
| void | uel_cqueue_init (uel_cqueue_t *queue, void **buffer, uintptr_t size_log2n) |
| Initialised a circular queue object. More... | |
| void | uel_cqueue_clear (uel_cqueue_t *queue, bool clear_buffer) |
| Empties a queue by resetting its tail and count values. More... | |
| bool | uel_cqueue_push (uel_cqueue_t *queue, void *element) |
| Pushes an element into the queue. More... | |
| void * | uel_cqueue_pop (uel_cqueue_t *queue) |
| Pops an element from the queue. More... | |
| void * | uel_cqueue_peek_tail (uel_cqueue_t *queue) |
| Peeks the tail of the queue, where the oldest element is enqueued. This is the element that will be returned on the next pop operation. More... | |
| void * | uel_cqueue_peek_head (uel_cqueue_t *queue) |
| Peeks the head of the queue, where the newest element is enqueued. This is the element that was enqueued on the last push operation. More... | |
| bool | uel_cqueue_is_full (uel_cqueue_t *queue) |
| Checks if the queue is full. More... | |
| bool | uel_cqueue_is_empty (uel_cqueue_t *queue) |
| Checks if the queue is empty. Use this before popping from the queue. More... | |
| uintptr_t | uel_cqueue_count (uel_cqueue_t *queue) |
| Counts the number o elements in the queue. More... | |
Defines circular queues, fast and efficient FIFO data structures.
-| void uel_cqueue_clear | -( | -uel_cqueue_t * | -queue, | -
| - | - | bool | -clear_buffer | -
| - | ) | -- |
Empties a queue by resetting its tail and count values.
-| queue | The queue to be cleared. |
| clear_buffer | If this is set, completely de-initialises the queue. |
| uintptr_t uel_cqueue_count | -( | -uel_cqueue_t * | -queue | ) | -- |
Counts the number o elements in the queue.
-| queue | The queue whoese elements should be counted |
| void uel_cqueue_init | -( | -uel_cqueue_t * | -queue, | -
| - | - | void ** | -buffer, | -
| - | - | uintptr_t | -size_log2n | -
| - | ) | -- |
Initialised a circular queue object.
-| queue | The queue object to be intialised |
| buffer | An array of void pointers that will be used to store the enqueued values. |
| size_log2n | The size of the queue in its log2 form. |
| bool uel_cqueue_is_empty | -( | -uel_cqueue_t * | -queue | ) | -- |
Checks if the queue is empty. Use this before popping from the queue.
-| queue | The queue to check |
| bool uel_cqueue_is_full | -( | -uel_cqueue_t * | -queue | ) | -- |
Checks if the queue is full.
-| queue | The queue to check |
| void* uel_cqueue_peek_head | -( | -uel_cqueue_t * | -queue | ) | -- |
Peeks the head of the queue, where the newest element is enqueued. This is the element that was enqueued on the last push operation.
-| queue | The queue to peek |
| void* uel_cqueue_peek_tail | -( | -uel_cqueue_t * | -queue | ) | -- |
Peeks the tail of the queue, where the oldest element is enqueued. This is the element that will be returned on the next pop operation.
-| queue | The queue to peek |
| void* uel_cqueue_pop | -( | -uel_cqueue_t * | -queue | ) | -- |
Pops an element from the queue.
-| queue | The queue from where to pop |
| bool uel_cqueue_push | -( | -uel_cqueue_t * | -queue, | -
| - | - | void * | -element | -
| - | ) | -- |
Pushes an element into the queue.
-| queue | The queue into which to push the element |
| element | The element to be pushed into the queue |
- 1.8.17
-
-
-
diff --git a/docs/html/circular-queue_8h__dep__incl.map b/docs/html/circular-queue_8h__dep__incl.map
deleted file mode 100644
index 1f3ac68..0000000
--- a/docs/html/circular-queue_8h__dep__incl.map
+++ /dev/null
@@ -1,12 +0,0 @@
-
diff --git a/docs/html/circular-queue_8h__dep__incl.md5 b/docs/html/circular-queue_8h__dep__incl.md5
deleted file mode 100644
index d334ed8..0000000
--- a/docs/html/circular-queue_8h__dep__incl.md5
+++ /dev/null
@@ -1 +0,0 @@
-fb05972a720bacdc7cdf980c3c247cb5
\ No newline at end of file
diff --git a/docs/html/circular-queue_8h__dep__incl.png b/docs/html/circular-queue_8h__dep__incl.png
deleted file mode 100644
index 8945a16..0000000
Binary files a/docs/html/circular-queue_8h__dep__incl.png and /dev/null differ
diff --git a/docs/html/circular-queue_8h_source.html b/docs/html/circular-queue_8h_source.html
deleted file mode 100644
index cd043aa..0000000
--- a/docs/html/circular-queue_8h_source.html
+++ /dev/null
@@ -1,131 +0,0 @@
-
-
-
-
-
-
-
-|
- µEvLoop
-
- A fast and lightweight event loop aimed at embedded platforms in C99.
- |
-
- 1.8.17
-
-
-
diff --git a/docs/html/classes.html b/docs/html/classes.html
deleted file mode 100644
index 069a01b..0000000
--- a/docs/html/classes.html
+++ /dev/null
@@ -1,118 +0,0 @@
-
-
-
-
-
-
-
-|
- µEvLoop
-
- A fast and lightweight event loop aimed at embedded platforms in C99.
- |
-
- 1.8.17
-
-
-
diff --git a/docs/html/closed.png b/docs/html/closed.png
deleted file mode 100644
index 98cc2c9..0000000
Binary files a/docs/html/closed.png and /dev/null differ
diff --git a/docs/html/closure_8h.html b/docs/html/closure_8h.html
deleted file mode 100644
index 3a5d7a1..0000000
--- a/docs/html/closure_8h.html
+++ /dev/null
@@ -1,254 +0,0 @@
-
-
-
-
-
-
-
-|
- µEvLoop
-
- A fast and lightweight event loop aimed at embedded platforms in C99.
- |
-
Defines closures, objects that bind functions to creating and calling contexts. -More...
-
Go to the source code of this file.
--Data Structures | |
| struct | uel_closure_t |
| Defines a closure, a tuple <function, context, destructor> More... | |
-Typedefs | |
| typedef void *(* | uel_closure_function_t) (void *context, void *params) |
| Defines a closure function, suitable for being bound at a closure. More... | |
-Functions | |
| uel_closure_t | uel_closure_create (uel_closure_function_t function, void *context) |
| Creates a new closure. More... | |
| void * | uel_closure_invoke (uel_closure_t *closure, void *params) |
| Invokes a closure and returns whatever value it returned. More... | |
| uel_closure_t | uel_nop () |
| Returns a closure that does nothing. More... | |
Defines closures, objects that bind functions to creating and calling contexts.
-| typedef void*(* uel_closure_function_t) (void *context, void *params) | -
Defines a closure function, suitable for being bound at a closure.
-Must take two pointers ar arguments, one for the context and one for closure parameters. Must return a void pointer.
- -| uel_closure_t uel_closure_create | -( | -uel_closure_function_t | -function, | -
| - | - | void * | -context | -
| - | ) | -- |
Creates a new closure.
-Binds the tuple <function, context> and populates a new closure object with it. The object is returned by value.
| function | The function to be run on closure invokation. |
| context | The creation context of the closure. |
| void* uel_closure_invoke | -( | -uel_closure_t * | -closure, | -
| - | - | void * | -params | -
| - | ) | -- |
Invokes a closure and returns whatever value it returned.
-| closure | The closure reference to be invoked. |
| params | The parameters to be passed along during closure invokation. |
| uel_closure_t uel_nop | -( | -) | -- |
Returns a closure that does nothing.
-The returned closure can be passed as parameters to functions that take closures as callbacks when the caller does not need to callback.
- -
- 1.8.17
-
-
-
diff --git a/docs/html/closure_8h__dep__incl.map b/docs/html/closure_8h__dep__incl.map
deleted file mode 100644
index b787ac7..0000000
--- a/docs/html/closure_8h__dep__incl.map
+++ /dev/null
@@ -1,17 +0,0 @@
-
diff --git a/docs/html/closure_8h__dep__incl.md5 b/docs/html/closure_8h__dep__incl.md5
deleted file mode 100644
index 067447e..0000000
--- a/docs/html/closure_8h__dep__incl.md5
+++ /dev/null
@@ -1 +0,0 @@
-f30209a286066a15ec82429a4d63e3a0
\ No newline at end of file
diff --git a/docs/html/closure_8h__dep__incl.png b/docs/html/closure_8h__dep__incl.png
deleted file mode 100644
index 5e9ff1a..0000000
Binary files a/docs/html/closure_8h__dep__incl.png and /dev/null differ
diff --git a/docs/html/closure_8h_source.html b/docs/html/closure_8h_source.html
deleted file mode 100644
index 409e8ea..0000000
--- a/docs/html/closure_8h_source.html
+++ /dev/null
@@ -1,106 +0,0 @@
-
-
-
-
-
-
-
-|
- µEvLoop
-
- A fast and lightweight event loop aimed at embedded platforms in C99.
- |
-
- 1.8.17
-
-
-
diff --git a/docs/html/conditional_8h.html b/docs/html/conditional_8h.html
deleted file mode 100644
index d89ee25..0000000
--- a/docs/html/conditional_8h.html
+++ /dev/null
@@ -1,217 +0,0 @@
-
-
-
-
-
-
-
-|
- µEvLoop
-
- A fast and lightweight event loop aimed at embedded platforms in C99.
- |
-
Contains definitions of functional conditionals, structures that act as if-else constructs. -More...
-#include "uevloop/utils/closure.h"

Go to the source code of this file.
--Data Structures | |
| struct | uel_conditional_t |
| Conditionals are constructs that provide functional flow control. More... | |
-Functions | |
| void | uel_conditional_init (uel_conditional_t *conditional, uel_closure_t test, uel_closure_t if_true, uel_closure_t if_false) |
| Initialises a conditional structure. More... | |
| void * | uel_conditional_apply (uel_conditional_t *conditional, void *params) |
| Applies a conditional do some input. More... | |
Contains definitions of functional conditionals, structures that act as if-else constructs.
-| void* uel_conditional_apply | -( | -uel_conditional_t * | -conditional, | -
| - | - | void * | -params | -
| - | ) | -- |
Applies a conditional do some input.
-This function takes some input and submits it to the test closure, whose output will be cast to a boolean value. According to this value, either if_true or if_false closures will be called with the same value as parameters.
| conditional | The conditional to be applied |
| params | The parameter that will be tested and provided to the chosen closure |
| void uel_conditional_init | -( | -uel_conditional_t * | -conditional, | -
| - | - | uel_closure_t | -test, | -
| - | - | uel_closure_t | -if_true, | -
| - | - | uel_closure_t | -if_false | -
| - | ) | -- |
Initialises a conditional structure.
-| conditional | The conditional object to be initialised |
| test | The closure to test the input in order to decide what to do next |
| if_true | The closure to be invoked when the test closure returns true |
| if_false | The closure to be invoked when the test closure returns false |
- 1.8.17
-
-
-
diff --git a/docs/html/conditional_8h__dep__incl.map b/docs/html/conditional_8h__dep__incl.map
deleted file mode 100644
index 0060105..0000000
--- a/docs/html/conditional_8h__dep__incl.map
+++ /dev/null
@@ -1,4 +0,0 @@
-
diff --git a/docs/html/conditional_8h__dep__incl.md5 b/docs/html/conditional_8h__dep__incl.md5
deleted file mode 100644
index 7dd41b8..0000000
--- a/docs/html/conditional_8h__dep__incl.md5
+++ /dev/null
@@ -1 +0,0 @@
-39c6bc037b27d37e18ba54b14b839779
\ No newline at end of file
diff --git a/docs/html/conditional_8h__dep__incl.png b/docs/html/conditional_8h__dep__incl.png
deleted file mode 100644
index 5f0cac3..0000000
Binary files a/docs/html/conditional_8h__dep__incl.png and /dev/null differ
diff --git a/docs/html/conditional_8h__incl.map b/docs/html/conditional_8h__incl.map
deleted file mode 100644
index 2860df9..0000000
--- a/docs/html/conditional_8h__incl.map
+++ /dev/null
@@ -1,4 +0,0 @@
-
diff --git a/docs/html/conditional_8h__incl.md5 b/docs/html/conditional_8h__incl.md5
deleted file mode 100644
index aa8a8ef..0000000
--- a/docs/html/conditional_8h__incl.md5
+++ /dev/null
@@ -1 +0,0 @@
-ecf3129280a21e3923f9404b96b9d5e5
\ No newline at end of file
diff --git a/docs/html/conditional_8h__incl.png b/docs/html/conditional_8h__incl.png
deleted file mode 100644
index 99a6c3e..0000000
Binary files a/docs/html/conditional_8h__incl.png and /dev/null differ
diff --git a/docs/html/conditional_8h_source.html b/docs/html/conditional_8h_source.html
deleted file mode 100644
index 6ac6609..0000000
--- a/docs/html/conditional_8h_source.html
+++ /dev/null
@@ -1,107 +0,0 @@
-
-
-
-
-
-
-
-|
- µEvLoop
-
- A fast and lightweight event loop aimed at embedded platforms in C99.
- |
-
- 1.8.17
-
-
-
diff --git a/docs/html/config_8h.html b/docs/html/config_8h.html
deleted file mode 100644
index 9dddb8b..0000000
--- a/docs/html/config_8h.html
+++ /dev/null
@@ -1,133 +0,0 @@
-
-
-
-
-
-
-
-|
- µEvLoop
-
- A fast and lightweight event loop aimed at embedded platforms in C99.
- |
-
Central repository of system configuration. This is meant to be edited by the programmer as needed. -More...
-
Go to the source code of this file.
--Macros | |
| -#define | UEL_SYSPOOLS_EVENT_POOL_SIZE_LOG2N (7) |
| Defines the size of the event pool size in log2 form. Defaults to 128 events. | |
| -#define | UEL_SYSPOOLS_LLIST_NODE_POOL_SIZE_LOG2N (7) |
| Defines the size of the linked list node pool size in log2 form. Defaults to 128 nodes. | |
| -#define | UEL_SYSQUEUES_EVENT_QUEUE_SIZE_LOG2N (5) |
| The size of the event queue in log2 form. Defaults to 32 events. | |
| -#define | UEL_SYSQUEUES_SCHEDULE_QUEUE_SIZE_LOG2N (4) |
| The size of the schedule queue in log2 form. Defaults to 32 events. | |
| -#define | UEL_SIGNAL_MAX_LISTENERS (5) |
| Defines the max number of listeners to be attached to an speciffic signal in a single relay. | |
| -#define | UEL_PROMISE_SHORTCUTS |
| Enable promise chain functions aliases: THEN, CATCH, AFTER, ALWAYS. | |
Central repository of system configuration. This is meant to be edited by the programmer as needed.
-
- 1.8.17
-
-
-
diff --git a/docs/html/config_8h__dep__incl.map b/docs/html/config_8h__dep__incl.map
deleted file mode 100644
index 265063e..0000000
--- a/docs/html/config_8h__dep__incl.map
+++ /dev/null
@@ -1,10 +0,0 @@
-
diff --git a/docs/html/config_8h__dep__incl.md5 b/docs/html/config_8h__dep__incl.md5
deleted file mode 100644
index 7e4ebcd..0000000
--- a/docs/html/config_8h__dep__incl.md5
+++ /dev/null
@@ -1 +0,0 @@
-71475bea109d5215ef9ed22c68c1fa05
\ No newline at end of file
diff --git a/docs/html/config_8h__dep__incl.png b/docs/html/config_8h__dep__incl.png
deleted file mode 100644
index a4f4807..0000000
Binary files a/docs/html/config_8h__dep__incl.png and /dev/null differ
diff --git a/docs/html/config_8h_source.html b/docs/html/config_8h_source.html
deleted file mode 100644
index be0e0f2..0000000
--- a/docs/html/config_8h_source.html
+++ /dev/null
@@ -1,118 +0,0 @@
-
-
-
-
-
-
-
-|
- µEvLoop
-
- A fast and lightweight event loop aimed at embedded platforms in C99.
- |
-
- 1.8.17
-
-
-
diff --git a/docs/html/critical-section_8h.html b/docs/html/critical-section_8h.html
deleted file mode 100644
index badcf80..0000000
--- a/docs/html/critical-section_8h.html
+++ /dev/null
@@ -1,135 +0,0 @@
-
-
-
-
-
-
-
-|
- µEvLoop
-
- A fast and lightweight event loop aimed at embedded platforms in C99.
- |
-
Contains macros for delimitating critical sections. -More...
- -Go to the source code of this file.
--Macros | |
| #define | UEL_CRITICAL_ENTER |
| Enters a critical section. More... | |
| #define | UEL_CRITICAL_EXIT |
| Exits a critical section.. More... | |
Contains macros for delimitating critical sections.
-| #define UEL_CRITICAL_ENTER | -
Enters a critical section.
-This is a no-op meant to be overridden by the programmer, according to the synchronisation methods available on the target platform.
- -| #define UEL_CRITICAL_EXIT | -
Exits a critical section..
-This is a no-op meant to be overridden by the programmer, according to the synchronisation methods available on the target platform.
- -
- 1.8.17
-
-
-
diff --git a/docs/html/critical-section_8h_source.html b/docs/html/critical-section_8h_source.html
deleted file mode 100644
index e11f765..0000000
--- a/docs/html/critical-section_8h_source.html
+++ /dev/null
@@ -1,101 +0,0 @@
-
-
-
-
-
-
-
-|
- µEvLoop
-
- A fast and lightweight event loop aimed at embedded platforms in C99.
- |
-
- 1.8.17
-
-
-
diff --git a/docs/html/dir_000003_000004.html b/docs/html/dir_000003_000004.html
deleted file mode 100644
index 60400d0..0000000
--- a/docs/html/dir_000003_000004.html
+++ /dev/null
@@ -1,77 +0,0 @@
-
-
-
-
-
-
-
-|
- µEvLoop
-
- A fast and lightweight event loop aimed at embedded platforms in C99.
- |
-
| File in include/uevloop/system | Includes file in include/uevloop/system/containers |
|---|---|
| event-loop.h | system-pools.h |
| event-loop.h | system-queues.h |
| scheduler.h | system-pools.h |
| scheduler.h | system-queues.h |
| signal.h | system-pools.h |
| signal.h | system-queues.h |
- 1.8.17
-
-
-
diff --git a/docs/html/dir_000003_000005.html b/docs/html/dir_000003_000005.html
deleted file mode 100644
index ded41b7..0000000
--- a/docs/html/dir_000003_000005.html
+++ /dev/null
@@ -1,77 +0,0 @@
-
-
-
-
-
-
-
-|
- µEvLoop
-
- A fast and lightweight event loop aimed at embedded platforms in C99.
- |
-
| File in include/uevloop/system | Includes file in include/uevloop/utils |
|---|---|
| containers / application.h | module.h |
| event-loop.h | closure.h |
| event-loop.h | linked-list.h |
| event.h | closure.h |
| event.h | linked-list.h |
| scheduler.h | closure.h |
| scheduler.h | linked-list.h |
| signal.h | closure.h |
| signal.h | linked-list.h |
| signal.h | promise.h |
| containers / system-pools.h | linked-list.h |
| containers / system-pools.h | object-pool.h |
| containers / system-queues.h | circular-queue.h |
- 1.8.17
-
-
-
diff --git a/docs/html/dir_000004_000005.html b/docs/html/dir_000004_000005.html
deleted file mode 100644
index 492155a..0000000
--- a/docs/html/dir_000004_000005.html
+++ /dev/null
@@ -1,77 +0,0 @@
-
-
-
-
-
-
-
-|
- µEvLoop
-
- A fast and lightweight event loop aimed at embedded platforms in C99.
- |
-
| File in include/uevloop/system/containers | Includes file in include/uevloop/utils |
|---|---|
| application.h | module.h |
| system-pools.h | linked-list.h |
| system-pools.h | object-pool.h |
| system-queues.h | circular-queue.h |
- 1.8.17
-
-
-
diff --git a/docs/html/dir_07ca576fdadbb370dc7f55dcdd06f8b8.html b/docs/html/dir_07ca576fdadbb370dc7f55dcdd06f8b8.html
deleted file mode 100644
index 6a6c0ed..0000000
--- a/docs/html/dir_07ca576fdadbb370dc7f55dcdd06f8b8.html
+++ /dev/null
@@ -1,105 +0,0 @@
-
-
-
-
-
-
-
-|
- µEvLoop
-
- A fast and lightweight event loop aimed at embedded platforms in C99.
- |
-

-Files | |
| file | application.h [code] |
| The application module is a convenient top-level container for the system internals. | |
| file | system-pools.h [code] |
| A container for the system's internal pools. | |
| file | system-queues.h [code] |
| A container for the system's internal queues. | |
- 1.8.17
-
-
-
diff --git a/docs/html/dir_07ca576fdadbb370dc7f55dcdd06f8b8_dep.map b/docs/html/dir_07ca576fdadbb370dc7f55dcdd06f8b8_dep.map
deleted file mode 100644
index 2b8ddee..0000000
--- a/docs/html/dir_07ca576fdadbb370dc7f55dcdd06f8b8_dep.map
+++ /dev/null
@@ -1,6 +0,0 @@
-
diff --git a/docs/html/dir_07ca576fdadbb370dc7f55dcdd06f8b8_dep.md5 b/docs/html/dir_07ca576fdadbb370dc7f55dcdd06f8b8_dep.md5
deleted file mode 100644
index 35732cf..0000000
--- a/docs/html/dir_07ca576fdadbb370dc7f55dcdd06f8b8_dep.md5
+++ /dev/null
@@ -1 +0,0 @@
-c22fe9edb2f1025991594a2e9f403659
\ No newline at end of file
diff --git a/docs/html/dir_07ca576fdadbb370dc7f55dcdd06f8b8_dep.png b/docs/html/dir_07ca576fdadbb370dc7f55dcdd06f8b8_dep.png
deleted file mode 100644
index d02c2a5..0000000
Binary files a/docs/html/dir_07ca576fdadbb370dc7f55dcdd06f8b8_dep.png and /dev/null differ
diff --git a/docs/html/dir_0b107f87463abbc8b2ae6ed1ed981175.html b/docs/html/dir_0b107f87463abbc8b2ae6ed1ed981175.html
deleted file mode 100644
index 5c4d8a0..0000000
--- a/docs/html/dir_0b107f87463abbc8b2ae6ed1ed981175.html
+++ /dev/null
@@ -1,126 +0,0 @@
-
-
-
-
-
-
-
-|
- µEvLoop
-
- A fast and lightweight event loop aimed at embedded platforms in C99.
- |
-

-Files | |
| file | automatic-pool.h [code] |
| Defines automatic pointers and automatic pools, objects that wrap object pools and objects managed by them. These wrappers provide basic automatic memory management. | |
| file | circular-queue.h [code] |
| Defines circular queues, fast and efficient FIFO data structures. | |
| file | closure.h [code] |
| Defines closures, objects that bind functions to creating and calling contexts. | |
| file | conditional.h [code] |
| Contains definitions of functional conditionals, structures that act as if-else constructs. | |
| file | functional.h [code] |
| Contains helpers for composing and augumenting closures. | |
| file | iterator.h [code] |
| Defines iterators, structures and functions suitable for enumerating other data structures. | |
| file | linked-list.h [code] |
| Defines a simple implementation of linked lists and functions to manipulate it. | |
| file | module.h [code] |
| file | object-pool.h [code] |
| Defines object pools, arrays of pre-allocated objects for dynamic use. | |
| file | pipeline.h [code] |
| Defines pipelines, structures to hold many closures and functions to invoke them sequentially, composing their functionality. | |
| file | promise.h [code] |
| Contains definitions for promise stores, promises and functions to manipulate them. | |
- 1.8.17
-
-
-
diff --git a/docs/html/dir_0b107f87463abbc8b2ae6ed1ed981175_dep.map b/docs/html/dir_0b107f87463abbc8b2ae6ed1ed981175_dep.map
deleted file mode 100644
index e364212..0000000
--- a/docs/html/dir_0b107f87463abbc8b2ae6ed1ed981175_dep.map
+++ /dev/null
@@ -1,4 +0,0 @@
-
diff --git a/docs/html/dir_0b107f87463abbc8b2ae6ed1ed981175_dep.md5 b/docs/html/dir_0b107f87463abbc8b2ae6ed1ed981175_dep.md5
deleted file mode 100644
index f9334e4..0000000
--- a/docs/html/dir_0b107f87463abbc8b2ae6ed1ed981175_dep.md5
+++ /dev/null
@@ -1 +0,0 @@
-47e250b26559c37b726b1bdc4d5ece39
\ No newline at end of file
diff --git a/docs/html/dir_0b107f87463abbc8b2ae6ed1ed981175_dep.png b/docs/html/dir_0b107f87463abbc8b2ae6ed1ed981175_dep.png
deleted file mode 100644
index f725e77..0000000
Binary files a/docs/html/dir_0b107f87463abbc8b2ae6ed1ed981175_dep.png and /dev/null differ
diff --git a/docs/html/dir_1c07dc2bb514f68216b7275ce8a19048.html b/docs/html/dir_1c07dc2bb514f68216b7275ce8a19048.html
deleted file mode 100644
index ac6e3d0..0000000
--- a/docs/html/dir_1c07dc2bb514f68216b7275ce8a19048.html
+++ /dev/null
@@ -1,88 +0,0 @@
-
-
-
-
-
-
-
-|
- µEvLoop
-
- A fast and lightweight event loop aimed at embedded platforms in C99.
- |
-
-Files | |
| file | critical-section.h [code] |
| Contains macros for delimitating critical sections. | |
- 1.8.17
-
-
-
diff --git a/docs/html/dir_abb95c841d2d19e4a38c0aebc4f3511e.html b/docs/html/dir_abb95c841d2d19e4a38c0aebc4f3511e.html
deleted file mode 100644
index 311bad8..0000000
--- a/docs/html/dir_abb95c841d2d19e4a38c0aebc4f3511e.html
+++ /dev/null
@@ -1,113 +0,0 @@
-
-
-
-
-
-
-
-|
- µEvLoop
-
- A fast and lightweight event loop aimed at embedded platforms in C99.
- |
-

-Directories |
-Files | |
| file | event-loop.h [code] |
| Module responsible for running enqueued events and process them accordingly. | |
| file | event.h [code] |
| Defines events and methods to configure events. | |
| file | scheduler.h [code] |
| Module responsible for keeping track of time and tasks to be run in the future. | |
| file | signal.h [code] |
| Defines signals and relays, structures used to communicate asynchronously between distant parts of the application. | |
- 1.8.17
-
-
-
diff --git a/docs/html/dir_abb95c841d2d19e4a38c0aebc4f3511e_dep.map b/docs/html/dir_abb95c841d2d19e4a38c0aebc4f3511e_dep.map
deleted file mode 100644
index b3fba2a..0000000
--- a/docs/html/dir_abb95c841d2d19e4a38c0aebc4f3511e_dep.map
+++ /dev/null
@@ -1,8 +0,0 @@
-
diff --git a/docs/html/dir_abb95c841d2d19e4a38c0aebc4f3511e_dep.md5 b/docs/html/dir_abb95c841d2d19e4a38c0aebc4f3511e_dep.md5
deleted file mode 100644
index 796c15a..0000000
--- a/docs/html/dir_abb95c841d2d19e4a38c0aebc4f3511e_dep.md5
+++ /dev/null
@@ -1 +0,0 @@
-27d2246bf8988d04a04bf2ac5dd068cc
\ No newline at end of file
diff --git a/docs/html/dir_abb95c841d2d19e4a38c0aebc4f3511e_dep.png b/docs/html/dir_abb95c841d2d19e4a38c0aebc4f3511e_dep.png
deleted file mode 100644
index 4195252..0000000
Binary files a/docs/html/dir_abb95c841d2d19e4a38c0aebc4f3511e_dep.png and /dev/null differ
diff --git a/docs/html/dir_bf342d982ec00e45652f5a4c01fdc40d.html b/docs/html/dir_bf342d982ec00e45652f5a4c01fdc40d.html
deleted file mode 100644
index 4578d81..0000000
--- a/docs/html/dir_bf342d982ec00e45652f5a4c01fdc40d.html
+++ /dev/null
@@ -1,104 +0,0 @@
-
-
-
-
-
-
-
-|
- µEvLoop
-
- A fast and lightweight event loop aimed at embedded platforms in C99.
- |
-

-Directories |
-Files | |
| file | config.h [code] |
| Central repository of system configuration. This is meant to be edited by the programmer as needed. | |
- 1.8.17
-
-
-
diff --git a/docs/html/dir_bf342d982ec00e45652f5a4c01fdc40d_dep.map b/docs/html/dir_bf342d982ec00e45652f5a4c01fdc40d_dep.map
deleted file mode 100644
index 8a33df2..0000000
--- a/docs/html/dir_bf342d982ec00e45652f5a4c01fdc40d_dep.map
+++ /dev/null
@@ -1,8 +0,0 @@
-
diff --git a/docs/html/dir_bf342d982ec00e45652f5a4c01fdc40d_dep.md5 b/docs/html/dir_bf342d982ec00e45652f5a4c01fdc40d_dep.md5
deleted file mode 100644
index 5f7f4b4..0000000
--- a/docs/html/dir_bf342d982ec00e45652f5a4c01fdc40d_dep.md5
+++ /dev/null
@@ -1 +0,0 @@
-c400a420274262f99f6c16af2141fca4
\ No newline at end of file
diff --git a/docs/html/dir_bf342d982ec00e45652f5a4c01fdc40d_dep.png b/docs/html/dir_bf342d982ec00e45652f5a4c01fdc40d_dep.png
deleted file mode 100644
index c35a6b4..0000000
Binary files a/docs/html/dir_bf342d982ec00e45652f5a4c01fdc40d_dep.png and /dev/null differ
diff --git a/docs/html/dir_d44c64559bbebec7f509842c48db8b23.html b/docs/html/dir_d44c64559bbebec7f509842c48db8b23.html
deleted file mode 100644
index 92b58a9..0000000
--- a/docs/html/dir_d44c64559bbebec7f509842c48db8b23.html
+++ /dev/null
@@ -1,94 +0,0 @@
-
-
-
-
-
-
-
-|
- µEvLoop
-
- A fast and lightweight event loop aimed at embedded platforms in C99.
- |
-
- 1.8.17
-
-
-
diff --git a/docs/html/dir_d44c64559bbebec7f509842c48db8b23_dep.map b/docs/html/dir_d44c64559bbebec7f509842c48db8b23_dep.map
deleted file mode 100644
index 9f1f5f3..0000000
--- a/docs/html/dir_d44c64559bbebec7f509842c48db8b23_dep.map
+++ /dev/null
@@ -1,4 +0,0 @@
-
diff --git a/docs/html/dir_d44c64559bbebec7f509842c48db8b23_dep.md5 b/docs/html/dir_d44c64559bbebec7f509842c48db8b23_dep.md5
deleted file mode 100644
index 9b19834..0000000
--- a/docs/html/dir_d44c64559bbebec7f509842c48db8b23_dep.md5
+++ /dev/null
@@ -1 +0,0 @@
-e3a17f216c33f837c64ca30f197dfe24
\ No newline at end of file
diff --git a/docs/html/dir_d44c64559bbebec7f509842c48db8b23_dep.png b/docs/html/dir_d44c64559bbebec7f509842c48db8b23_dep.png
deleted file mode 100644
index 8871dd3..0000000
Binary files a/docs/html/dir_d44c64559bbebec7f509842c48db8b23_dep.png and /dev/null differ
diff --git a/docs/html/doc.png b/docs/html/doc.png
deleted file mode 100644
index 17edabf..0000000
Binary files a/docs/html/doc.png and /dev/null differ
diff --git a/docs/html/doxygen.css b/docs/html/doxygen.css
deleted file mode 100644
index 73ecbb2..0000000
--- a/docs/html/doxygen.css
+++ /dev/null
@@ -1,1771 +0,0 @@
-/* The standard CSS for doxygen 1.8.17 */
-
-body, table, div, p, dl {
- font: 400 14px/22px Roboto,sans-serif;
-}
-
-p.reference, p.definition {
- font: 400 14px/22px Roboto,sans-serif;
-}
-
-/* @group Heading Levels */
-
-h1.groupheader {
- font-size: 150%;
-}
-
-.title {
- font: 400 14px/28px Roboto,sans-serif;
- font-size: 150%;
- font-weight: bold;
- margin: 10px 2px;
-}
-
-h2.groupheader {
- border-bottom: 1px solid #879ECB;
- color: #354C7B;
- font-size: 150%;
- font-weight: normal;
- margin-top: 1.75em;
- padding-top: 8px;
- padding-bottom: 4px;
- width: 100%;
-}
-
-h3.groupheader {
- font-size: 100%;
-}
-
-h1, h2, h3, h4, h5, h6 {
- -webkit-transition: text-shadow 0.5s linear;
- -moz-transition: text-shadow 0.5s linear;
- -ms-transition: text-shadow 0.5s linear;
- -o-transition: text-shadow 0.5s linear;
- transition: text-shadow 0.5s linear;
- margin-right: 15px;
-}
-
-h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow {
- text-shadow: 0 0 15px cyan;
-}
-
-dt {
- font-weight: bold;
-}
-
-ul.multicol {
- -moz-column-gap: 1em;
- -webkit-column-gap: 1em;
- column-gap: 1em;
- -moz-column-count: 3;
- -webkit-column-count: 3;
- column-count: 3;
-}
-
-p.startli, p.startdd {
- margin-top: 2px;
-}
-
-th p.starttd, p.intertd, p.endtd {
- font-size: 100%;
- font-weight: 700;
-}
-
-p.starttd {
- margin-top: 0px;
-}
-
-p.endli {
- margin-bottom: 0px;
-}
-
-p.enddd {
- margin-bottom: 4px;
-}
-
-p.endtd {
- margin-bottom: 2px;
-}
-
-p.interli {
-}
-
-p.interdd {
-}
-
-p.intertd {
-}
-
-/* @end */
-
-caption {
- font-weight: bold;
-}
-
-span.legend {
- font-size: 70%;
- text-align: center;
-}
-
-h3.version {
- font-size: 90%;
- text-align: center;
-}
-
-div.qindex, div.navtab{
- background-color: #EBEFF6;
- border: 1px solid #A3B4D7;
- text-align: center;
-}
-
-div.qindex, div.navpath {
- width: 100%;
- line-height: 140%;
-}
-
-div.navtab {
- margin-right: 15px;
-}
-
-/* @group Link Styling */
-
-a {
- color: #3D578C;
- font-weight: normal;
- text-decoration: none;
-}
-
-.contents a:visited {
- color: #4665A2;
-}
-
-a:hover {
- text-decoration: underline;
-}
-
-a.qindex {
- font-weight: bold;
-}
-
-a.qindexHL {
- font-weight: bold;
- background-color: #9CAFD4;
- color: #FFFFFF;
- border: 1px double #869DCA;
-}
-
-.contents a.qindexHL:visited {
- color: #FFFFFF;
-}
-
-a.el {
- font-weight: bold;
-}
-
-a.elRef {
-}
-
-a.code, a.code:visited, a.line, a.line:visited {
- color: #4665A2;
-}
-
-a.codeRef, a.codeRef:visited, a.lineRef, a.lineRef:visited {
- color: #4665A2;
-}
-
-/* @end */
-
-dl.el {
- margin-left: -1cm;
-}
-
-ul {
- overflow: hidden; /*Fixed: list item bullets overlap floating elements*/
-}
-
-#side-nav ul {
- overflow: visible; /* reset ul rule for scroll bar in GENERATE_TREEVIEW window */
-}
-
-#main-nav ul {
- overflow: visible; /* reset ul rule for the navigation bar drop down lists */
-}
-
-.fragment {
- text-align: left;
- direction: ltr;
- overflow-x: auto; /*Fixed: fragment lines overlap floating elements*/
- overflow-y: hidden;
-}
-
-pre.fragment {
- border: 1px solid #C4CFE5;
- background-color: #FBFCFD;
- padding: 4px 6px;
- margin: 4px 8px 4px 2px;
- overflow: auto;
- word-wrap: break-word;
- font-size: 9pt;
- line-height: 125%;
- font-family: monospace, fixed;
- font-size: 105%;
-}
-
-div.fragment {
- padding: 0 0 1px 0; /*Fixed: last line underline overlap border*/
- margin: 4px 8px 4px 2px;
- background-color: #FBFCFD;
- border: 1px solid #C4CFE5;
-}
-
-div.line {
- font-family: monospace, fixed;
- font-size: 13px;
- min-height: 13px;
- line-height: 1.0;
- text-wrap: unrestricted;
- white-space: -moz-pre-wrap; /* Moz */
- white-space: -pre-wrap; /* Opera 4-6 */
- white-space: -o-pre-wrap; /* Opera 7 */
- white-space: pre-wrap; /* CSS3 */
- word-wrap: break-word; /* IE 5.5+ */
- text-indent: -53px;
- padding-left: 53px;
- padding-bottom: 0px;
- margin: 0px;
- -webkit-transition-property: background-color, box-shadow;
- -webkit-transition-duration: 0.5s;
- -moz-transition-property: background-color, box-shadow;
- -moz-transition-duration: 0.5s;
- -ms-transition-property: background-color, box-shadow;
- -ms-transition-duration: 0.5s;
- -o-transition-property: background-color, box-shadow;
- -o-transition-duration: 0.5s;
- transition-property: background-color, box-shadow;
- transition-duration: 0.5s;
-}
-
-div.line:after {
- content:"\000A";
- white-space: pre;
-}
-
-div.line.glow {
- background-color: cyan;
- box-shadow: 0 0 10px cyan;
-}
-
-
-span.lineno {
- padding-right: 4px;
- text-align: right;
- border-right: 2px solid #0F0;
- background-color: #E8E8E8;
- white-space: pre;
-}
-span.lineno a {
- background-color: #D8D8D8;
-}
-
-span.lineno a:hover {
- background-color: #C8C8C8;
-}
-
-.lineno {
- -webkit-touch-callout: none;
- -webkit-user-select: none;
- -khtml-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
-}
-
-div.ah, span.ah {
- background-color: black;
- font-weight: bold;
- color: #FFFFFF;
- margin-bottom: 3px;
- margin-top: 3px;
- padding: 0.2em;
- border: solid thin #333;
- border-radius: 0.5em;
- -webkit-border-radius: .5em;
- -moz-border-radius: .5em;
- box-shadow: 2px 2px 3px #999;
- -webkit-box-shadow: 2px 2px 3px #999;
- -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px;
- background-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#000),color-stop(0.3, #444));
- background-image: -moz-linear-gradient(center top, #eee 0%, #444 40%, #000 110%);
-}
-
-div.classindex ul {
- list-style: none;
- padding-left: 0;
-}
-
-div.classindex span.ai {
- display: inline-block;
-}
-
-div.groupHeader {
- margin-left: 16px;
- margin-top: 12px;
- font-weight: bold;
-}
-
-div.groupText {
- margin-left: 16px;
- font-style: italic;
-}
-
-body {
- background-color: white;
- color: black;
- margin: 0;
-}
-
-div.contents {
- margin-top: 10px;
- margin-left: 12px;
- margin-right: 8px;
-}
-
-td.indexkey {
- background-color: #EBEFF6;
- font-weight: bold;
- border: 1px solid #C4CFE5;
- margin: 2px 0px 2px 0;
- padding: 2px 10px;
- white-space: nowrap;
- vertical-align: top;
-}
-
-td.indexvalue {
- background-color: #EBEFF6;
- border: 1px solid #C4CFE5;
- padding: 2px 10px;
- margin: 2px 0px;
-}
-
-tr.memlist {
- background-color: #EEF1F7;
-}
-
-p.formulaDsp {
- text-align: center;
-}
-
-img.formulaDsp {
-
-}
-
-img.formulaInl, img.inline {
- vertical-align: middle;
-}
-
-div.center {
- text-align: center;
- margin-top: 0px;
- margin-bottom: 0px;
- padding: 0px;
-}
-
-div.center img {
- border: 0px;
-}
-
-address.footer {
- text-align: right;
- padding-right: 12px;
-}
-
-img.footer {
- border: 0px;
- vertical-align: middle;
-}
-
-/* @group Code Colorization */
-
-span.keyword {
- color: #008000
-}
-
-span.keywordtype {
- color: #604020
-}
-
-span.keywordflow {
- color: #e08000
-}
-
-span.comment {
- color: #800000
-}
-
-span.preprocessor {
- color: #806020
-}
-
-span.stringliteral {
- color: #002080
-}
-
-span.charliteral {
- color: #008080
-}
-
-span.vhdldigit {
- color: #ff00ff
-}
-
-span.vhdlchar {
- color: #000000
-}
-
-span.vhdlkeyword {
- color: #700070
-}
-
-span.vhdllogic {
- color: #ff0000
-}
-
-blockquote {
- background-color: #F7F8FB;
- border-left: 2px solid #9CAFD4;
- margin: 0 24px 0 4px;
- padding: 0 12px 0 16px;
-}
-
-blockquote.DocNodeRTL {
- border-left: 0;
- border-right: 2px solid #9CAFD4;
- margin: 0 4px 0 24px;
- padding: 0 16px 0 12px;
-}
-
-/* @end */
-
-/*
-.search {
- color: #003399;
- font-weight: bold;
-}
-
-form.search {
- margin-bottom: 0px;
- margin-top: 0px;
-}
-
-input.search {
- font-size: 75%;
- color: #000080;
- font-weight: normal;
- background-color: #e8eef2;
-}
-*/
-
-td.tiny {
- font-size: 75%;
-}
-
-.dirtab {
- padding: 4px;
- border-collapse: collapse;
- border: 1px solid #A3B4D7;
-}
-
-th.dirtab {
- background: #EBEFF6;
- font-weight: bold;
-}
-
-hr {
- height: 0px;
- border: none;
- border-top: 1px solid #4A6AAA;
-}
-
-hr.footer {
- height: 1px;
-}
-
-/* @group Member Descriptions */
-
-table.memberdecls {
- border-spacing: 0px;
- padding: 0px;
-}
-
-.memberdecls td, .fieldtable tr {
- -webkit-transition-property: background-color, box-shadow;
- -webkit-transition-duration: 0.5s;
- -moz-transition-property: background-color, box-shadow;
- -moz-transition-duration: 0.5s;
- -ms-transition-property: background-color, box-shadow;
- -ms-transition-duration: 0.5s;
- -o-transition-property: background-color, box-shadow;
- -o-transition-duration: 0.5s;
- transition-property: background-color, box-shadow;
- transition-duration: 0.5s;
-}
-
-.memberdecls td.glow, .fieldtable tr.glow {
- background-color: cyan;
- box-shadow: 0 0 15px cyan;
-}
-
-.mdescLeft, .mdescRight,
-.memItemLeft, .memItemRight,
-.memTemplItemLeft, .memTemplItemRight, .memTemplParams {
- background-color: #F9FAFC;
- border: none;
- margin: 4px;
- padding: 1px 0 0 8px;
-}
-
-.mdescLeft, .mdescRight {
- padding: 0px 8px 4px 8px;
- color: #555;
-}
-
-.memSeparator {
- border-bottom: 1px solid #DEE4F0;
- line-height: 1px;
- margin: 0px;
- padding: 0px;
-}
-
-.memItemLeft, .memTemplItemLeft {
- white-space: nowrap;
-}
-
-.memItemRight, .memTemplItemRight {
- width: 100%;
-}
-
-.memTemplParams {
- color: #4665A2;
- white-space: nowrap;
- font-size: 80%;
-}
-
-/* @end */
-
-/* @group Member Details */
-
-/* Styles for detailed member documentation */
-
-.memtitle {
- padding: 8px;
- border-top: 1px solid #A8B8D9;
- border-left: 1px solid #A8B8D9;
- border-right: 1px solid #A8B8D9;
- border-top-right-radius: 4px;
- border-top-left-radius: 4px;
- margin-bottom: -1px;
- background-image: url('nav_f.png');
- background-repeat: repeat-x;
- background-color: #E2E8F2;
- line-height: 1.25;
- font-weight: 300;
- float:left;
-}
-
-.permalink
-{
- font-size: 65%;
- display: inline-block;
- vertical-align: middle;
-}
-
-.memtemplate {
- font-size: 80%;
- color: #4665A2;
- font-weight: normal;
- margin-left: 9px;
-}
-
-.memnav {
- background-color: #EBEFF6;
- border: 1px solid #A3B4D7;
- text-align: center;
- margin: 2px;
- margin-right: 15px;
- padding: 2px;
-}
-
-.mempage {
- width: 100%;
-}
-
-.memitem {
- padding: 0;
- margin-bottom: 10px;
- margin-right: 5px;
- -webkit-transition: box-shadow 0.5s linear;
- -moz-transition: box-shadow 0.5s linear;
- -ms-transition: box-shadow 0.5s linear;
- -o-transition: box-shadow 0.5s linear;
- transition: box-shadow 0.5s linear;
- display: table !important;
- width: 100%;
-}
-
-.memitem.glow {
- box-shadow: 0 0 15px cyan;
-}
-
-.memname {
- font-weight: 400;
- margin-left: 6px;
-}
-
-.memname td {
- vertical-align: bottom;
-}
-
-.memproto, dl.reflist dt {
- border-top: 1px solid #A8B8D9;
- border-left: 1px solid #A8B8D9;
- border-right: 1px solid #A8B8D9;
- padding: 6px 0px 6px 0px;
- color: #253555;
- font-weight: bold;
- text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);
- background-color: #DFE5F1;
- /* opera specific markup */
- box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
- border-top-right-radius: 4px;
- /* firefox specific markup */
- -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px;
- -moz-border-radius-topright: 4px;
- /* webkit specific markup */
- -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
- -webkit-border-top-right-radius: 4px;
-
-}
-
-.overload {
- font-family: "courier new",courier,monospace;
- font-size: 65%;
-}
-
-.memdoc, dl.reflist dd {
- border-bottom: 1px solid #A8B8D9;
- border-left: 1px solid #A8B8D9;
- border-right: 1px solid #A8B8D9;
- padding: 6px 10px 2px 10px;
- background-color: #FBFCFD;
- border-top-width: 0;
- background-image:url('nav_g.png');
- background-repeat:repeat-x;
- background-color: #FFFFFF;
- /* opera specific markup */
- border-bottom-left-radius: 4px;
- border-bottom-right-radius: 4px;
- box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
- /* firefox specific markup */
- -moz-border-radius-bottomleft: 4px;
- -moz-border-radius-bottomright: 4px;
- -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px;
- /* webkit specific markup */
- -webkit-border-bottom-left-radius: 4px;
- -webkit-border-bottom-right-radius: 4px;
- -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
-}
-
-dl.reflist dt {
- padding: 5px;
-}
-
-dl.reflist dd {
- margin: 0px 0px 10px 0px;
- padding: 5px;
-}
-
-.paramkey {
- text-align: right;
-}
-
-.paramtype {
- white-space: nowrap;
-}
-
-.paramname {
- color: #602020;
- white-space: nowrap;
-}
-.paramname em {
- font-style: normal;
-}
-.paramname code {
- line-height: 14px;
-}
-
-.params, .retval, .exception, .tparams {
- margin-left: 0px;
- padding-left: 0px;
-}
-
-.params .paramname, .retval .paramname, .tparams .paramname, .exception .paramname {
- font-weight: bold;
- vertical-align: top;
-}
-
-.params .paramtype, .tparams .paramtype {
- font-style: italic;
- vertical-align: top;
-}
-
-.params .paramdir, .tparams .paramdir {
- font-family: "courier new",courier,monospace;
- vertical-align: top;
-}
-
-table.mlabels {
- border-spacing: 0px;
-}
-
-td.mlabels-left {
- width: 100%;
- padding: 0px;
-}
-
-td.mlabels-right {
- vertical-align: bottom;
- padding: 0px;
- white-space: nowrap;
-}
-
-span.mlabels {
- margin-left: 8px;
-}
-
-span.mlabel {
- background-color: #728DC1;
- border-top:1px solid #5373B4;
- border-left:1px solid #5373B4;
- border-right:1px solid #C4CFE5;
- border-bottom:1px solid #C4CFE5;
- text-shadow: none;
- color: white;
- margin-right: 4px;
- padding: 2px 3px;
- border-radius: 3px;
- font-size: 7pt;
- white-space: nowrap;
- vertical-align: middle;
-}
-
-
-
-/* @end */
-
-/* these are for tree view inside a (index) page */
-
-div.directory {
- margin: 10px 0px;
- border-top: 1px solid #9CAFD4;
- border-bottom: 1px solid #9CAFD4;
- width: 100%;
-}
-
-.directory table {
- border-collapse:collapse;
-}
-
-.directory td {
- margin: 0px;
- padding: 0px;
- vertical-align: top;
-}
-
-.directory td.entry {
- white-space: nowrap;
- padding-right: 6px;
- padding-top: 3px;
-}
-
-.directory td.entry a {
- outline:none;
-}
-
-.directory td.entry a img {
- border: none;
-}
-
-.directory td.desc {
- width: 100%;
- padding-left: 6px;
- padding-right: 6px;
- padding-top: 3px;
- border-left: 1px solid rgba(0,0,0,0.05);
-}
-
-.directory tr.even {
- padding-left: 6px;
- background-color: #F7F8FB;
-}
-
-.directory img {
- vertical-align: -30%;
-}
-
-.directory .levels {
- white-space: nowrap;
- width: 100%;
- text-align: right;
- font-size: 9pt;
-}
-
-.directory .levels span {
- cursor: pointer;
- padding-left: 2px;
- padding-right: 2px;
- color: #3D578C;
-}
-
-.arrow {
- color: #9CAFD4;
- -webkit-user-select: none;
- -khtml-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
- cursor: pointer;
- font-size: 80%;
- display: inline-block;
- width: 16px;
- height: 22px;
-}
-
-.icon {
- font-family: Arial, Helvetica;
- font-weight: bold;
- font-size: 12px;
- height: 14px;
- width: 16px;
- display: inline-block;
- background-color: #728DC1;
- color: white;
- text-align: center;
- border-radius: 4px;
- margin-left: 2px;
- margin-right: 2px;
-}
-
-.icona {
- width: 24px;
- height: 22px;
- display: inline-block;
-}
-
-.iconfopen {
- width: 24px;
- height: 18px;
- margin-bottom: 4px;
- background-image:url('folderopen.png');
- background-position: 0px -4px;
- background-repeat: repeat-y;
- vertical-align:top;
- display: inline-block;
-}
-
-.iconfclosed {
- width: 24px;
- height: 18px;
- margin-bottom: 4px;
- background-image:url('folderclosed.png');
- background-position: 0px -4px;
- background-repeat: repeat-y;
- vertical-align:top;
- display: inline-block;
-}
-
-.icondoc {
- width: 24px;
- height: 18px;
- margin-bottom: 4px;
- background-image:url('doc.png');
- background-position: 0px -4px;
- background-repeat: repeat-y;
- vertical-align:top;
- display: inline-block;
-}
-
-table.directory {
- font: 400 14px Roboto,sans-serif;
-}
-
-/* @end */
-
-div.dynheader {
- margin-top: 8px;
- -webkit-touch-callout: none;
- -webkit-user-select: none;
- -khtml-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
-}
-
-address {
- font-style: normal;
- color: #2A3D61;
-}
-
-table.doxtable caption {
- caption-side: top;
-}
-
-table.doxtable {
- border-collapse:collapse;
- margin-top: 4px;
- margin-bottom: 4px;
-}
-
-table.doxtable td, table.doxtable th {
- border: 1px solid #2D4068;
- padding: 3px 7px 2px;
-}
-
-table.doxtable th {
- background-color: #374F7F;
- color: #FFFFFF;
- font-size: 110%;
- padding-bottom: 4px;
- padding-top: 5px;
-}
-
-table.fieldtable {
- /*width: 100%;*/
- margin-bottom: 10px;
- border: 1px solid #A8B8D9;
- border-spacing: 0px;
- -moz-border-radius: 4px;
- -webkit-border-radius: 4px;
- border-radius: 4px;
- -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px;
- -webkit-box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15);
- box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15);
-}
-
-.fieldtable td, .fieldtable th {
- padding: 3px 7px 2px;
-}
-
-.fieldtable td.fieldtype, .fieldtable td.fieldname {
- white-space: nowrap;
- border-right: 1px solid #A8B8D9;
- border-bottom: 1px solid #A8B8D9;
- vertical-align: top;
-}
-
-.fieldtable td.fieldname {
- padding-top: 3px;
-}
-
-.fieldtable td.fielddoc {
- border-bottom: 1px solid #A8B8D9;
- /*width: 100%;*/
-}
-
-.fieldtable td.fielddoc p:first-child {
- margin-top: 0px;
-}
-
-.fieldtable td.fielddoc p:last-child {
- margin-bottom: 2px;
-}
-
-.fieldtable tr:last-child td {
- border-bottom: none;
-}
-
-.fieldtable th {
- background-image:url('nav_f.png');
- background-repeat:repeat-x;
- background-color: #E2E8F2;
- font-size: 90%;
- color: #253555;
- padding-bottom: 4px;
- padding-top: 5px;
- text-align:left;
- font-weight: 400;
- -moz-border-radius-topleft: 4px;
- -moz-border-radius-topright: 4px;
- -webkit-border-top-left-radius: 4px;
- -webkit-border-top-right-radius: 4px;
- border-top-left-radius: 4px;
- border-top-right-radius: 4px;
- border-bottom: 1px solid #A8B8D9;
-}
-
-
-.tabsearch {
- top: 0px;
- left: 10px;
- height: 36px;
- background-image: url('tab_b.png');
- z-index: 101;
- overflow: hidden;
- font-size: 13px;
-}
-
-.navpath ul
-{
- font-size: 11px;
- background-image:url('tab_b.png');
- background-repeat:repeat-x;
- background-position: 0 -5px;
- height:30px;
- line-height:30px;
- color:#8AA0CC;
- border:solid 1px #C2CDE4;
- overflow:hidden;
- margin:0px;
- padding:0px;
-}
-
-.navpath li
-{
- list-style-type:none;
- float:left;
- padding-left:10px;
- padding-right:15px;
- background-image:url('bc_s.png');
- background-repeat:no-repeat;
- background-position:right;
- color:#364D7C;
-}
-
-.navpath li.navelem a
-{
- height:32px;
- display:block;
- text-decoration: none;
- outline: none;
- color: #283A5D;
- font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif;
- text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);
- text-decoration: none;
-}
-
-.navpath li.navelem a:hover
-{
- color:#6884BD;
-}
-
-.navpath li.footer
-{
- list-style-type:none;
- float:right;
- padding-left:10px;
- padding-right:15px;
- background-image:none;
- background-repeat:no-repeat;
- background-position:right;
- color:#364D7C;
- font-size: 8pt;
-}
-
-
-div.summary
-{
- float: right;
- font-size: 8pt;
- padding-right: 5px;
- width: 50%;
- text-align: right;
-}
-
-div.summary a
-{
- white-space: nowrap;
-}
-
-table.classindex
-{
- margin: 10px;
- white-space: nowrap;
- margin-left: 3%;
- margin-right: 3%;
- width: 94%;
- border: 0;
- border-spacing: 0;
- padding: 0;
-}
-
-div.ingroups
-{
- font-size: 8pt;
- width: 50%;
- text-align: left;
-}
-
-div.ingroups a
-{
- white-space: nowrap;
-}
-
-div.header
-{
- background-image:url('nav_h.png');
- background-repeat:repeat-x;
- background-color: #F9FAFC;
- margin: 0px;
- border-bottom: 1px solid #C4CFE5;
-}
-
-div.headertitle
-{
- padding: 5px 5px 5px 10px;
-}
-
-.PageDocRTL-title div.headertitle {
- text-align: right;
- direction: rtl;
-}
-
-dl {
- padding: 0 0 0 0;
-}
-
-/* dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug, dl.examples */
-dl.section {
- margin-left: 0px;
- padding-left: 0px;
-}
-
-dl.section.DocNodeRTL {
- margin-right: 0px;
- padding-right: 0px;
-}
-
-dl.note {
- margin-left: -7px;
- padding-left: 3px;
- border-left: 4px solid;
- border-color: #D0C000;
-}
-
-dl.note.DocNodeRTL {
- margin-left: 0;
- padding-left: 0;
- border-left: 0;
- margin-right: -7px;
- padding-right: 3px;
- border-right: 4px solid;
- border-color: #D0C000;
-}
-
-dl.warning, dl.attention {
- margin-left: -7px;
- padding-left: 3px;
- border-left: 4px solid;
- border-color: #FF0000;
-}
-
-dl.warning.DocNodeRTL, dl.attention.DocNodeRTL {
- margin-left: 0;
- padding-left: 0;
- border-left: 0;
- margin-right: -7px;
- padding-right: 3px;
- border-right: 4px solid;
- border-color: #FF0000;
-}
-
-dl.pre, dl.post, dl.invariant {
- margin-left: -7px;
- padding-left: 3px;
- border-left: 4px solid;
- border-color: #00D000;
-}
-
-dl.pre.DocNodeRTL, dl.post.DocNodeRTL, dl.invariant.DocNodeRTL {
- margin-left: 0;
- padding-left: 0;
- border-left: 0;
- margin-right: -7px;
- padding-right: 3px;
- border-right: 4px solid;
- border-color: #00D000;
-}
-
-dl.deprecated {
- margin-left: -7px;
- padding-left: 3px;
- border-left: 4px solid;
- border-color: #505050;
-}
-
-dl.deprecated.DocNodeRTL {
- margin-left: 0;
- padding-left: 0;
- border-left: 0;
- margin-right: -7px;
- padding-right: 3px;
- border-right: 4px solid;
- border-color: #505050;
-}
-
-dl.todo {
- margin-left: -7px;
- padding-left: 3px;
- border-left: 4px solid;
- border-color: #00C0E0;
-}
-
-dl.todo.DocNodeRTL {
- margin-left: 0;
- padding-left: 0;
- border-left: 0;
- margin-right: -7px;
- padding-right: 3px;
- border-right: 4px solid;
- border-color: #00C0E0;
-}
-
-dl.test {
- margin-left: -7px;
- padding-left: 3px;
- border-left: 4px solid;
- border-color: #3030E0;
-}
-
-dl.test.DocNodeRTL {
- margin-left: 0;
- padding-left: 0;
- border-left: 0;
- margin-right: -7px;
- padding-right: 3px;
- border-right: 4px solid;
- border-color: #3030E0;
-}
-
-dl.bug {
- margin-left: -7px;
- padding-left: 3px;
- border-left: 4px solid;
- border-color: #C08050;
-}
-
-dl.bug.DocNodeRTL {
- margin-left: 0;
- padding-left: 0;
- border-left: 0;
- margin-right: -7px;
- padding-right: 3px;
- border-right: 4px solid;
- border-color: #C08050;
-}
-
-dl.section dd {
- margin-bottom: 6px;
-}
-
-
-#projectlogo
-{
- text-align: center;
- vertical-align: bottom;
- border-collapse: separate;
-}
-
-#projectlogo img
-{
- border: 0px none;
-}
-
-#projectalign
-{
- vertical-align: middle;
-}
-
-#projectname
-{
- font: 300% Tahoma, Arial,sans-serif;
- margin: 0px;
- padding: 2px 0px;
-}
-
-#projectbrief
-{
- font: 120% Tahoma, Arial,sans-serif;
- margin: 0px;
- padding: 0px;
-}
-
-#projectnumber
-{
- font: 50% Tahoma, Arial,sans-serif;
- margin: 0px;
- padding: 0px;
-}
-
-#titlearea
-{
- padding: 0px;
- margin: 0px;
- width: 100%;
- border-bottom: 1px solid #5373B4;
-}
-
-.image
-{
- text-align: center;
-}
-
-.dotgraph
-{
- text-align: center;
-}
-
-.mscgraph
-{
- text-align: center;
-}
-
-.plantumlgraph
-{
- text-align: center;
-}
-
-.diagraph
-{
- text-align: center;
-}
-
-.caption
-{
- font-weight: bold;
-}
-
-div.zoom
-{
- border: 1px solid #90A5CE;
-}
-
-dl.citelist {
- margin-bottom:50px;
-}
-
-dl.citelist dt {
- color:#334975;
- float:left;
- font-weight:bold;
- margin-right:10px;
- padding:5px;
-}
-
-dl.citelist dd {
- margin:2px 0;
- padding:5px 0;
-}
-
-div.toc {
- padding: 14px 25px;
- background-color: #F4F6FA;
- border: 1px solid #D8DFEE;
- border-radius: 7px 7px 7px 7px;
- float: right;
- height: auto;
- margin: 0 8px 10px 10px;
- width: 200px;
-}
-
-.PageDocRTL-title div.toc {
- float: left !important;
- text-align: right;
-}
-
-div.toc li {
- background: url("bdwn.png") no-repeat scroll 0 5px transparent;
- font: 10px/1.2 Verdana,DejaVu Sans,Geneva,sans-serif;
- margin-top: 5px;
- padding-left: 10px;
- padding-top: 2px;
-}
-
-.PageDocRTL-title div.toc li {
- background-position-x: right !important;
- padding-left: 0 !important;
- padding-right: 10px;
-}
-
-div.toc h3 {
- font: bold 12px/1.2 Arial,FreeSans,sans-serif;
- color: #4665A2;
- border-bottom: 0 none;
- margin: 0;
-}
-
-div.toc ul {
- list-style: none outside none;
- border: medium none;
- padding: 0px;
-}
-
-div.toc li.level1 {
- margin-left: 0px;
-}
-
-div.toc li.level2 {
- margin-left: 15px;
-}
-
-div.toc li.level3 {
- margin-left: 30px;
-}
-
-div.toc li.level4 {
- margin-left: 45px;
-}
-
-.PageDocRTL-title div.toc li.level1 {
- margin-left: 0 !important;
- margin-right: 0;
-}
-
-.PageDocRTL-title div.toc li.level2 {
- margin-left: 0 !important;
- margin-right: 15px;
-}
-
-.PageDocRTL-title div.toc li.level3 {
- margin-left: 0 !important;
- margin-right: 30px;
-}
-
-.PageDocRTL-title div.toc li.level4 {
- margin-left: 0 !important;
- margin-right: 45px;
-}
-
-.inherit_header {
- font-weight: bold;
- color: gray;
- cursor: pointer;
- -webkit-touch-callout: none;
- -webkit-user-select: none;
- -khtml-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
-}
-
-.inherit_header td {
- padding: 6px 0px 2px 5px;
-}
-
-.inherit {
- display: none;
-}
-
-tr.heading h2 {
- margin-top: 12px;
- margin-bottom: 4px;
-}
-
-/* tooltip related style info */
-
-.ttc {
- position: absolute;
- display: none;
-}
-
-#powerTip {
- cursor: default;
- white-space: nowrap;
- background-color: white;
- border: 1px solid gray;
- border-radius: 4px 4px 4px 4px;
- box-shadow: 1px 1px 7px gray;
- display: none;
- font-size: smaller;
- max-width: 80%;
- opacity: 0.9;
- padding: 1ex 1em 1em;
- position: absolute;
- z-index: 2147483647;
-}
-
-#powerTip div.ttdoc {
- color: grey;
- font-style: italic;
-}
-
-#powerTip div.ttname a {
- font-weight: bold;
-}
-
-#powerTip div.ttname {
- font-weight: bold;
-}
-
-#powerTip div.ttdeci {
- color: #006318;
-}
-
-#powerTip div {
- margin: 0px;
- padding: 0px;
- font: 12px/16px Roboto,sans-serif;
-}
-
-#powerTip:before, #powerTip:after {
- content: "";
- position: absolute;
- margin: 0px;
-}
-
-#powerTip.n:after, #powerTip.n:before,
-#powerTip.s:after, #powerTip.s:before,
-#powerTip.w:after, #powerTip.w:before,
-#powerTip.e:after, #powerTip.e:before,
-#powerTip.ne:after, #powerTip.ne:before,
-#powerTip.se:after, #powerTip.se:before,
-#powerTip.nw:after, #powerTip.nw:before,
-#powerTip.sw:after, #powerTip.sw:before {
- border: solid transparent;
- content: " ";
- height: 0;
- width: 0;
- position: absolute;
-}
-
-#powerTip.n:after, #powerTip.s:after,
-#powerTip.w:after, #powerTip.e:after,
-#powerTip.nw:after, #powerTip.ne:after,
-#powerTip.sw:after, #powerTip.se:after {
- border-color: rgba(255, 255, 255, 0);
-}
-
-#powerTip.n:before, #powerTip.s:before,
-#powerTip.w:before, #powerTip.e:before,
-#powerTip.nw:before, #powerTip.ne:before,
-#powerTip.sw:before, #powerTip.se:before {
- border-color: rgba(128, 128, 128, 0);
-}
-
-#powerTip.n:after, #powerTip.n:before,
-#powerTip.ne:after, #powerTip.ne:before,
-#powerTip.nw:after, #powerTip.nw:before {
- top: 100%;
-}
-
-#powerTip.n:after, #powerTip.ne:after, #powerTip.nw:after {
- border-top-color: #FFFFFF;
- border-width: 10px;
- margin: 0px -10px;
-}
-#powerTip.n:before {
- border-top-color: #808080;
- border-width: 11px;
- margin: 0px -11px;
-}
-#powerTip.n:after, #powerTip.n:before {
- left: 50%;
-}
-
-#powerTip.nw:after, #powerTip.nw:before {
- right: 14px;
-}
-
-#powerTip.ne:after, #powerTip.ne:before {
- left: 14px;
-}
-
-#powerTip.s:after, #powerTip.s:before,
-#powerTip.se:after, #powerTip.se:before,
-#powerTip.sw:after, #powerTip.sw:before {
- bottom: 100%;
-}
-
-#powerTip.s:after, #powerTip.se:after, #powerTip.sw:after {
- border-bottom-color: #FFFFFF;
- border-width: 10px;
- margin: 0px -10px;
-}
-
-#powerTip.s:before, #powerTip.se:before, #powerTip.sw:before {
- border-bottom-color: #808080;
- border-width: 11px;
- margin: 0px -11px;
-}
-
-#powerTip.s:after, #powerTip.s:before {
- left: 50%;
-}
-
-#powerTip.sw:after, #powerTip.sw:before {
- right: 14px;
-}
-
-#powerTip.se:after, #powerTip.se:before {
- left: 14px;
-}
-
-#powerTip.e:after, #powerTip.e:before {
- left: 100%;
-}
-#powerTip.e:after {
- border-left-color: #FFFFFF;
- border-width: 10px;
- top: 50%;
- margin-top: -10px;
-}
-#powerTip.e:before {
- border-left-color: #808080;
- border-width: 11px;
- top: 50%;
- margin-top: -11px;
-}
-
-#powerTip.w:after, #powerTip.w:before {
- right: 100%;
-}
-#powerTip.w:after {
- border-right-color: #FFFFFF;
- border-width: 10px;
- top: 50%;
- margin-top: -10px;
-}
-#powerTip.w:before {
- border-right-color: #808080;
- border-width: 11px;
- top: 50%;
- margin-top: -11px;
-}
-
-@media print
-{
- #top { display: none; }
- #side-nav { display: none; }
- #nav-path { display: none; }
- body { overflow:visible; }
- h1, h2, h3, h4, h5, h6 { page-break-after: avoid; }
- .summary { display: none; }
- .memitem { page-break-inside: avoid; }
- #doc-content
- {
- margin-left:0 !important;
- height:auto !important;
- width:auto !important;
- overflow:inherit;
- display:inline;
- }
-}
-
-/* @group Markdown */
-
-/*
-table.markdownTable {
- border-collapse:collapse;
- margin-top: 4px;
- margin-bottom: 4px;
-}
-
-table.markdownTable td, table.markdownTable th {
- border: 1px solid #2D4068;
- padding: 3px 7px 2px;
-}
-
-table.markdownTableHead tr {
-}
-
-table.markdownTableBodyLeft td, table.markdownTable th {
- border: 1px solid #2D4068;
- padding: 3px 7px 2px;
-}
-
-th.markdownTableHeadLeft th.markdownTableHeadRight th.markdownTableHeadCenter th.markdownTableHeadNone {
- background-color: #374F7F;
- color: #FFFFFF;
- font-size: 110%;
- padding-bottom: 4px;
- padding-top: 5px;
-}
-
-th.markdownTableHeadLeft {
- text-align: left
-}
-
-th.markdownTableHeadRight {
- text-align: right
-}
-
-th.markdownTableHeadCenter {
- text-align: center
-}
-*/
-
-table.markdownTable {
- border-collapse:collapse;
- margin-top: 4px;
- margin-bottom: 4px;
-}
-
-table.markdownTable td, table.markdownTable th {
- border: 1px solid #2D4068;
- padding: 3px 7px 2px;
-}
-
-table.markdownTable tr {
-}
-
-th.markdownTableHeadLeft, th.markdownTableHeadRight, th.markdownTableHeadCenter, th.markdownTableHeadNone {
- background-color: #374F7F;
- color: #FFFFFF;
- font-size: 110%;
- padding-bottom: 4px;
- padding-top: 5px;
-}
-
-th.markdownTableHeadLeft, td.markdownTableBodyLeft {
- text-align: left
-}
-
-th.markdownTableHeadRight, td.markdownTableBodyRight {
- text-align: right
-}
-
-th.markdownTableHeadCenter, td.markdownTableBodyCenter {
- text-align: center
-}
-
-.DocNodeRTL {
- text-align: right;
- direction: rtl;
-}
-
-.DocNodeLTR {
- text-align: left;
- direction: ltr;
-}
-
-table.DocNodeRTL {
- width: auto;
- margin-right: 0;
- margin-left: auto;
-}
-
-table.DocNodeLTR {
- width: auto;
- margin-right: auto;
- margin-left: 0;
-}
-
-tt, code, kbd, samp
-{
- display: inline-block;
- direction:ltr;
-}
-/* @end */
-
-u {
- text-decoration: underline;
-}
-
diff --git a/docs/html/doxygen.png b/docs/html/doxygen.png
deleted file mode 100644
index 3ff17d8..0000000
Binary files a/docs/html/doxygen.png and /dev/null differ
diff --git a/docs/html/dynsections.js b/docs/html/dynsections.js
deleted file mode 100644
index ea0a7b3..0000000
--- a/docs/html/dynsections.js
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
- @licstart The following is the entire license notice for the
- JavaScript code in this file.
-
- Copyright (C) 1997-2017 by Dimitri van Heesch
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with this program; if not, write to the Free Software Foundation, Inc.,
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-
- @licend The above is the entire license notice
- for the JavaScript code in this file
- */
-function toggleVisibility(linkObj)
-{
- var base = $(linkObj).attr('id');
- var summary = $('#'+base+'-summary');
- var content = $('#'+base+'-content');
- var trigger = $('#'+base+'-trigger');
- var src=$(trigger).attr('src');
- if (content.is(':visible')===true) {
- content.hide();
- summary.show();
- $(linkObj).addClass('closed').removeClass('opened');
- $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png');
- } else {
- content.show();
- summary.hide();
- $(linkObj).removeClass('closed').addClass('opened');
- $(trigger).attr('src',src.substring(0,src.length-10)+'open.png');
- }
- return false;
-}
-
-function updateStripes()
-{
- $('table.directory tr').
- removeClass('even').filter(':visible:even').addClass('even');
-}
-
-function toggleLevel(level)
-{
- $('table.directory tr').each(function() {
- var l = this.id.split('_').length-1;
- var i = $('#img'+this.id.substring(3));
- var a = $('#arr'+this.id.substring(3));
- if (l|
- µEvLoop
-
- A fast and lightweight event loop aimed at embedded platforms in C99.
- |
-
Module responsible for running enqueued events and process them accordingly. -More...
-#include "uevloop/utils/closure.h"#include "uevloop/utils/linked-list.h"#include "uevloop/system/containers/system-pools.h"#include "uevloop/system/containers/system-queues.h"

Go to the source code of this file.
--Data Structures | |
| struct | uel_evloop_t |
| The event loop object. More... | |
-Functions | |
| void | uel_evloop_init (uel_evloop_t *event_loop, uel_syspools_t *pools, uel_sysqueues_t *queues) |
| Initialises an event loop. More... | |
| void | uel_evloop_run (uel_evloop_t *event_loop) |
| Triggers a runloop. More... | |
| void | uel_evloop_enqueue_closure (uel_evloop_t *event_loop, uel_closure_t *closure, void *value) |
| Enqueues a closure to be invoked. More... | |
| uel_event_t * | uel_evloop_observe (uel_evloop_t *event_loop, volatile uintptr_t *condition_var, uel_closure_t *closure) |
| Observes a value and reacts to changes in it. More... | |
| uel_event_t * | uel_evloop_observe_once (uel_evloop_t *event_loop, volatile uintptr_t *condition_var, uel_closure_t *closure) |
| Observes a value and reacts once to changes in it. Afterwards, the observer will be destroyed. More... | |
Module responsible for running enqueued events and process them accordingly.
-| void uel_evloop_enqueue_closure | -( | -uel_evloop_t * | -event_loop, | -
| - | - | uel_closure_t * | -closure, | -
| - | - | void * | -value | -
| - | ) | -- |
Enqueues a closure to be invoked.
-| event_loop | The uel_evloop_t instance into which the closure will be enqueued |
| closure | The closure to be enqueued |
| value | The value to invoked the closure with |
| void uel_evloop_init | -( | -uel_evloop_t * | -event_loop, | -
| - | - | uel_syspools_t * | -pools, | -
| - | - | uel_sysqueues_t * | -queues | -
| - | ) | -- |
Initialises an event loop.
-| event_loop | The uel_evloop_t instance to be initialised |
| pools | The system's internal pools |
| queues | The system's internal queues |
| uel_event_t* uel_evloop_observe | -( | -uel_evloop_t * | -event_loop, | -
| - | - | volatile uintptr_t * | -condition_var, | -
| - | - | uel_closure_t * | -closure | -
| - | ) | -- |
Observes a value and reacts to changes in it.
-| event_loop | The event loop where to register this observer |
| condition_var | The address of some data that should be observed |
| closure | The closure to be invoked when the observed value changes |
| uel_event_t* uel_evloop_observe_once | -( | -uel_evloop_t * | -event_loop, | -
| - | - | volatile uintptr_t * | -condition_var, | -
| - | - | uel_closure_t * | -closure | -
| - | ) | -- |
Observes a value and reacts once to changes in it. Afterwards, the observer will be destroyed.
-| event_loop | The event loop where to register this observer |
| condition_var | The address of some data that should be observed |
| closure | The closure to be invoked when the observed value changes |
| void uel_evloop_run | -( | -uel_evloop_t * | -event_loop | ) | -- |
Triggers a runloop.
-This function flushes the event queue and processes each event in it. Afterwards, depending on the event type, it disposes of the event in different ways.
-Each iteration of this cycle is called a runloop.
-| event_loop | The uel_evloop_t instance to be run |
- 1.8.17
-
-
-
diff --git a/docs/html/event-loop_8h__dep__incl.map b/docs/html/event-loop_8h__dep__incl.map
deleted file mode 100644
index b4823e3..0000000
--- a/docs/html/event-loop_8h__dep__incl.map
+++ /dev/null
@@ -1,4 +0,0 @@
-
diff --git a/docs/html/event-loop_8h__dep__incl.md5 b/docs/html/event-loop_8h__dep__incl.md5
deleted file mode 100644
index 68a4cfd..0000000
--- a/docs/html/event-loop_8h__dep__incl.md5
+++ /dev/null
@@ -1 +0,0 @@
-2ae711a170678bdf59b6ec760b031efe
\ No newline at end of file
diff --git a/docs/html/event-loop_8h__dep__incl.png b/docs/html/event-loop_8h__dep__incl.png
deleted file mode 100644
index 31dbc6e..0000000
Binary files a/docs/html/event-loop_8h__dep__incl.png and /dev/null differ
diff --git a/docs/html/event-loop_8h__incl.map b/docs/html/event-loop_8h__incl.map
deleted file mode 100644
index 67dc7b8..0000000
--- a/docs/html/event-loop_8h__incl.map
+++ /dev/null
@@ -1,11 +0,0 @@
-
diff --git a/docs/html/event-loop_8h__incl.md5 b/docs/html/event-loop_8h__incl.md5
deleted file mode 100644
index e47c46c..0000000
--- a/docs/html/event-loop_8h__incl.md5
+++ /dev/null
@@ -1 +0,0 @@
-8964d69c6e53dfcd87350402aeadcaae
\ No newline at end of file
diff --git a/docs/html/event-loop_8h__incl.png b/docs/html/event-loop_8h__incl.png
deleted file mode 100644
index 39b4206..0000000
Binary files a/docs/html/event-loop_8h__incl.png and /dev/null differ
diff --git a/docs/html/event-loop_8h_source.html b/docs/html/event-loop_8h_source.html
deleted file mode 100644
index ed5e42f..0000000
--- a/docs/html/event-loop_8h_source.html
+++ /dev/null
@@ -1,137 +0,0 @@
-
-
-
-
-
-
-
-|
- µEvLoop
-
- A fast and lightweight event loop aimed at embedded platforms in C99.
- |
-
- 1.8.17
-
-
-
diff --git a/docs/html/event_8h.html b/docs/html/event_8h.html
deleted file mode 100644
index 7cdf67f..0000000
--- a/docs/html/event_8h.html
+++ /dev/null
@@ -1,575 +0,0 @@
-
-
-
-
-
-
-
-|
- µEvLoop
-
- A fast and lightweight event loop aimed at embedded platforms in C99.
- |
-
Defines events and methods to configure events. -More...
-

Go to the source code of this file.
--Data Structures | |
| struct | uel_event_t |
| Events are special messages passed around the core. They represent tasks to be run at some point by the system. More... | |
| union | uel_event_t::uel_event_detail |
| struct | uel_event_t::uel_event_detail::uel_event_timer |
| Contains information suitable for scheduling an event at the scheduler. More... | |
| struct | uel_event_t::uel_event_detail::uel_event_signal |
Contains information related to an emitted signal. More... | |
| struct | uel_event_t::uel_event_detail::uel_event_listener |
| Contains the context of a particular signal listener. More... | |
| struct | uel_event_t::uel_event_detail::uel_event_observer |
| Contains the reference to an observer variable. More... | |
-Typedefs | |
| -typedef enum uel_event_type | uel_event_type_t |
| Alias to the uel_event_type enum. | |
| -typedef enum uel_event_timer_status | uel_event_timer_status_t |
| Alias to the uel_event_timer_status. | |
-Enumerations | |
| enum | uel_event_type { - UEL_CLOSURE_EVENT, -UEL_TIMER_EVENT, -UEL_SIGNAL_EVENT, -UEL_SIGNAL_LISTENER_EVENT, - - UEL_OBSERVER_EVENT - - } |
| Possible types of events understood by the core. | |
| enum | uel_event_timer_status { UEL_TIMER_RUNNING, -UEL_TIMER_PAUSED, -UEL_TIMER_CANCELLED - } |
| Possible statuses for a timer event. | |
-Functions | |
| void | uel_event_config_closure (uel_event_t *event, uel_closure_t *closure, void *value, bool repeating) |
| Configures a closure event. More... | |
| void | uel_event_config_signal (uel_event_t *event, uintptr_t signal, uel_llist_t *listeners, void *params) |
| Configures a signal event. More... | |
| void | uel_event_config_signal_listener (uel_event_t *event, uel_closure_t *closure, bool repeating) |
| Configures a signal listener event. More... | |
| void | uel_event_config_observer (uel_event_t *event, uel_closure_t *closure, volatile uintptr_t *condition_var, bool repeating) |
| Configures an observer event. More... | |
| void | uel_event_observer_cancel (uel_event_t *event) |
| Cancels an observer. More... | |
| void | uel_event_config_timer (uel_event_t *event, uint16_t timeout_in_ms, bool repeating, bool immediate, uel_closure_t *closure, void *value, uint32_t current_time) |
| Configures a timer event. More... | |
| void | uel_event_timer_pause (uel_event_t *event) |
| Pauses a timer event. More... | |
| void | uel_event_timer_resume (uel_event_t *event) |
| Resumes a paused timer event. More... | |
| void | uel_event_timer_cancel (uel_event_t *event) |
| Cancels a timer event. More... | |
Defines events and methods to configure events.
-| void uel_event_config_closure | -( | -uel_event_t * | -event, | -
| - | - | uel_closure_t * | -closure, | -
| - | - | void * | -value, | -
| - | - | bool | -repeating | -
| - | ) | -- |
Configures a closure event.
-| event | The event to be configured |
| closure | The closure to be invoked when the event is run |
| value | The value to supply to the closure as parameters when it is invoked |
| repeating | Intructs the system whether should this event be disposed of after processing |
| void uel_event_config_observer | -( | -uel_event_t * | -event, | -
| - | - | uel_closure_t * | -closure, | -
| - | - | volatile uintptr_t * | -condition_var, | -
| - | - | bool | -repeating | -
| - | ) | -- |
Configures an observer event.
-| event | The event to be configured |
| closure | The closure to be invoked when the observed value changes |
| condition_var | The address of a volatile variable to be observed |
| repeating | Intructs the system whether should this event be disposed of after processing |
| void uel_event_config_signal | -( | -uel_event_t * | -event, | -
| - | - | uintptr_t | -signal, | -
| - | - | uel_llist_t * | -listeners, | -
| - | - | void * | -params | -
| - | ) | -- |
Configures a signal event.
-| event | The event to be configured |
| signal | The integer value that identifies this signal |
| listeners | The listeners associated to this signal |
| params | The parameters associated with this signal emission |
| void uel_event_config_signal_listener | -( | -uel_event_t * | -event, | -
| - | - | uel_closure_t * | -closure, | -
| - | - | bool | -repeating | -
| - | ) | -- |
Configures a signal listener event.
-| event | The event to be configured |
| closure | The closure to be invoked when the event is run |
| repeating | Intructs the system whether should this event be disposed of after processing |
| void uel_event_config_timer | -( | -uel_event_t * | -event, | -
| - | - | uint16_t | -timeout_in_ms, | -
| - | - | bool | -repeating, | -
| - | - | bool | -immediate, | -
| - | - | uel_closure_t * | -closure, | -
| - | - | void * | -value, | -
| - | - | uint32_t | -current_time | -
| - | ) | -- |
Configures a timer event.
-| event | The event to be configured |
| timeout_in_ms | The delay to process this event. If the event is repeating, this defines the interval between successive executions. |
| repeating | If this flag is set, the event will not be destroyed after execution. Instead it will be put on the schedule queue. |
| immediate | If this flag is set, a recurring timer will be immediately enqueued for processing. One-shot timers will ignore this setting. |
| closure | The closure to be invoked when the timer expires |
| value | The value to supply to the closure as parameters when it is invoked |
| current_time | The current value set in the system counter. |
| void uel_event_observer_cancel | -( | -uel_event_t * | -event | ) | -- |
Cancels an observer.
-| event | The observer event to be cancelled |
| void uel_event_timer_cancel | -( | -uel_event_t * | -event | ) | -- |
Cancels a timer event.
-| event | The timer event to be cancelled |
| void uel_event_timer_pause | -( | -uel_event_t * | -event | ) | -- |
Pauses a timer event.
-| event | The timer event to be paused |
| void uel_event_timer_resume | -( | -uel_event_t * | -event | ) | -- |
Resumes a paused timer event.
-| event | The timer event to be resumed |
- 1.8.17
-
-
-
diff --git a/docs/html/event_8h__dep__incl.map b/docs/html/event_8h__dep__incl.map
deleted file mode 100644
index 7284dc7..0000000
--- a/docs/html/event_8h__dep__incl.map
+++ /dev/null
@@ -1,9 +0,0 @@
-
diff --git a/docs/html/event_8h__dep__incl.md5 b/docs/html/event_8h__dep__incl.md5
deleted file mode 100644
index 6b5fedd..0000000
--- a/docs/html/event_8h__dep__incl.md5
+++ /dev/null
@@ -1 +0,0 @@
-b8641219d04107e5ab8fc723dcaeb00e
\ No newline at end of file
diff --git a/docs/html/event_8h__dep__incl.png b/docs/html/event_8h__dep__incl.png
deleted file mode 100644
index bb6f0d6..0000000
Binary files a/docs/html/event_8h__dep__incl.png and /dev/null differ
diff --git a/docs/html/event_8h__incl.map b/docs/html/event_8h__incl.map
deleted file mode 100644
index d55dfe9..0000000
--- a/docs/html/event_8h__incl.map
+++ /dev/null
@@ -1,5 +0,0 @@
-
diff --git a/docs/html/event_8h__incl.md5 b/docs/html/event_8h__incl.md5
deleted file mode 100644
index d0697b5..0000000
--- a/docs/html/event_8h__incl.md5
+++ /dev/null
@@ -1 +0,0 @@
-d914d40d9b5258a79fdc20f8cea60760
\ No newline at end of file
diff --git a/docs/html/event_8h__incl.png b/docs/html/event_8h__incl.png
deleted file mode 100644
index f871573..0000000
Binary files a/docs/html/event_8h__incl.png and /dev/null differ
diff --git a/docs/html/event_8h_source.html b/docs/html/event_8h_source.html
deleted file mode 100644
index b3302c0..0000000
--- a/docs/html/event_8h_source.html
+++ /dev/null
@@ -1,222 +0,0 @@
-
-
-
-
-
-
-
-|
- µEvLoop
-
- A fast and lightweight event loop aimed at embedded platforms in C99.
- |
-
- 1.8.17
-
-
-
diff --git a/docs/html/files.html b/docs/html/files.html
deleted file mode 100644
index c991205..0000000
--- a/docs/html/files.html
+++ /dev/null
@@ -1,107 +0,0 @@
-
-
-
-
-
-
-
-|
- µEvLoop
-
- A fast and lightweight event loop aimed at embedded platforms in C99.
- |
-
| ▼ include | |
| ▼ uevloop | |
| ▼ portability | |
| critical-section.h | Contains macros for delimitating critical sections |
| ▼ system | |
| ▼ containers | |
| application.h | The application module is a convenient top-level container for the system internals |
| system-pools.h | A container for the system's internal pools |
| system-queues.h | A container for the system's internal queues |
| event-loop.h | Module responsible for running enqueued events and process them accordingly |
| event.h | Defines events and methods to configure events |
| scheduler.h | Module responsible for keeping track of time and tasks to be run in the future |
| signal.h | Defines signals and relays, structures used to communicate asynchronously between distant parts of the application |
| ▼ utils | |
| automatic-pool.h | Defines automatic pointers and automatic pools, objects that wrap object pools and objects managed by them. These wrappers provide basic automatic memory management |
| circular-queue.h | Defines circular queues, fast and efficient FIFO data structures |
| closure.h | Defines closures, objects that bind functions to creating and calling contexts |
| conditional.h | Contains definitions of functional conditionals, structures that act as if-else constructs |
| functional.h | Contains helpers for composing and augumenting closures |
| iterator.h | Defines iterators, structures and functions suitable for enumerating other data structures |
| linked-list.h | Defines a simple implementation of linked lists and functions to manipulate it |
| module.h | |
| object-pool.h | Defines object pools, arrays of pre-allocated objects for dynamic use |
| pipeline.h | Defines pipelines, structures to hold many closures and functions to invoke them sequentially, composing their functionality |
| promise.h | Contains definitions for promise stores, promises and functions to manipulate them |
| config.h | Central repository of system configuration. This is meant to be edited by the programmer as needed |
- 1.8.17
-
-
-
diff --git a/docs/html/folderclosed.png b/docs/html/folderclosed.png
deleted file mode 100644
index bb8ab35..0000000
Binary files a/docs/html/folderclosed.png and /dev/null differ
diff --git a/docs/html/folderopen.png b/docs/html/folderopen.png
deleted file mode 100644
index d6c7f67..0000000
Binary files a/docs/html/folderopen.png and /dev/null differ
diff --git a/docs/html/functional_8h.html b/docs/html/functional_8h.html
deleted file mode 100644
index 0ac45f0..0000000
--- a/docs/html/functional_8h.html
+++ /dev/null
@@ -1,458 +0,0 @@
-
-
-
-
-
-
-
-|
- µEvLoop
-
- A fast and lightweight event loop aimed at embedded platforms in C99.
- |
-
Contains helpers for composing and augumenting closures. -More...
-#include "uevloop/utils/closure.h"#include "uevloop/utils/pipeline.h"#include "uevloop/utils/conditional.h"#include "uevloop/utils/iterator.h"
Go to the source code of this file.
--Data Structures | |
| struct | uel_func_mapper_t |
Maps elements of an iterator to an area of memory. Each element is assigned to a void pointer slot. More... | |
-Functions | |
| void | uel_func_mapper_init (uel_func_mapper_t *mapper, uel_iterator_t *iterator, void **destination, size_t limit) |
| Initialises a mapper object. More... | |
| uel_closure_t | uel_func_pipeline (uel_pipeline_t *pipeline) |
| Wraps a pipeline in a closure. More... | |
| uel_closure_t | uel_func_conditional (uel_conditional_t *conditional) |
| Wraps a conditional in a closure. More... | |
| uel_closure_t | uel_func_foreach (uel_closure_t *closure) |
Wraps a closure in a foreach construct. More... | |
| uel_closure_t | uel_func_map (uel_closure_t *closure) |
Wraps a closure in a map construct. More... | |
| uel_closure_t | uel_func_find (uel_closure_t *closure) |
Wraps a closure in a find construct. More... | |
| uel_closure_t | uel_func_count (uel_closure_t *closure) |
Wraps a closure in a count construct. More... | |
| uel_closure_t | uel_func_all (uel_closure_t *closure) |
Wraps a closure in a all construct. More... | |
| uel_closure_t | uel_func_none (uel_closure_t *closure) |
Wraps a closure in a none construct. More... | |
| uel_closure_t | uel_func_any (uel_closure_t *closure) |
| Wraps a closure in a all construct. More... | |
Contains helpers for composing and augumenting closures.
-| uel_closure_t uel_func_all | -( | -uel_closure_t * | -closure | ) | -- |
Wraps a closure in a all construct.
Creates a new closure based on a supplied closure. This new closure accepts an uel_iterator_t as parameter and applies the supplied closure to each element yielded by this iterator.
If all enumerate elements cause the supplied closure to return true, this new closure also returns true. Otherwise, it returns false.
| closure | The test to be applied against each enumerated element |
| uel_closure_t uel_func_any | -( | -uel_closure_t * | -closure | ) | -- |
Wraps a closure in a all construct.
-Creates a new closure based on a supplied closure. This new closure accepts an uel_iterator_t as parameter and applies the supplied closure to each element yielded by this iterator.
If any enumerate elements cause the supplied closure to return true, this new closure also returns true. Otherwise, it returns false.
| closure | The test to be applied against each enumerated element |
| uel_closure_t uel_func_conditional | -( | -uel_conditional_t * | -conditional | ) | -- |
Wraps a conditional in a closure.
-This function wraps a conditional in a closure. When invoked, the closure's parameters will be forwarded to the conditional. Also, the conditional's returned value will be returned from the closure.
-| conditional | The conditional to be wrapped |
| uel_closure_t uel_func_count | -( | -uel_closure_t * | -closure | ) | -- |
Wraps a closure in a count construct.
Creates a new closure based on a supplied closure. This new closure accepts an uel_iterator_t as parameter and applies the supplied closure to each element yielded by this iterator.
This new closure counts the number of enumerated elements that caused the test closure to return true.
| closure | The test to be applied against each enumerated element |
| uel_closure_t uel_func_find | -( | -uel_closure_t * | -closure | ) | -- |
Wraps a closure in a find construct.
Creates a new closure based on a supplied closure. This new closure accepts an uel_iterator_t as parameter and applies the supplied closure to each element yielded by this iterator.
When some enumerated element causes the supplied closure to return true, its address is returned by the new closure.
-| closure | The test to be applied against each enumerated element |
NULL. | uel_closure_t uel_func_foreach | -( | -uel_closure_t * | -closure | ) | -- |
Wraps a closure in a foreach construct.
Creates a new closure based on a supplied closure. When invoked, this new closure takes an uel_iterator_t for parameter and yields each element in it to the supplied closure.
| closure | A reference to the closure to be wrapped |
| uel_closure_t uel_func_map | -( | -uel_closure_t * | -closure | ) | -- |
Wraps a closure in a map construct.
Creates a new closure based on a supplied closure. This new closure takes an uel_func_mapper_t for parameter describing the mapping relation between elements yielded from an iterator and a region of memory.
When invoked, this new closure passes each element enumerated by this mapper as parameter to the supplied closure and stores its returned value sequentially in the destination area. It then returns the destination address.
-See uel_iterator_map().
| closure | A reference to the closure to be wrapped |
| void uel_func_mapper_init | -( | -uel_func_mapper_t * | -mapper, | -
| - | - | uel_iterator_t * | -iterator, | -
| - | - | void ** | -destination, | -
| - | - | size_t | -limit | -
| - | ) | -- |
Initialises a mapper object.
-| mapper | The mapper instance to be initialised |
| iterator | The iterator responsible for enumerating elements |
| destination | An array of void pointers to where elements will be mapped |
| limit | The maximum size of elements that can be mapped |
| uel_closure_t uel_func_none | -( | -uel_closure_t * | -closure | ) | -- |
Wraps a closure in a none construct.
Creates a new closure based on a supplied closure. This new closure accepts an uel_iterator_t as parameter and applies the supplied closure to each element yielded by this iterator.
If all enumerate elements cause the supplied closure to return false, this new closure also returns true. Otherwise, it returns false.
| closure | The test to be applied against each enumerated element |
| uel_closure_t uel_func_pipeline | -( | -uel_pipeline_t * | -pipeline | ) | -- |
Wraps a pipeline in a closure.
-This function wraps a pipeline in a closure. When invoked, the closure's parameters will be forwarded to the pipeline. Also, the pipeline's returned value will be returned from the closure.
-| pipeline | The pipeline to be wrapped |
- 1.8.17
-
-
-
diff --git a/docs/html/functional_8h__incl.map b/docs/html/functional_8h__incl.map
deleted file mode 100644
index d43aecb..0000000
--- a/docs/html/functional_8h__incl.map
+++ /dev/null
@@ -1,8 +0,0 @@
-
diff --git a/docs/html/functional_8h__incl.md5 b/docs/html/functional_8h__incl.md5
deleted file mode 100644
index af8dbff..0000000
--- a/docs/html/functional_8h__incl.md5
+++ /dev/null
@@ -1 +0,0 @@
-95171197af7a96b706c6fb74b3843148
\ No newline at end of file
diff --git a/docs/html/functional_8h__incl.png b/docs/html/functional_8h__incl.png
deleted file mode 100644
index b85eaa8..0000000
Binary files a/docs/html/functional_8h__incl.png and /dev/null differ
diff --git a/docs/html/functional_8h_source.html b/docs/html/functional_8h_source.html
deleted file mode 100644
index 3fa691a..0000000
--- a/docs/html/functional_8h_source.html
+++ /dev/null
@@ -1,139 +0,0 @@
-
-
-
-
-
-
-
-|
- µEvLoop
-
- A fast and lightweight event loop aimed at embedded platforms in C99.
- |
-
- 1.8.17
-
-
-
diff --git a/docs/html/functions.html b/docs/html/functions.html
deleted file mode 100644
index 9fdb9b0..0000000
--- a/docs/html/functions.html
+++ /dev/null
@@ -1,401 +0,0 @@
-
-
-
-
-
-
-
-|
- µEvLoop
-
- A fast and lightweight event loop aimed at embedded platforms in C99.
- |
-
- 1.8.17
-
-
-
diff --git a/docs/html/functions_vars.html b/docs/html/functions_vars.html
deleted file mode 100644
index 7f52164..0000000
--- a/docs/html/functions_vars.html
+++ /dev/null
@@ -1,401 +0,0 @@
-
-
-
-
-
-
-
-|
- µEvLoop
-
- A fast and lightweight event loop aimed at embedded platforms in C99.
- |
-
- 1.8.17
-
-
-
diff --git a/docs/html/globals.html b/docs/html/globals.html
deleted file mode 100644
index 06f1483..0000000
--- a/docs/html/globals.html
+++ /dev/null
@@ -1,554 +0,0 @@
-
-
-
-
-
-
-
-|
- µEvLoop
-
- A fast and lightweight event loop aimed at embedded platforms in C99.
- |
-
- 1.8.17
-
-
-
diff --git a/docs/html/globals_defs.html b/docs/html/globals_defs.html
deleted file mode 100644
index c024530..0000000
--- a/docs/html/globals_defs.html
+++ /dev/null
@@ -1,141 +0,0 @@
-
-
-
-
-
-
-
-|
- µEvLoop
-
- A fast and lightweight event loop aimed at embedded platforms in C99.
- |
-
- 1.8.17
-
-
-
diff --git a/docs/html/globals_enum.html b/docs/html/globals_enum.html
deleted file mode 100644
index 61ebe77..0000000
--- a/docs/html/globals_enum.html
+++ /dev/null
@@ -1,87 +0,0 @@
-
-
-
-
-
-
-
-|
- µEvLoop
-
- A fast and lightweight event loop aimed at embedded platforms in C99.
- |
-
- 1.8.17
-
-
-
diff --git a/docs/html/globals_eval.html b/docs/html/globals_eval.html
deleted file mode 100644
index 5ec3c9c..0000000
--- a/docs/html/globals_eval.html
+++ /dev/null
@@ -1,84 +0,0 @@
-
-
-
-
-
-
-
-|
- µEvLoop
-
- A fast and lightweight event loop aimed at embedded platforms in C99.
- |
-
- 1.8.17
-
-
-
diff --git a/docs/html/globals_func.html b/docs/html/globals_func.html
deleted file mode 100644
index a22dd0d..0000000
--- a/docs/html/globals_func.html
+++ /dev/null
@@ -1,437 +0,0 @@
-
-
-
-
-
-
-
-|
- µEvLoop
-
- A fast and lightweight event loop aimed at embedded platforms in C99.
- |
-
- 1.8.17
-
-
-
diff --git a/docs/html/globals_type.html b/docs/html/globals_type.html
deleted file mode 100644
index f8d049d..0000000
--- a/docs/html/globals_type.html
+++ /dev/null
@@ -1,105 +0,0 @@
-
-
-
-
-
-
-
-|
- µEvLoop
-
- A fast and lightweight event loop aimed at embedded platforms in C99.
- |
-
- 1.8.17
-
-
-
diff --git a/docs/html/graph_legend.html b/docs/html/graph_legend.html
deleted file mode 100644
index 970b17d..0000000
--- a/docs/html/graph_legend.html
+++ /dev/null
@@ -1,137 +0,0 @@
-
-
-
-
-
-
-
-|
- µEvLoop
-
- A fast and lightweight event loop aimed at embedded platforms in C99.
- |
-
This page explains how to interpret the graphs that are generated by doxygen.
-Consider the following example:
This will result in the following graph:
-
The boxes in the above graph have the following meaning:
-The arrows have the following meaning:
-
- 1.8.17
-
-
-
diff --git a/docs/html/graph_legend.md5 b/docs/html/graph_legend.md5
deleted file mode 100644
index 8fcdccd..0000000
--- a/docs/html/graph_legend.md5
+++ /dev/null
@@ -1 +0,0 @@
-f51bf6e9a10430aafef59831b08dcbfe
\ No newline at end of file
diff --git a/docs/html/graph_legend.png b/docs/html/graph_legend.png
deleted file mode 100644
index 83dfada..0000000
Binary files a/docs/html/graph_legend.png and /dev/null differ
diff --git a/docs/html/index.html b/docs/html/index.html
deleted file mode 100644
index 5c9ecc6..0000000
--- a/docs/html/index.html
+++ /dev/null
@@ -1,1302 +0,0 @@
-
-
-
-
-
-
-
-|
- µEvLoop
-
- A fast and lightweight event loop aimed at embedded platforms in C99.
- |
-
A fast and lightweight event loop aimed at embedded platforms in C99.
-µEvLoop is a microframework build around a lightweight event loop. It provides the programmer the building blocks to put together async, interrupt-based systems.
-µEvLoop is loosely inspired on the Javascript event loop and aims to provide a similar programming model. Many similar concepts, such as events and closures are included. It is aimed at environments with very restricted resources, but can be run on all kinds of platforms.
-µEvLoop is in its early days and the API may change at any moment for now. Although it's well tested, use it with caution. Anyway, feedback is most welcome.
-The API documentation is automatically generated by Doxygen. Find it here.
-Tests are written using a simple set of macros. To run them, execute make test.
Please note that the makefile shipped is meant to be run in modern Linux systems. Right now, it makes use of bash commands and utilities as well as expects libSegFault.so to be in a hardcoded path.
If this doesn't fit your needs, edit it as necessary.
-To generate code coverage reports, run make coverage. This requires gcov, lcov and genhtml to be on your PATH. After running, the results can be found on uevloop/coverage/index.html.
These data structures are used across the whole framework. They can also be used by the programmer in userspace as required.
-All core data structures are unsafe. Be sure to wrap access to them in critical sections if you mean to share them amongst contexts asynchronous to each other.
-A closure is an object that binds a function to some context. When invoked with arbitrary parameters, the bound function is called with both context and parameters available. With closures, some very powerful programming patterns, as functional composition, become way easier to implement.
-Closures are very light and it is often useful to pass them around by value.
-Closures take the context and parameters as a void pointers and return the same. This is meant to make possible to pass and return complex objects from them.
-At many times, however, the programmer may find the values passed/returned are small and simple (i.e.: smaller than a pointer). If so, it is absolutely valid to cast from/to a uintptr_t or other data type known to be at most the size of a pointer. The above example does that to avoid creating unnecessary object pools or allocating dynamic memory.
Circular queues are fast FIFO (first-in-first-out) structures that rely on a pair of indices to maintain state. As the indices are moved forward on push/pop operations, the data itself is not moved at all.
-The size of µEvLoop's circular queues are required to be powers of two, so it is possible to use fast modulo-2 arithmetic. As such, on queue creation, the size must be provided in its log2 form.
-FORGETTING TO SUPPLY THE QUEUE'S SIZE IN LOG2 FORM MAY CAUSE THE STATIC ALLOCATION OF GIANT MEMORY POOLS
-Circular queues store void pointers. As it is the case with closures, this make possible to store complex objects within the queue, but often typecasting to an smaller value type is more useful.
-On embedded systems, hardware resources such as processing power or RAM memory are often very limited. As a consequence, dynamic memory management can become very expensive in both aspects.
-Object pools are statically allocated arrays of objects whose addresses are stored in a queue. Whenever the programmer needs a object in runtime, instead of dynamically allocating memory, it is possible to simply pop an object pointer from the pool and use it away.
-Because object pools are statically allocated and backed by circular queues, they are very manageable and fast to operate.
-µEvLoop ships a simple linked list implementation that holds void pointers, as usual.
-Containers are objects that encapsulate declaration, initialisation and manipulation of core data structures used by the framework.
-They also encapsulates manipulation of these data structures inside critical sections, ensuring safe access to shared resources across the system.
-The syspools component is a container for the system internal object pools. It contains pools for events and linked list nodes used by the core components.
The system pools component is meant to be internally operated only. The only responsibility of the programmer is to allocate, initialise and provide it to other core components.
-To configure the size of each pool created, edit include/uevloop/config.h.
The sysqueues component contains the necessary queues for sharing data amongst the core components. It holds queues for events in differing statuses.
As is the case with system pools, the sysqueues component should not be directly operated by the programmer, except for declaration and initialisation.
Configure the size of each queue created in include/uevloop/config.h.
The application component is a convenient top-level container for all the internals of an µEvLoop'd app. It is not necessary at all but contains much of the boilerplate in a typical application.
It also proxies functions to the event loop and scheduler components, serving as a single point entry for the system operation.
The following code is a realistic minimal setup of the framework. ```c #include <uevloop/system/containers/application.h> #include <stdint.h>
-static volatile uint32_t counter = 0; static uel_application_t my_app;
-// 1 kHz timer void my_timer_isr(){ my_timer_isr_flag = 0; uel_app_update_timer(&my_app, ++counter); }
-int main (int argc, char *argv[]){ uel_app_init(&my_app);
-// From here, the programmer can: // - Schedule timers with uel_app_run_later or uel_app_run_at_intervals // - Enqueue closures with uel_app_enqueue_closure // - Set up observers with uel_app_observe // - Listen for signals set at other places
while(1){
- uel_app_tick(&my_app); }
return 0; }
The scheduler component accepts input of closures and scheduling info an then turns it into a timer event. This timer is then inserted in a timer list, which is sorted by each timer's due time.
The scheduler must be fed regularly to work. It needs both an update on the running time as an stimulus to process enqueued timers. Ideally, a hardware timer will be consistently incrementing a counter and feeding it at an ISR while in the main loop the scheduler is oriented to process its queue.
When the function uel_sch_manage_timers is called, two things happen:
schedule_queue is flushed and every timer in it is scheduled accordingly;event_queue, where they will be further collected and processed.Events are messages passed amongst the system internals that coordinate what tasks are to be run, when and in which order. Usually, the programmer don't have to interact directly with events, being timer events and observers the only exceptions to this. The functions uel_sch_run_later and uel_sch_run_at_intervals return a uel_event_t *. With this handle, it is possible to pause and resume or even completely cancel a timer event.
```C #include <stddef.h>
-uel_event_t *timer = uel_sch_run_at_intervals(&scheduler, 100, false, print_one, NULL);
-// The event will be put on a hold queue in the scheduler uel_event_timer_pause(timer);
-
// The event will be rescheduled on the scheduler uel_event_timer_resume(timer);
-// The event will be ignored by the scheduler and destroyed at the event loop uel_event_timer_cancel(timer);
The event loop is mean to behave as a run-to-completion task scheduler. Its uel_evloop_run function should be called as often as possible as to minimise execution latency. Each execution of uel_evloop_run is called a runloop .
The only way the programmer interacts with it, besides creation / initialisation, is by enqueuing hand-tailored closures directly, but other system components operate on the event loop behind the stage.
-Any closure can be enqueued multiple times.
-WARNING! uel_evloop_run is the single most important function within µEvLoop. Almost every other core component depends on the event loop and if this function is not called, the loop won't work at all. Don't ever let it starve.
The event loop can be instructed to observe some arbitrary volatile value and react to changes in it.
-Because observers are completely passive, they are ideal for triggering side-effects from ISRs without any latency. However, each observer set does incur extra latency during runloops, as the observed value must be continuously polled.
-```c static volatile uintptr_t adc_reading = 0;
-void my_adc_isr(){ adc_reading = my_adc_buffer; my_adc_isr_flag = 0; }
-static void *process_adc_reading(void *context, void *params){ uintptr_t value = (uintptr_t)params; // Do something with value
return NULL; } uel_closure_t processor = uel_closure_create(process_adc_reading, NULL);
-// This ensures each runloop the adc_reading variable is polled and, in case // of changes to it, the processor closure is called with its new value as // parameter. uel_event_t *observer = uel_evloop_observe(&loop, &adc_reading, &processor);
// When an observer isn't needed anymore, it can be disposed of to release any // used system resources. // DON'T use an observer after it has been cancelled. uel_event_observer_cancel(observer).
Please note the listener function will not be executed immediately, despite what this last snippet can lead to believe. Internally, each closure will be sent to the event loop and only when it runs will the closures be invoked.
-You can also unlisten for events. This will prevent the listener returned by a uel_signal_listen() or uel_signal_listen_once() operation to have its closure invoked when the event loop performs the next runloop. Additionally, said listener will be removed from the signal vector on such opportunity.
Promises are data structures that bind an asynchronous operation to the possible execution paths that derive from its result. They are heavily inspired by Javascript promises.
-Promises allow for very clean asynchronous code and exceptional error handling.
-All promises must be created at a store, to where they will come back once destroyed. A promise store encapsulates object pools for promises and segments, the two composing pieces for promise operation.
-Promise store need access to two object pools, one for promises and one for segments.
As mentioned above, promises and segments are the two building blocks for composing asynchronous chains of events. Promises represent the asynchronous operation per se and segments are the synchronous processing that occurs when a promise settles.
-Settling a promise means transitioning it into either resolved or rejected states which respectively indicate success or error of the asynchronous operation, optionally assigning a meaningful value to the promise.
-There are two necessary pieces for creating a promise: a store and a constructor closure that starts the asynchronous operation.
-When the promise is created, start_some_async is invoked immediately, taking the promise pointer as parameter.
On creation, promises are in the pending state. This means its asynchronous operation has not been completed yet and the promise does not hold any meaningful value.
-Once the operation is completed (and this can also be synchronously done from inside the constructor closure), there are two functions for signalling either success or failure of the asynchronous operation:
-Once a promise is settled, it holds a value that can be accessed via promise->value.
Segments represent the synchronous phase that follows a promise settling. They contain two closures, one for handling resolved promises and one for handling rejected promises. Either one is chosen at runtime, depending on the settled state of the promise, and is invoked with the promise as parameter.
-Depending on the promise state, attaching segments have different effects. When a promise is pending, attached segments just get enqueued for execution once the promise is settled. Should the promise be already settled, attached segments get processed immediately instead.
-The uel_promise_after() function takes two closures as parameters. This is useful for splitting the execution path in two mutually exclusive routes depending on the settled state of the promise.
There are three other functions for enqueuing segments. They can be used for attaching segments that only produce effects on specific settled states or attaching the same closure to both states:
-Any number of segments can be attached to some promise. They will be either processed immediately, in case the promise is already settled, or enqueued for processing upon settling in the future. Regardless, attached segments are always processed in registration order.
-Chaining segments is useful because segments have the ability to commute between execution paths through promise resettling. To resettle a promise means changing its state and value.
-This builds a segment chain attached to promise p1. Each segment added describes one synchronous step to be executed for each of the two settled states.
Segments are processed sequentially, from first to last, starting with the closure relative to the state the promise was settled as. The following table illustrates this chain:
-| State | Segment 1 | Segment 2 | Segment 3 |
|---|---|---|---|
| resolved | store_char | nop | done |
| rejected | nop | report_error | done |
The outcome of this chain is determined upon settling. For example, given the following resolution:
-The first closure invoked is store_char, in segment 1. In the closure function, the test condition promise->value <= 255 is true, so the closure proceeds to store its value in the c1 variable.
As the promise remains resolved, it advances to segment 2, where it finds a nop (no-operation). This is due to the segment being attached via uel_promise_catch.
The promise then advances to segment 3, where it finds the done closure. The process then ends and the promise retains its state and value (UEL_PROMISE_RESOLVED and (void *)10 in this case). By then, c1 holds (char)10 and ‘operation done with state 'resolved’` is printed.
If instead the promise was resolved as:
Then the test condition promise->value <= 255 would have failed. The store_char would then skip storing the value and would rather resettle the promise as rejected, with some error message as value. This effectively commutes the execution path to the rejected branch.
Once the store_char returns, as the promise is now rejected, the report_error closure is invoked and ‘promise was rejected with error 'Value too big’is printed. Thedoneclosure is then invoked and printsoperation done with state 'rejected'`.
Similarly, if instead the promise had been rejected as:
Segment 1 would be ignored, report_error would be invoked and print ‘promise was rejected with error 'Asynchronous operation failed’and, at segment 3,donewould be invoked and printoperation done with state 'rejected'`.
Resettling can also be used for recovering from errors if it commutes back to resolved state. This constitutes an excellent exception system that allows errors raised in loose asynchronous operations to be rescued consistently. Even exclusively synchronous processes can benefit from this error rescuing system.
As a last note, segments can also resettle a promise as UEL_PROMISE_PENDING. This halts the synchronous stage immediately, leaving any unprocessed segments in place. This phase can be restarted by either resolving or rejecting the promise again.
Promises can be nested into each other, allowing for complex asynchronous operations to compose a single segment chain. This provides superb flow control for related asynchronous operations that would otherwise produce a lot of spaghetti code.
-Whenever a promise segment returns any non-null value, it is cast to a promise pointer. The original promise then transitions back to pending state and awaits for the returned promise to settle. Once this new promise is settled, the original promise is resumed with whatever state and value the new promise was settled as.
For instance, suppose the programmer is programming an MCU that possesses an ADC with an arbitrarily long buffer and a DMA channel. The program must start the ADC, which will sample N times and store it in its buffer. After N samples have been taken, the DMA channel must be instructed to move it out of the ADC buffer into some memory-mapped buffer, where it will be processed.
This could be easily accomplished with signals or callbacks, but would eventually lead to confusing and discontinuous code. With nested promises, however, it is easy to describe the whole process into one single chain.
-Suppose this is the implementation for the DMA and ADC modules:
-Implementing the project requirements is this simple:
-Note that, in the above example, promises are resolved synchronously inside the ISR's. This may be not desirable due to performance reasons, but can be easily improved by enqueueing a closure that resolves nested promises into the event loop.
-To destroy a promise, call uel_promise_destroy(). This will release all segments and then the promise itself. Settling a promise after it has been destroyed is undefined behaviour.
Because settling and destroying promises are so frequent, there are helper functions that emit closures that automate this work:
-Modules are independent units of behaviour, self-contained and self-allocated, with clear lifecycle hooks, interface and dependencies. They enforce separation of concerns and isolation by making clear how your code interacts with the rest of the application.
-Modules are absolutely optional and very thin on the library side. They are basically a convention of how to write code in a fashion that works well with µEvLoop.
-Modules can serve as a variety of purposes:
Modules are operated by the application component. It is responsible for loading, configuring and launching each module.
There are two method for injecting a registered module: parametrised injection and ad-hoc injection. Each is adequate for a different situation:
-Parametrised dependencies are dependencies that are supplied during module construction.
-Given the following module header:
The application loading procedure would be:
```c // File: main.c
-uel_module_t *modules[MY_APP_MODULE_COUNT];
-modules[MY_MODULE] = my_module(&my_app);
-// Injects parametrised dependencies name and other_module modules[MY_GREETER] = my_greeter(&my_app, "King Kong", (my_module_t *)modules[MY_MODULE]);
uel_app_load(&my_app, modules, MY_APP_MODULE_COUNT)
While Ad-hoc injections seem easier, they make more difficult to know on which modules some particular piece of code depends on. Also, because they require the modules to already be loaded into the registry, they cannot be used during the configuration phase.
-Iterators are abstractions on arbitrary collections of items. They provide a uniform interface for yielding each element in the iterated collection, disregarding implementation details of such collection.
-There are two iterator specialisations shipped with µEvLoop:
-Iterators live entirely on an embedded function pointer, next. It is responsible by yielding a pointer to each element in the collection.
```c // cast to generic iterator uel_iterator_t *iterator = (uel_iterator_t *)
-// when supplied with NULL as parameter to next, yields // the first element in the collection int *current = NULL;
while(true){ current = (int *)iterator->next(iterator, (void *)current); if(current != NULL){ // do something }else break; // when there are no more elements , yields NULL } ```
Besides manually operating an iterator, there are several iteration helpers that automatise work.
-```c #include <uevloop/utils/closure.h>
-void *accumulate(void *context, void *params){ uintptr_t *acc = (uintptr_t *)context; uintptr_t num = *(uintptr_t *)params; *acc += num; return (void *)true; // required; returning false is equivalent to a break }
uintptr_t acc = 0; uel_closure_t acumulate_into_acc = uel_closure_create(accumulate, (void *)&acc);
-uel_iterator_foreach(iterator, &accumulate_into_acc); // if iterator is the same array iterator defined previously, // acc == 15
Note that base is required to be the first member in your custom iterator structure. That way, a pointer to your iterator can be safely cast to uel_iterator_t * forth and back.
Conditionals are functional switches in the form of a tuple of closures <test, if_true, if_false>.
When applied to some input, this input is submitted to the test closure. If it returns true, if_true closure is invoked, otherwise, if_false is invoked. All closures take the same input as arguments.
Pipelines are sequences of closures whose outputs are connected to the next closure's input.
-When applied to some input, this input is passed along each closure, being transformed along the way. Applying a pipeline returns the value returned by the last closure in it.
-Iterators, conditionals and pipelines are objects associated with synchronous operations.
-To make more suitable to asynchronous contexts, there are numerous helpers that can abstract some of their operational details and export them into portable closures.
-Please read the docs to find out more about them.
-Automatic pools are wrappers objects that enhance the abilities of object pools. They allow constructors and destructors to be attached and, instead of yielding bare pointers, yield uel_autoptr_t automatic pointers.
Automatic pointers are objects that associate some object to the pool it is from, making it trivial to destroy the object regardless of access to its source. An automatic pointer issued to an object of type T can be safely cast to T**. Casting to any other pointer type is undefined behaviour.
Automatic pools are created and initialised in very similar ways to object pools:
-After an automatic pool has been created, it can allocate and deallocate objects, just like object pools.
-It is possible to attach a constructor and a destructor to some automatic pool. This are closures that will be invoked upon object allocation and deallocation, taking a bare pointer to the object being operated on.
-µEvLoop is meant to run baremetal, primarily in simple single-core MCUs. That said, nothing stops it from being employed as a side library in RTOSes or in full-fledged x86_64 multi-threaded desktop applications.
-Communication between asynchronous contexts, such as ISRs and side threads, is done through some shared data structures defined inside the library's core components. As whenever dealing with non-atomic shared memory, there must be synchronisation between accesses to these structures as to avoid memory corruption.
-µEvLoop does not try to implement a universal locking scheme fit for any device. Instead, some generic critical section definition is provided.
-By default, critical sections in µEvLoop are a no-op. They are provided as a set of macros that can be overriden by the programmer to implement platform specific behaviour.
-For instance, while running baremetal it may be only necessary to disable interrupts to make sure accesses are synchronised. On a RTOS multi-threaded environment, on the other hand, it may be necessary to use a mutex.
-There are three macros that define critical section implementation:
-UEL_CRITICAL_SECTION_OBJ_TYPE
If needed, a global critical section object can be declared. If this macro is defined, this object will be available to any critical section under the symbol uel_critical_section.
The UEL_CRITICAL_SECTION_OBJ_TYPE macro defines the type of the object. It is the programmer's responsibility to declare, globally allocate and initialise the object.
UEL_CRITICAL_ENTER
Enters a new critical section. From this point until the critical section exits, no other thread or ISR may attempt to access the system's shared memory.
-UEL_CRITICAL_EXIT
Exits the current critical section. After this is called, any shared memory is allowed to be claimed by some party.
-I often work with small MCUs (8-16bits) that simply don't have the necessary power to run a RTOS or any fancy scheduling solution. Right now I am working on a new commercial project and felt the need to build something by my own. µEvLoop is my bet on how a modern, interrupt-driven and predictable embedded application should be. I am also looking for a new job and needed to improve my portfolio.
-
- 1.8.17
-
-
-
diff --git a/docs/html/iterator_8h.html b/docs/html/iterator_8h.html
deleted file mode 100644
index 17e3813..0000000
--- a/docs/html/iterator_8h.html
+++ /dev/null
@@ -1,635 +0,0 @@
-
-
-
-
-
-
-
-|
- µEvLoop
-
- A fast and lightweight event loop aimed at embedded platforms in C99.
- |
-
Defines iterators, structures and functions suitable for enumerating other data structures. -More...
-

Go to the source code of this file.
--Data Structures | |
| struct | uel_iterator_t |
| Iterators are data structures that wrap arbitrary collections of data and define ways of enumerating them. More... | |
| struct | uel_iterator_array_t |
| A specialised iterator suitable for iterating over arrays of arbitrary data. More... | |
-Macros | |
| #define | UEL_ITERATOR_MAP_BOUNDLESS UINT_MAX |
-Typedefs | |
| typedef uel_iterator_t | uel_iterator_llist_t |
Alias to uel_iterator_t. Iterator suitable to traverse linked lists. More... | |
-Functions | |
| bool | uel_iterator_foreach (uel_iterator_t *iterator, uel_closure_t *closure) |
| Applies a closure to an enumerable collection. More... | |
| size_t | uel_iterator_map (uel_iterator_t *iterator, uel_closure_t *closure, void **destination, size_t limit) |
| Applies a closure to an enumerable collection and stores its results. More... | |
| void * | uel_iterator_find (uel_iterator_t *iterator, uel_closure_t *closure) |
| Finds the first element enumerated by an iterator that passes the supplied test. More... | |
| size_t | uel_iterator_count (uel_iterator_t *iterator, uel_closure_t *closure) |
| Counts elements enumerated by an iterator that pass the supplied test. More... | |
| bool | uel_iterator_all (uel_iterator_t *iterator, uel_closure_t *closure) |
| Determines whether all elements enumerated by an iterator pass the supplied test or not. More... | |
| bool | uel_iterator_none (uel_iterator_t *iterator, uel_closure_t *closure) |
| Determines whether all elements enumerated by an iterator fail the supplied test or not. More... | |
| bool | uel_iterator_any (uel_iterator_t *iterator, uel_closure_t *closure) |
| Determines whether any elements enumerated by an iterator pass the supplied test or not. More... | |
| void * | uel_iterator_array_next (uel_iterator_array_t *iterator, void *last) |
| Yields elements in a array. More... | |
| uel_iterator_array_t | uel_iterator_array_create (void *collection, size_t count, size_t size) |
| Creates a new array iterator. More... | |
| void * | uel_iterator_llist_next (uel_iterator_t *iterator, void *last) |
| Yields elements in a linked list. More... | |
| uel_iterator_llist_t | uel_iterator_llist_create (uel_llist_t *list) |
| Creates a new linked list iterator. More... | |
Defines iterators, structures and functions suitable for enumerating other data structures.
-| #define UEL_ITERATOR_MAP_BOUNDLESS UINT_MAX | -
Defines the maximum possible iteration limit for the uel_iterator_map() function.
| typedef uel_iterator_t uel_iterator_llist_t | -
Alias to uel_iterator_t. Iterator suitable to traverse linked lists.
Because when traversing a linked list we need only know one element to know the next one, there is no need to store any additional state in linked list iterators.
- -| bool uel_iterator_all | -( | -uel_iterator_t * | -iterator, | -
| - | - | uel_closure_t * | -closure | -
| - | ) | -- |
Determines whether all elements enumerated by an iterator pass the supplied test or not.
-| iterator | The iterator that enumerates the elements of some collection |
| closure | The test to be applied against each enumerated element |
| bool uel_iterator_any | -( | -uel_iterator_t * | -iterator, | -
| - | - | uel_closure_t * | -closure | -
| - | ) | -- |
Determines whether any elements enumerated by an iterator pass the supplied test or not.
-| iterator | The iterator that enumerates the elements of some collection |
| closure | The test to be applied against each enumerated element |
| uel_iterator_array_t uel_iterator_array_create | -( | -void * | -collection, | -
| - | - | size_t | -count, | -
| - | - | size_t | -size | -
| - | ) | -- |
Creates a new array iterator.
-| collection | The array to be enumerated |
| count | The number of elements in this array |
| size | The size of each element in the array |
| void* uel_iterator_array_next | -( | -uel_iterator_array_t * | -iterator, | -
| - | - | void * | -last | -
| - | ) | -- |
Yields elements in a array.
-| iterator | The iterator thar enumerates the elements in the target array |
| last | The last element yielded. If NULL, returns the first element. |
NULL. | size_t uel_iterator_count | -( | -uel_iterator_t * | -iterator, | -
| - | - | uel_closure_t * | -closure | -
| - | ) | -- |
Counts elements enumerated by an iterator that pass the supplied test.
-| iterator | The iterator that enumerates the elements of some collection |
| closure | The test to be applied against each enumerated element |
| void* uel_iterator_find | -( | -uel_iterator_t * | -iterator, | -
| - | - | uel_closure_t * | -closure | -
| - | ) | -- |
Finds the first element enumerated by an iterator that passes the supplied test.
-| iterator | The iterator that enumerates the elements of some collection |
| closure | The test to be applied against each enumerated element |
| bool uel_iterator_foreach | -( | -uel_iterator_t * | -iterator, | -
| - | - | uel_closure_t * | -closure | -
| - | ) | -- |
Applies a closure to an enumerable collection.
-| iterator | The iterator that enumerates the elements of some collection |
| closure | The closure to be invoked with each element in the enumerated collection as parameter. If this closure returns false, the iteration will be halted. |
false. | uel_iterator_llist_t uel_iterator_llist_create | -( | -uel_llist_t * | -list | ) | -- |
Creates a new linked list iterator.
-| list | The linked list to be enumerated |
| void* uel_iterator_llist_next | -( | -uel_iterator_t * | -iterator, | -
| - | - | void * | -last | -
| - | ) | -- |
Yields elements in a linked list.
-| iterator | The iterator thar enumerates the elements in the target list |
| last | The last element yielded. If NULL, returns the first element. |
NULL. | size_t uel_iterator_map | -( | -uel_iterator_t * | -iterator, | -
| - | - | uel_closure_t * | -closure, | -
| - | - | void ** | -destination, | -
| - | - | size_t | -limit | -
| - | ) | -- |
Applies a closure to an enumerable collection and stores its results.
-This function takes an iterator that enumerates elements in a collection and yields each one to a closure. The return value of each closure call is stored in an array.
-| iterator | The iterator that enumerates the elements of some collection |
| closure | The closure to be invoked with each element in the enumerated collection ad parameter. |
| destination | The destination of the data produced by the invoked closure. This must be an array of void pointers large enough to store all produced data |
| limit | The maximum size of the destination buffer. If collection is larger than this array, in elements, it will not be iterated entirely, only up to the limitth element. |
| bool uel_iterator_none | -( | -uel_iterator_t * | -iterator, | -
| - | - | uel_closure_t * | -closure | -
| - | ) | -- |
Determines whether all elements enumerated by an iterator fail the supplied test or not.
-| iterator | The iterator that enumerates the elements of some collection |
| closure | The test to be applied against each enumerated element |
- 1.8.17
-
-
-
diff --git a/docs/html/iterator_8h__dep__incl.map b/docs/html/iterator_8h__dep__incl.map
deleted file mode 100644
index bb9bec5..0000000
--- a/docs/html/iterator_8h__dep__incl.map
+++ /dev/null
@@ -1,4 +0,0 @@
-
diff --git a/docs/html/iterator_8h__dep__incl.md5 b/docs/html/iterator_8h__dep__incl.md5
deleted file mode 100644
index 3a81273..0000000
--- a/docs/html/iterator_8h__dep__incl.md5
+++ /dev/null
@@ -1 +0,0 @@
-d1aa05b9f71b76b45f7b2fda325e2fcf
\ No newline at end of file
diff --git a/docs/html/iterator_8h__dep__incl.png b/docs/html/iterator_8h__dep__incl.png
deleted file mode 100644
index 4f878b1..0000000
Binary files a/docs/html/iterator_8h__dep__incl.png and /dev/null differ
diff --git a/docs/html/iterator_8h__incl.map b/docs/html/iterator_8h__incl.map
deleted file mode 100644
index 30fe778..0000000
--- a/docs/html/iterator_8h__incl.map
+++ /dev/null
@@ -1,5 +0,0 @@
-
diff --git a/docs/html/iterator_8h__incl.md5 b/docs/html/iterator_8h__incl.md5
deleted file mode 100644
index 945f58d..0000000
--- a/docs/html/iterator_8h__incl.md5
+++ /dev/null
@@ -1 +0,0 @@
-952aa586340a674cafb3671faa6525af
\ No newline at end of file
diff --git a/docs/html/iterator_8h__incl.png b/docs/html/iterator_8h__incl.png
deleted file mode 100644
index dc0b99a..0000000
Binary files a/docs/html/iterator_8h__incl.png and /dev/null differ
diff --git a/docs/html/iterator_8h_source.html b/docs/html/iterator_8h_source.html
deleted file mode 100644
index 315f34a..0000000
--- a/docs/html/iterator_8h_source.html
+++ /dev/null
@@ -1,151 +0,0 @@
-
-
-
-
-
-
-
-|
- µEvLoop
-
- A fast and lightweight event loop aimed at embedded platforms in C99.
- |
-
- 1.8.17
-
-
-
diff --git a/docs/html/jquery.js b/docs/html/jquery.js
deleted file mode 100644
index 103c32d..0000000
--- a/docs/html/jquery.js
+++ /dev/null
@@ -1,35 +0,0 @@
-/*! jQuery v3.4.1 | (c) JS Foundation and other contributors | jquery.org/license */
-!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],E=C.document,r=Object.getPrototypeOf,s=t.slice,g=t.concat,u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType},x=function(e){return null!=e&&e===e.window},c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.4.1",k=function(e,t){return new k.fn.init(e,t)},p=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;function d(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0|
- µEvLoop
-
- A fast and lightweight event loop aimed at embedded platforms in C99.
- |
-
Defines a simple implementation of linked lists and functions to manipulate it. -More...
-#include "uevloop/utils/closure.h"

Go to the source code of this file.
--Data Structures | |
| struct | uel_llist_node_t |
| Defines a node of the linked list. Holds a void pointer. More... | |
| struct | uel_llist_t |
| Defines a linked list. If it is empty, head == tail == NULL. Pushing or popping from both the head or tail is always O(1). More... | |
-Functions | |
| void | uel_llist_init (uel_llist_t *list) |
| Initialised a linked list. More... | |
| void | uel_llist_push_head (uel_llist_t *list, uel_llist_node_t *node) |
| Pushes a node to the head of the list. More... | |
| void | uel_llist_push_tail (uel_llist_t *list, uel_llist_node_t *node) |
| Pushes a node to the tail of the list. More... | |
| uel_llist_node_t * | uel_llist_pop_head (uel_llist_t *list) |
| Pops a node from the head of the list. More... | |
| uel_llist_node_t * | uel_llist_pop_tail (uel_llist_t *list) |
| Pops a node from the tail of the list. More... | |
| uel_llist_node_t * | uel_llist_peek_head (uel_llist_t *list) |
| Peeks the element at the head of the list. More... | |
| uel_llist_node_t * | uel_llist_peek_tail (uel_llist_t *list) |
| Peeks the element at the tail of the list. More... | |
| bool | uel_llist_remove (uel_llist_t *list, uel_llist_node_t *node) |
| Removes a node from the queue. More... | |
| uel_llist_t | uel_llist_remove_while (uel_llist_t *list, uel_closure_t *should_remove) |
| Splits a list in two. The rupture point is determined by the supplied closure. More... | |
| void | uel_llist_insert_at (uel_llist_t *list, uel_llist_node_t *node, uel_closure_t *should_insert) |
| Scans a list until it finds a suitable spot to insert the provided node. More... | |
Defines a simple implementation of linked lists and functions to manipulate it.
-| void uel_llist_init | -( | -uel_llist_t * | -list | ) | -- |
Initialised a linked list.
-| list | The list to be initialised. It will be empty after initialisation. |
| void uel_llist_insert_at | -( | -uel_llist_t * | -list, | -
| - | - | uel_llist_node_t * | -node, | -
| - | - | uel_closure_t * | -should_insert | -
| - | ) | -- |
Scans a list until it finds a suitable spot to insert the provided node.
-This function iterates the linked list invoking the supplied closure until it returns true. The supplied node is then inserted at this position.
-The should_insert closure will be invoked for each pair of node addresses in the range [NULL, &NODE_1, &NODE_2, ..., &NODE_N, NULL] as parameter. When it finds a suitable position, it must return true.
| list | The list to insert the node at |
| node | The node to be inserted |
| should_insert | A closure that returns whether the node ought to be inserted at the current position. The closure function must unpack the closure parameters to a uel_llist_node_t **[2] and return a boolean. |
| uel_llist_node_t* uel_llist_peek_head | -( | -uel_llist_t * | -list | ) | -- |
Peeks the element at the head of the list.
-| list | The list from where the node will be peeked |
| uel_llist_node_t* uel_llist_peek_tail | -( | -uel_llist_t * | -list | ) | -- |
Peeks the element at the tail of the list.
-| list | The list from where the node will be peeked |
| uel_llist_node_t* uel_llist_pop_head | -( | -uel_llist_t * | -list | ) | -- |
Pops a node from the head of the list.
-| list | The list from where the node will be popped |
| uel_llist_node_t* uel_llist_pop_tail | -( | -uel_llist_t * | -list | ) | -- |
Pops a node from the tail of the list.
-| list | The list from where the node will be popped |
| void uel_llist_push_head | -( | -uel_llist_t * | -list, | -
| - | - | uel_llist_node_t * | -node | -
| - | ) | -- |
Pushes a node to the head of the list.
-| list | The list into which to insert the node |
| node | The node to be inserted. |
| void uel_llist_push_tail | -( | -uel_llist_t * | -list, | -
| - | - | uel_llist_node_t * | -node | -
| - | ) | -- |
Pushes a node to the tail of the list.
-| list | The list into which to insert the node |
| node | The node to be inserted. |
| bool uel_llist_remove | -( | -uel_llist_t * | -list, | -
| - | - | uel_llist_node_t * | -node | -
| - | ) | -- |
Removes a node from the queue.
-| list | The list from where the node will be removed |
| node | Address of the node being removed |
| uel_llist_t uel_llist_remove_while | -( | -uel_llist_t * | -list, | -
| - | - | uel_closure_t * | -should_remove | -
| - | ) | -- |
Splits a list in two. The rupture point is determined by the supplied closure.
-This function iterates the linked list invoking the provided closure for each node in it. While the closure returns true, nodes are popped from the list.
-| list | The list from where to pop nodes |
| should_remove | A closure that will be invoked taking each node as parameter. The closure should return a boolean indicating whether the node should be removed or not. |
- 1.8.17
-
-
-