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: Data Structures - - - - - - - - - -
-
- - - - - - -
-
µEvLoop -
-
A fast and lightweight event loop aimed at embedded platforms in C99.
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
-
Data Structures
-
-
-
Here are the data structures with brief descriptions:
-
[detail level 123]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 Cuel_application_tTop-level container for µEvLoop'd application
 Cuel_autopool_tAutomatic 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_autoptrAutomatic pointers are pointers wrapped by information of where they were issued
 Cuel_closure_tDefines a closure, a tuple <function, context, destructor>
 Cuel_conditional_tConditionals are constructs that provide functional flow control
 Cuel_cqueue_tDefines a circular queue of void pointers
 Cuel_event_tEvents are special messages passed around the core. They represent tasks to be run at some point by the system
 Cuel_event_detail
 Cuel_event_listenerContains the context of a particular signal listener
 Cuel_event_observerContains the reference to an observer variable
 Cuel_event_signalContains information related to an emitted signal
 Cuel_event_timerContains information suitable for scheduling an event at the scheduler
 Cuel_evloop_tThe event loop object
 Cuel_func_mapper_tMaps elements of an iterator to an area of memory. Each element is assigned to a void pointer slot
 Cuel_iterator_array_tA specialised iterator suitable for iterating over arrays of arbitrary data
 Cuel_iterator_tIterators are data structures that wrap arbitrary collections of data and define ways of enumerating them
 Cuel_llist_node_tDefines a node of the linked list. Holds a void pointer
 Cuel_llist_tDefines 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_tA module is an isolated unit of behaviour with lifecycle hooks
 Cuel_objpool_tPre-allocated memory bound to speciffic types suitable for providing dynamic object management in the stack
 Cuel_pipeline_tA pipeline is an ordered closure list to be run in sequence
 Cuel_promise_segment_tDefines a single synchronous operation to be invoked when the promise is either resolved or rejected
 Cuel_promise_store_tAn issuer of promises. Contains references to pools for promises and segments
 Cuel_promise_tA 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_tThe scheduler object
 Cuel_signal_relay_tContains a signal vector and operates on in
 Cuel_syspools_tA container for the system pools
 Cuel_sysqueues_tA container for the system's internal queues
-
-
- - - - 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: include/uevloop/system/containers/application.h File Reference - - - - - - - - - -
-
- - - - - - -
-
µEvLoop -
-
A fast and lightweight event loop aimed at embedded platforms in C99.
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-Data Structures | -Typedefs | -Enumerations | -Functions
-
-
application.h File Reference
-
-
- -

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"
-
-Include dependency graph for application.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...
 
-

Detailed Description

-

The application module is a convenient top-level container for the system internals.

-

Function Documentation

- -

◆ uel_app_enqueue_closure()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
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.

-
Parameters
- - - - -
appThe uel_application_t instance
closureThe closure to be enqueued
valueThe value to invoked the closure with
-
-
- -
-
- -

◆ uel_app_init()

- -
-
- - - - - - - - -
void uel_app_init (uel_application_t * app)
-
- -

Initialises an uel_application_t instance.

-
Parameters
- - -
appThe uel_application_t instance
-
-
- -
-
- -

◆ uel_app_load()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
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.

-
Parameters
- - - - -
appThe application onto which to load the modules
modulesThe modules to be loaded
module_countThe number of modules being loaded
-
-
- -
-
- -

◆ uel_app_observe()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
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.

-
Parameters
- - - - -
appThe uel_application_t instance
condition_varThe address of the value to be observed
closureThe closure to be invoked on change dection
-
-
-
Returns
The observer event associated with this operation
- -
-
- -

◆ uel_app_require()

- -
-
- - - - - - - - - - - - - - - - - - -
uel_module_t* uel_app_require (uel_application_t * app,
size_t id 
)
-
- -

Fetches a module from the app's registry.

-
Parameters
- - - -
appThe application from where to fetch the module
idThe module ID to be fetched
-
-
-
Returns
The module at idth position in the registry
- -
-
- -

◆ uel_app_run_at_intervals()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
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.

-
Parameters
- - - - - - -
appThe uel_application_t instance
interval_in_msThe delay in milliseconds two executions of the closure
immediateIf this flag is set, the the event will be created with a due time to the current time.
closureThe closure to be invoked when the due time is reached
valueThe value to invoked the closure with
-
-
-
Returns
The timer event associated with this operation
- -
-
- -

◆ uel_app_run_later()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
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.

-
Parameters
- - - - - -
appThe uel_application_t instance
timeout_in_msThe delay in milliseconds until the closure is run
closureThe closure to be invoked when the due time is reached
valueThe value to invoked the closure with
-
-
-
Returns
The timer event associated with this operation
- -
-
- -

◆ uel_app_tick()

- -
-
- - - - - - - - -
void uel_app_tick (uel_application_t * app)
-
- -

Ticks the application.

-

Yields control to the application runtime. This will:

    -
  1. Check if the scheduler ought to be run (i.e.: the counter has been updated or there are events awaiting rescheduling) and do so if necessary
  2. -
  3. Perform a runloop
  4. -
-
Parameters
- - -
appThe uel_application_t instance
-
-
- -
-
- -

◆ uel_app_update_timer()

- -
-
- - - - - - - - - - - - - - - - - - -
void uel_app_update_timer (uel_application_t * app,
uint32_t timer 
)
-
- -

Updates the internal timer of an application, located at the scheduler.

-
Parameters
- - - -
appThe uel_application_t instance
timerThe current application timer, in milliseconds
-
-
- -
-
-
- - - - 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: include/uevloop/system/containers/application.h Source File - - - - - - - - - -
-
- - - - - - -
-
µEvLoop -
-
A fast and lightweight event loop aimed at embedded platforms in C99.
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
application.h
-
-
-Go to the documentation of this file.
1 
-
6 #ifndef UEL_APPLICATION_H
-
7 #define UEL_APPLICATION_H
-
8 #include <stdint.h>
-
10 #include <stdbool.h>
-
11 #include <stdlib.h>
-
13 
- - - - -
18 #include "uevloop/system/signal.h"
-
19 #include "uevloop/utils/module.h"
-
20 
- -
23  UEL_APP_READY = 0,
-
24  UEL_APP_CRASHED,
-
25  UEL_APP_IDLE,
-
26  UEL_APP_EVENT_COUNT
-
27 };
- -
30 
-
38 typedef struct uel_application uel_application_t;
- -
40  uel_module_t **registry;
-
41  size_t registry_size;
-
42  uel_syspools_t pools;
-
43  uel_sysqueues_t queues;
-
44  uel_evloop_t event_loop;
-
45  uel_scheduer_t scheduler;
-
46  uel_signal_relay_t relay;
-
47  uel_llist_t relay_buffer[UEL_APP_EVENT_COUNT];
- -
49 };
-
50 
-
54 void uel_app_init(uel_application_t *app);
-
55 
-
62 void uel_app_load(uel_application_t *app, uel_module_t **modules, size_t module_count);
-
63 
-
71 uel_module_t *uel_app_require(uel_application_t *app, size_t id);
-
72 
-
82 void uel_app_tick(uel_application_t *app);
-
83 
-
89 void uel_app_update_timer(uel_application_t *app, uint32_t timer);
-
90 
-
102  uel_event_t *uel_app_run_later(
-
103  uel_application_t *app,
-
104  uint16_t timeout_in_ms,
-
105  uel_closure_t closure,
-
106  void *value
-
107  );
-
108 
-
122 uel_event_t *uel_app_run_at_intervals(
-
123  uel_application_t *app,
-
124  uint16_t interval_in_ms,
-
125  bool immediate,
-
126  uel_closure_t closure,
-
127  void *value
-
128 );
-
129 
- -
140  uel_application_t *app,
-
141  uel_closure_t *closure,
-
142  void *value
-
143 );
-
144 
-
156 uel_event_t *uel_app_observe(
-
157  uel_application_t *app,
-
158  volatile uintptr_t *condition_var,
-
159  uel_closure_t *closure
-
160 );
-
161 
-
162 #endif /* end of include guard: UEL_APPLICATION_H */
-
-
uel_app_event_t
enum uel_app_event uel_app_event_t
Alias to the uel_app_event enum.
Definition: application.h:29
-
uel_app_require
uel_module_t * uel_app_require(uel_application_t *app, size_t id)
Fetches a module from the app's registry.
-
module.h
-
uel_application::relay_buffer
uel_llist_t relay_buffer[UEL_APP_EVENT_COUNT]
Unused.
Definition: application.h:47
-
uel_application::relay
uel_signal_relay_t relay
Unused.
Definition: application.h:46
-
scheduler.h
Module responsible for keeping track of time and tasks to be run in the future.
-
uel_application::event_loop
uel_evloop_t event_loop
The application's event loop.
Definition: application.h:44
-
uel_application::scheduler
uel_scheduer_t scheduler
The applications's scheduler;.
Definition: application.h:45
-
uel_application::registry_size
size_t registry_size
The number of modules managed by this application.
Definition: application.h:41
-
uel_app_run_later
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.
-
uel_app_enqueue_closure
void uel_app_enqueue_closure(uel_application_t *app, uel_closure_t *closure, void *value)
Enqueues a closure to be invoked.
-
uel_application::pools
uel_syspools_t pools
Holds the system pools: events and llist nodes.
Definition: application.h:42
-
uel_app_observe
uel_event_t * uel_app_observe(uel_application_t *app, volatile uintptr_t *condition_var, uel_closure_t *closure)
Sets up an observer.
-
signal.h
Defines signals and relays, structures used to communicate asynchronously between distant parts of th...
-
uel_app_init
void uel_app_init(uel_application_t *app)
Initialises an uel_application_t instance.
-
uel_app_event
uel_app_event
Events emitted by the application relay. Unused ATM.
Definition: application.h:22
-
uel_application
Top-level container for µEvLoop'd application.
Definition: application.h:39
-
uel_application::registry
uel_module_t ** registry
The modules managed by this application.
Definition: application.h:40
-
uel_app_tick
void uel_app_tick(uel_application_t *app)
Ticks the application.
-
uel_application::run_scheduler
bool run_scheduler
Marks when it's time to wake the scheduler.
Definition: application.h:48
-
uel_app_update_timer
void uel_app_update_timer(uel_application_t *app, uint32_t timer)
Updates the internal timer of an application, located at the scheduler.
-
system-queues.h
A container for the system's internal queues.
-
uel_app_load
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.
-
uel_app_run_at_intervals
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.
-
system-pools.h
A container for the system's internal pools.
-
event-loop.h
Module responsible for running enqueued events and process them accordingly.
-
uel_application::queues
uel_sysqueues_t queues
Holds the system event queues.
Definition: application.h:43
- - - - 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: include/uevloop/utils/automatic-pool.h File Reference - - - - - - - - - -
-
- - - - - - -
-
µEvLoop -
-
A fast and lightweight event loop aimed at embedded platforms in C99.
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-Data Structures | -Macros | -Typedefs | -Functions
-
-
automatic-pool.h File Reference
-
-
- -

Defines automatic pointers and automatic pools, objects that wrap object pools and objects managed by them. These wrappers provide basic automatic memory management. -More...

-
#include "uevloop/utils/object-pool.h"
-#include "uevloop/utils/closure.h"
-
-Include dependency graph for automatic-pool.h:
-
-
- - - - - - -
-
-

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...
 
-

Detailed Description

-

Defines automatic pointers and automatic pools, objects that wrap object pools and objects managed by them. These wrappers provide basic automatic memory management.

-

Macro Definition Documentation

- -

◆ UEL_AUTOPOOL_BUFFERS

- -
-
- - - - - - - - -
#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.

-
Parameters
- - -
idThe identifier used to declare the pool buffers
-
-
- -
-
- -

◆ UEL_AUTOPOOL_BUFFERS_AT

- -
-
- - - - - - - - - - - - - - - - - - -
#define UEL_AUTOPOOL_BUFFERS_AT( id,
 obj 
)
-
-Value:
(uint8_t *)&obj->id##_buffer, obj->id##_pool_buffer, \
-
obj->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. Use this if the buffers were defined inside an object whose address is accessible in the current scope

-
Parameters
- - - -
idThe identifier used to declare the pool buffers
objThe address of the object storing the pool buffers
-
-
- -
-
- -

◆ UEL_AUTOPOOL_BUFFERS_IN

- -
-
- - - - - - - - - - - - - - - - - - -
#define UEL_AUTOPOOL_BUFFERS_IN( id,
 obj 
)
-
-Value:
(uint8_t *)&obj.id##_buffer, obj.id##_pool_buffer, \
-
obj.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. Use this if the buffers were defined inside a local object, accessible in the current scope.

-
Parameters
- - - -
idThe identifier used to declare the pool buffers
objThe object storing the pool buffers
-
-
- -
-
- -

◆ UEL_DECLARE_AUTOPOOL_BUFFERS

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
#define UEL_DECLARE_AUTOPOOL_BUFFERS( type,
 size_log2n,
 id 
)
-
-Value:
type id##_buffer[(1<<size_log2n)]; \
-
struct uel_autoptr id##_pool_buffer[1<<size_log2n]; \
-
void *id##_pool_queue_buffer[1<<size_log2n];
-
-

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.

-
Parameters
- - - - -
typeThe type of the objects the pool will contain
size_log2nThe number of elements the pool will contain in log2 form
idA valid identifier for the pools.
-
-
- -
-
-

Function Documentation

- -

◆ uel_autopool_alloc()

- -
-
- - - - - - - - -
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.

-
See also
uel_autopool_set_constructor()
-
Parameters
- - -
poolThe automatic pool from where to acquire the object
-
-
-
Returns
An autopointer wrapping the acquired object or NULL if one could not be acquired.
- -
-
- -

◆ uel_autopool_init()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void uel_autopool_init (uel_autopool_t * pool,
size_t size_log2n,
size_t item_size,
uint8_t * object_buffer,
struct uel_autoptrautoptr_buffer,
void ** queue_buffer 
)
-
- -

Initialises an automatic pool.

-
Parameters
- - - - - - - -
poolThe pool to be initialised
size_log2nThe number of objects in the pool in its log2 form
item_sizeThe size of each object in the pool. If special alignment is required, it must be included in this value.
object_bufferThe buffer that contains each object in the pool. Must be 2**size_log2n * item_size long.
autoptr_bufferThe buffer that contains each autoptr object to be issued. Must be 2**size_log2n * item_size long.
queue_bufferA void pointer array that will be used as the buffer to the object pointer queue. Must be 2**size_log2n long.
-
-
- -
-
- -

◆ uel_autopool_is_empty()

- -
-
- - - - - - - - -
bool uel_autopool_is_empty (uel_autopool_t * pool)
-
- -

Checks if a pool is depleted.

-
Parameters
- - -
poolThe pool to be verified
-
-
-
Returns
Whether the pool is empty (i.e.: All autoptrs have been given out)
- -
-
- -

◆ uel_autopool_set_constructor()

- -
-
- - - - - - - - - - - - - - - - - - -
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.

-
See also
uel_autoptr_alloc()
-
Parameters
- - - -
poolThe autopool onto which to attach the constructor
constructorThe constructor closure
-
-
- -
-
- -

◆ uel_autopool_set_destructor()

- -
-
- - - - - - - - - - - - - - - - - - -
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.

-
See also
uel_autoptr_dealloc()
-
Parameters
- - - -
poolThe autopool onto which to attach the destructor
destructorThe destructor closure
-
-
- -
-
- -

◆ uel_autoptr_dealloc()

- -
-
- - - - - - - - -
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.

-
See also
uel_autopool_set_destructor()
-
Warning
The object must not be used after it's dealloc'ed.
- -
-
-
-
uel_autoptr
Automatic pointers are pointers wrapped by information of where they were issued.
Definition: automatic-pool.h:26
- - - - 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: include/uevloop/utils/automatic-pool.h Source File - - - - - - - - - -
-
- - - - - - -
-
µEvLoop -
-
A fast and lightweight event loop aimed at embedded platforms in C99.
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
automatic-pool.h
-
-
-Go to the documentation of this file.
1 
-
8 #ifndef UEL_AUTOMATIC_POOL_H
-
9 #define UEL_AUTOMATIC_POOL_H
-
10 
- -
12 #include "uevloop/utils/closure.h"
-
13 
-
14 struct uel_autopool;
-
15 
-
26 struct uel_autoptr {
-
27  void *object;
-
28  struct uel_autopool *source;
-
29 };
-
30 
-
34 typedef void ** uel_autoptr_t;
-
35 
- -
45 
-
50 typedef struct uel_autopool uel_autopool_t;
-
51 struct uel_autopool {
-
52  uel_objpool_t autoptr_pool;
-
53  uel_closure_t constructor;
-
54  uel_closure_t destructor;
-
55 };
-
56 
- -
71  uel_autopool_t *pool,
-
72  size_t size_log2n,
-
73  size_t item_size,
-
74  uint8_t *object_buffer,
-
75  struct uel_autoptr *autoptr_buffer,
-
76  void **queue_buffer
-
77 );
-
78 
-
90 uel_autoptr_t uel_autopool_alloc(uel_autopool_t *pool);
-
91 
-
92 
-
98 bool uel_autopool_is_empty(uel_autopool_t *pool);
-
99 
-
110 void uel_autopool_set_constructor(uel_autopool_t *pool, uel_closure_t constructor);
-
111 
-
122 void uel_autopool_set_destructor(uel_autopool_t *pool, uel_closure_t destructor);
-
123 
-
134 #define UEL_DECLARE_AUTOPOOL_BUFFERS(type, size_log2n, id) \
-
135  type id##_buffer[(1<<size_log2n)]; \
-
136  struct uel_autoptr id##_pool_buffer[1<<size_log2n]; \
-
137  void *id##_pool_queue_buffer[1<<size_log2n];
-
138 
-
146 #define UEL_AUTOPOOL_BUFFERS(id) \
-
147  (uint8_t *)&id##_buffer, id##_pool_buffer, id##_pool_queue_buffer
-
148 
-
159 #define UEL_AUTOPOOL_BUFFERS_IN(id, obj) \
-
160  (uint8_t *)&obj.id##_buffer, obj.id##_pool_buffer, \
-
161  obj.id##_pool_queue_buffer
-
162 
-
173 #define UEL_AUTOPOOL_BUFFERS_AT(id, obj) \
-
174  (uint8_t *)&obj->id##_buffer, obj->id##_pool_buffer, \
-
175  obj->id##_pool_queue_buffer
-
176 
-
177 #endif /* end of include guard: UEL_AUTOMATIC_POOL_H */
-
-
uel_autoptr
Automatic pointers are pointers wrapped by information of where they were issued.
Definition: automatic-pool.h:26
-
uel_autopool_alloc
uel_autoptr_t uel_autopool_alloc(uel_autopool_t *pool)
Allocates an object and wrap it in a automatic pointer.
-
uel_autopool::autoptr_pool
uel_objpool_t autoptr_pool
The object pool that holds autopointers.
Definition: automatic-pool.h:52
-
uel_autoptr_t
void ** uel_autoptr_t
Aliases uel_autoptr_t to void ** so it can be cast to pointers to other types.
Definition: automatic-pool.h:34
-
uel_autopool_init
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.
-
closure.h
Defines closures, objects that bind functions to creating and calling contexts.
-
uel_autoptr::object
void * object
A pointer to the wrapped object.
Definition: automatic-pool.h:27
-
uel_autoptr_dealloc
void uel_autoptr_dealloc(uel_autoptr_t autoptr)
Deallocates an automatic pointer.
-
object-pool.h
Defines object pools, arrays of pre-allocated objects for dynamic use.
-
uel_autopool_set_constructor
void uel_autopool_set_constructor(uel_autopool_t *pool, uel_closure_t constructor)
Sets the constructor closure of an autopool.
-
uel_autoptr::source
struct uel_autopool * source
The pool where the autoptr object was issued.
Definition: automatic-pool.h:28
-
uel_autopool_set_destructor
void uel_autopool_set_destructor(uel_autopool_t *pool, uel_closure_t destructor)
Sets the destructor closure of an autopool.
-
uel_autopool::destructor
uel_closure_t destructor
The destructor closure.
Definition: automatic-pool.h:54
-
uel_autopool
Automatic pools are wrappers to object pools. They manage the acquisition and release cycle from obje...
Definition: automatic-pool.h:51
-
uel_autopool::constructor
uel_closure_t constructor
The constructor closure.
Definition: automatic-pool.h:53
-
uel_autopool_is_empty
bool uel_autopool_is_empty(uel_autopool_t *pool)
Checks if a pool is depleted.
- - - - 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: include/uevloop/utils/circular-queue.h File Reference - - - - - - - - - -
-
- - - - - - -
-
µEvLoop -
-
A fast and lightweight event loop aimed at embedded platforms in C99.
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-Data Structures | -Functions
-
-
circular-queue.h File Reference
-
-
- -

Defines circular queues, fast and efficient FIFO data structures. -More...

-
-This graph shows which files directly or indirectly include this file:
-
-
- - - - - - - - - - - - -
-
-

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...
 
-

Detailed Description

-

Defines circular queues, fast and efficient FIFO data structures.

-

Function Documentation

- -

◆ uel_cqueue_clear()

- -
-
- - - - - - - - - - - - - - - - - - -
void uel_cqueue_clear (uel_cqueue_t * queue,
bool clear_buffer 
)
-
- -

Empties a queue by resetting its tail and count values.

-
Parameters
- - - -
queueThe queue to be cleared.
clear_bufferIf this is set, completely de-initialises the queue.
-
-
- -
-
- -

◆ uel_cqueue_count()

- -
-
- - - - - - - - -
uintptr_t uel_cqueue_count (uel_cqueue_t * queue)
-
- -

Counts the number o elements in the queue.

-
Parameters
- - -
queueThe queue whoese elements should be counted
-
-
-
Returns
The number of enqueued elements
- -
-
- -

◆ uel_cqueue_init()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void uel_cqueue_init (uel_cqueue_t * queue,
void ** buffer,
uintptr_t size_log2n 
)
-
- -

Initialised a circular queue object.

-
Parameters
- - - - -
queueThe queue object to be intialised
bufferAn array of void pointers that will be used to store the enqueued values.
size_log2nThe size of the queue in its log2 form.
-
-
- -
-
- -

◆ uel_cqueue_is_empty()

- -
-
- - - - - - - - -
bool uel_cqueue_is_empty (uel_cqueue_t * queue)
-
- -

Checks if the queue is empty. Use this before popping from the queue.

-
Parameters
- - -
queueThe queue to check
-
-
-
Returns
Whether the queue is empty or not
- -
-
- -

◆ uel_cqueue_is_full()

- -
-
- - - - - - - - -
bool uel_cqueue_is_full (uel_cqueue_t * queue)
-
- -

Checks if the queue is full.

-
Parameters
- - -
queueThe queue to check
-
-
-
Returns
Whether the queue is full or not
- -
-
- -

◆ uel_cqueue_peek_head()

- -
-
- - - - - - - - -
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.

-
Parameters
- - -
queueThe queue to peek
-
-
-
Returns
The newest element in the queue if it exists. Otherwise, NULL.
- -
-
- -

◆ uel_cqueue_peek_tail()

- -
-
- - - - - - - - -
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.

-
Parameters
- - -
queueThe queue to peek
-
-
-
Returns
The oldest element in the queue if it exists. Otherwise, NULL.
- -
-
- -

◆ uel_cqueue_pop()

- -
-
- - - - - - - - -
void* uel_cqueue_pop (uel_cqueue_t * queue)
-
- -

Pops an element from the queue.

-
Parameters
- - -
queueThe queue from where to pop
-
-
-
Returns
The oldest element in the queue, if it exists. Otherwise, NULL.
- -
-
- -

◆ uel_cqueue_push()

- -
-
- - - - - - - - - - - - - - - - - - -
bool uel_cqueue_push (uel_cqueue_t * queue,
void * element 
)
-
- -

Pushes an element into the queue.

-
Parameters
- - - -
queueThe queue into which to push the element
elementThe element to be pushed into the queue
-
-
-
Returns
Whether the push operation was successfull
- -
-
-
- - - - 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: include/uevloop/utils/circular-queue.h Source File - - - - - - - - - -
-
- - - - - - -
-
µEvLoop -
-
A fast and lightweight event loop aimed at embedded platforms in C99.
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
circular-queue.h
-
-
-Go to the documentation of this file.
1 
-
6 #ifndef UEL_CIRCULAR_QUEUE_H
-
7 #define UEL_CIRCULAR_QUEUE_H
-
8 
-
10 #include <stdint.h>
-
11 #include <stdbool.h>
-
13 
-
22 typedef struct uel_cqueue uel_cqueue_t;
-
23 struct uel_cqueue {
-
25  void **buffer;
-
27  uintptr_t size;
-
30  uintptr_t mask;
-
32  uintptr_t tail;
-
35  uintptr_t count;
-
36 };
-
37 
-
45 void uel_cqueue_init(uel_cqueue_t *queue, void **buffer, uintptr_t size_log2n);
-
46 
-
52 void uel_cqueue_clear(uel_cqueue_t *queue, bool clear_buffer);
-
53 
-
60 bool uel_cqueue_push(uel_cqueue_t *queue, void *element);
-
61 
-
67 void *uel_cqueue_pop(uel_cqueue_t *queue);
-
68 
-
75 void *uel_cqueue_peek_tail(uel_cqueue_t *queue);
-
76 
-
83 void *uel_cqueue_peek_head(uel_cqueue_t *queue);
-
84 
-
90 bool uel_cqueue_is_full(uel_cqueue_t *queue);
-
91 
-
97 bool uel_cqueue_is_empty(uel_cqueue_t *queue);
-
98 
-
104 uintptr_t uel_cqueue_count(uel_cqueue_t *queue);
-
105 
-
106 #endif /* UEL_CIRCULAR_QUEUE_H */
-
-
uel_cqueue_count
uintptr_t uel_cqueue_count(uel_cqueue_t *queue)
Counts the number o elements in the queue.
-
uel_cqueue::size
uintptr_t size
The size of the queue. Must be a power of two.
Definition: circular-queue.h:27
-
uel_cqueue_pop
void * uel_cqueue_pop(uel_cqueue_t *queue)
Pops an element from the queue.
-
uel_cqueue_clear
void uel_cqueue_clear(uel_cqueue_t *queue, bool clear_buffer)
Empties a queue by resetting its tail and count values.
-
uel_cqueue
Defines a circular queue of void pointers.
Definition: circular-queue.h:23
-
uel_cqueue::count
uintptr_t count
Definition: circular-queue.h:35
-
uel_cqueue_peek_tail
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 r...
-
uel_cqueue_peek_head
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 enque...
-
uel_cqueue_is_empty
bool uel_cqueue_is_empty(uel_cqueue_t *queue)
Checks if the queue is empty. Use this before popping from the queue.
-
uel_cqueue_init
void uel_cqueue_init(uel_cqueue_t *queue, void **buffer, uintptr_t size_log2n)
Initialised a circular queue object.
-
uel_cqueue::tail
uintptr_t tail
The position that indicates where the oldest enqueued element is.
Definition: circular-queue.h:32
-
uel_cqueue_is_full
bool uel_cqueue_is_full(uel_cqueue_t *queue)
Checks if the queue is full.
-
uel_cqueue::mask
uintptr_t mask
Definition: circular-queue.h:30
-
uel_cqueue::buffer
void ** buffer
The buffer that will contain the enqueued values.
Definition: circular-queue.h:25
-
uel_cqueue_push
bool uel_cqueue_push(uel_cqueue_t *queue, void *element)
Pushes an element into the queue.
- - - - 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: Data Structure Index - - - - - - - - - -
-
- - - - - - -
-
µEvLoop -
-
A fast and lightweight event loop aimed at embedded platforms in C99.
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
-
Data Structure Index
-
-
-
u
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  u  
-
uel_conditional   event   uel_llist_node   uel_promise_store   
uel_cqueue   event::uel_event_detail::uel_event_timer   uel_llist   uel_promise   
uel_application   event::uel_event_detail   uel_evloop   uel_module   uel_scheduler   
uel_autopool   event::uel_event_detail::uel_event_listener   uel_func_mapper   uel_objpool   uel_signal_relay   
uel_autoptr   event::uel_event_detail::uel_event_observer   uel_iterator_array   uel_pipeline   syspools   
uel_closure   event::uel_event_detail::uel_event_signal   uel_iterator   uel_promise_segment   sysqueues   
-
u
-
- - - - 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: include/uevloop/utils/closure.h File Reference - - - - - - - - - -
-
- - - - - - -
-
µEvLoop -
-
A fast and lightweight event loop aimed at embedded platforms in C99.
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-Data Structures | -Typedefs | -Functions
-
-
closure.h File Reference
-
-
- -

Defines closures, objects that bind functions to creating and calling contexts. -More...

-
-This graph shows which files directly or indirectly include this file:
-
-
- - - - - - - - - - - - - - - - - -
-
-

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...
 
-

Detailed Description

-

Defines closures, objects that bind functions to creating and calling contexts.

-

Typedef Documentation

- -

◆ uel_closure_function_t

- -
-
- - - - -
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.

- -
-
-

Function Documentation

- -

◆ uel_closure_create()

- -
-
- - - - - - - - - - - - - - - - - - -
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.

Parameters
- - - -
functionThe function to be run on closure invokation.
contextThe creation context of the closure.
-
-
-
Returns
The closure object, by value.
- -
-
- -

◆ uel_closure_invoke()

- -
-
- - - - - - - - - - - - - - - - - - -
void* uel_closure_invoke (uel_closure_t * closure,
void * params 
)
-
- -

Invokes a closure and returns whatever value it returned.

-
Parameters
- - - -
closureThe closure reference to be invoked.
paramsThe parameters to be passed along during closure invokation.
-
-
-
Returns
This function returns whatever the closure function returned.
- -
-
- -

◆ uel_nop()

- -
-
- - - - - - - -
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.

- -
-
-
- - - - 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: include/uevloop/utils/closure.h Source File - - - - - - - - - -
-
- - - - - - -
-
µEvLoop -
-
A fast and lightweight event loop aimed at embedded platforms in C99.
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
closure.h
-
-
-Go to the documentation of this file.
1 
-
7 #ifndef UEL_CLOSURE_H
-
8 #define UEL_CLOSURE_H
-
9 
-
15 typedef void * (* uel_closure_function_t)(void *context, void *params);
-
16 
-
27 typedef struct uel_closure uel_closure_t;
-
28 struct uel_closure{
- -
35  void *context;
-
36 };
-
37 
-
46 uel_closure_t uel_closure_create(uel_closure_function_t function,void *context);
-
47 
-
54 void *uel_closure_invoke(uel_closure_t *closure, void *params);
-
55 
-
61 uel_closure_t uel_nop();
-
62 
-
63 #endif /* UEL_CLOSURE_H */
-
-
uel_closure
Defines a closure, a tuple <function, context, destructor>
Definition: closure.h:28
-
uel_nop
uel_closure_t uel_nop()
Returns a closure that does nothing.
-
uel_closure_create
uel_closure_t uel_closure_create(uel_closure_function_t function, void *context)
Creates a new closure.
-
uel_closure_invoke
void * uel_closure_invoke(uel_closure_t *closure, void *params)
Invokes a closure and returns whatever value it returned.
-
uel_closure::context
void * context
The context supplied to the closure durint creation. This context will be available during the functi...
Definition: closure.h:35
-
uel_closure_function_t
void *(* uel_closure_function_t)(void *context, void *params)
Defines a closure function, suitable for being bound at a closure.
Definition: closure.h:15
- - - - 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: include/uevloop/utils/conditional.h File Reference - - - - - - - - - -
-
- - - - - - -
-
µEvLoop -
-
A fast and lightweight event loop aimed at embedded platforms in C99.
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-Data Structures | -Functions
-
-
conditional.h File Reference
-
-
- -

Contains definitions of functional conditionals, structures that act as if-else constructs. -More...

-
#include "uevloop/utils/closure.h"
-
-Include dependency graph for conditional.h:
-
-
- - - - -
-
-This graph shows which files directly or indirectly include this file:
-
-
- - - - -
-
-

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...
 
-

Detailed Description

-

Contains definitions of functional conditionals, structures that act as if-else constructs.

-

Function Documentation

- -

◆ uel_conditional_apply()

- -
-
- - - - - - - - - - - - - - - - - - -
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.

-
Parameters
- - - -
conditionalThe conditional to be applied
paramsThe parameter that will be tested and provided to the chosen closure
-
-
-
Returns
Whatever the invoked closure returned
- -
-
- -

◆ uel_conditional_init()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
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.

-
Parameters
- - - - - -
conditionalThe conditional object to be initialised
testThe closure to test the input in order to decide what to do next
if_trueThe closure to be invoked when the test closure returns true
if_falseThe closure to be invoked when the test closure returns false
-
-
- -
-
-
- - - - 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: include/uevloop/utils/conditional.h Source File - - - - - - - - - -
-
- - - - - - -
-
µEvLoop -
-
A fast and lightweight event loop aimed at embedded platforms in C99.
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
conditional.h
-
-
-Go to the documentation of this file.
1 
-
7 #ifndef UEL_CONDITIONAL_H
-
8 #define UEL_CONDITIONAL_H
-
9 
-
10 #include "uevloop/utils/closure.h"
-
11 
-
18 typedef struct uel_conditional uel_conditional_t;
- -
21  uel_closure_t test;
-
23  uel_closure_t if_true;
-
25  uel_closure_t if_false;
-
26 };
-
27 
-
35 void uel_conditional_init(uel_conditional_t *conditional, uel_closure_t test,
-
36  uel_closure_t if_true, uel_closure_t if_false);
-
37 
-
50 void *uel_conditional_apply(uel_conditional_t *conditional, void *params);
-
51 
-
52 #endif /* end of include guard: UEL_CONDITIONAL_H */
-
-
uel_conditional
Conditionals are constructs that provide functional flow control.
Definition: conditional.h:19
-
uel_conditional::if_true
uel_closure_t if_true
The closure that will be invoked if the test closure returns true
Definition: conditional.h:23
-
uel_conditional::if_false
uel_closure_t if_false
The closure that will be invoked if the test closure returns false
Definition: conditional.h:25
-
closure.h
Defines closures, objects that bind functions to creating and calling contexts.
-
uel_conditional::test
uel_closure_t test
A closure that, based on its input, should return true or false.
Definition: conditional.h:21
-
uel_conditional_apply
void * uel_conditional_apply(uel_conditional_t *conditional, void *params)
Applies a conditional do some input.
-
uel_conditional_init
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.
- - - - 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: include/uevloop/config.h File Reference - - - - - - - - - -
-
- - - - - - -
-
µEvLoop -
-
A fast and lightweight event loop aimed at embedded platforms in C99.
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-Macros
-
-
config.h File Reference
-
-
- -

Central repository of system configuration. This is meant to be edited by the programmer as needed. -More...

-
-This graph shows which files directly or indirectly include this file:
-
-
- - - - - - - - - - -
-
-

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.
 
-

Detailed Description

-

Central repository of system configuration. This is meant to be edited by the programmer as needed.

-
- - - - 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: include/uevloop/config.h Source File - - - - - - - - - -
-
- - - - - - -
-
µEvLoop -
-
A fast and lightweight event loop aimed at embedded platforms in C99.
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
config.h
-
-
-Go to the documentation of this file.
1 
-
7 #ifndef UEL_CONFIG_H
-
8 #define UEL_CONFIG_H
-
9 
-
10 /* UEL_SYSPOOLS MODULE CONFIGURATION */
-
11 
-
12 #ifndef UEL_SYSPOOLS_EVENT_POOL_SIZE_LOG2N
-
13 #define UEL_SYSPOOLS_EVENT_POOL_SIZE_LOG2N (7)
-
15 #endif /* UEL_SYSPOOLS_EVENT_POOL_SIZE_LOG2N */
-
16 
-
17 #ifndef UEL_SYSPOOLS_LLIST_NODE_POOL_SIZE_LOG2N
-
18 #define UEL_SYSPOOLS_LLIST_NODE_POOL_SIZE_LOG2N (7)
-
20 #endif /* UEL_SYSPOOLS_LLIST_NODE_POOL_SIZE_LOG2N */
-
21 
-
22 
-
23 /* UEL_SYSQUEUES MODULE CONFIGURATION */
-
24 
-
25 #ifndef UEL_SYSQUEUES_EVENT_QUEUE_SIZE_LOG2N
-
26 #define UEL_SYSQUEUES_EVENT_QUEUE_SIZE_LOG2N (5)
-
28 #endif /* UEL_SYSQUEUES_EVENT_QUEUE_SIZE_LOG2N */
-
29 
-
30 #ifndef UEL_SYSQUEUES_SCHEDULE_QUEUE_SIZE_LOG2N
-
31 #define UEL_SYSQUEUES_SCHEDULE_QUEUE_SIZE_LOG2N (4)
-
33 #endif /* UEL_SYSQUEUES_SCHEDULE_QUEUE_SIZE_LOG2N */
-
34 
-
35 
-
36 /* SIGNAL MODULE CONFIGURATION */
-
37 
-
38 #ifndef UEL_SIGNAL_MAX_LISTENERS
-
39 #define UEL_SIGNAL_MAX_LISTENERS (5)
-
42 #endif /* UEL_SIGNAL_MAX_LISTENERS */
-
43 
-
44 /* PROMISE MODULE CONFIGURATION */
-
45 
-
47 #define UEL_PROMISE_SHORTCUTS
-
48 
-
49 #endif /* end of include guard: UEL_CONFIG_H */
-
- - - - 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: include/uevloop/portability/critical-section.h File Reference - - - - - - - - - -
-
- - - - - - -
-
µEvLoop -
-
A fast and lightweight event loop aimed at embedded platforms in C99.
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-Macros
-
-
critical-section.h File Reference
-
-
- -

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...
 
-

Detailed Description

-

Contains macros for delimitating critical sections.

-

Macro Definition Documentation

- -

◆ UEL_CRITICAL_ENTER

- -
-
- - - - -
#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.

- -
-
- -

◆ UEL_CRITICAL_EXIT

- -
-
- - - - -
#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.

- -
-
-
- - - - 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: include/uevloop/portability/critical-section.h Source File - - - - - - - - - -
-
- - - - - - -
-
µEvLoop -
-
A fast and lightweight event loop aimed at embedded platforms in C99.
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
critical-section.h
-
-
-Go to the documentation of this file.
1 
-
5 #ifndef CRITICAL_SECTION_H
-
6 #define CRITICAL_SECTION_H
-
7 
-
8 #ifndef UEL_CRITICAL_ENTER
-
9 
-
14 #define UEL_CRITICAL_ENTER
-
15 #endif /* UEL_CRITICAL_ENTER */
-
16 
-
17 #ifndef UEL_CRITICAL_EXIT
-
18 
-
23 #define UEL_CRITICAL_EXIT
-
24 #endif /* UEL_CRITICAL_EXIT */
-
25 
-
26 #ifdef UEL_CRITICAL_SECTION_OBJ_TYPE
-
27 
-
38 extern UEL_CRITICAL_SECTION_OBJ_TYPE uel_critical_section;
-
39 #endif /* UEL_CRITICAL_SECTION_OBJ_TYPE */
-
40 
-
41 #endif /* end of include guard: CRITICAL_SECTION_H */
-
- - - - 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: include/uevloop/system -> containers Relation - - - - - - - - - -
-
- - - - - - -
-
µEvLoop -
-
A fast and lightweight event loop aimed at embedded platforms in C99.
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-

system → containers Relation

File in include/uevloop/systemIncludes file in include/uevloop/system/containers
event-loop.hsystem-pools.h
event-loop.hsystem-queues.h
scheduler.hsystem-pools.h
scheduler.hsystem-queues.h
signal.hsystem-pools.h
signal.hsystem-queues.h
- - - - 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: include/uevloop/system -> utils Relation - - - - - - - - - -
-
- - - - - - -
-
µEvLoop -
-
A fast and lightweight event loop aimed at embedded platforms in C99.
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-

system → utils Relation

File in include/uevloop/systemIncludes file in include/uevloop/utils
containers / application.hmodule.h
event-loop.hclosure.h
event-loop.hlinked-list.h
event.hclosure.h
event.hlinked-list.h
scheduler.hclosure.h
scheduler.hlinked-list.h
signal.hclosure.h
signal.hlinked-list.h
signal.hpromise.h
containers / system-pools.hlinked-list.h
containers / system-pools.hobject-pool.h
containers / system-queues.hcircular-queue.h
- - - - 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: include/uevloop/system/containers -> utils Relation - - - - - - - - - -
-
- - - - - - -
-
µEvLoop -
-
A fast and lightweight event loop aimed at embedded platforms in C99.
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-

containers → utils Relation

File in include/uevloop/system/containersIncludes file in include/uevloop/utils
application.hmodule.h
system-pools.hlinked-list.h
system-pools.hobject-pool.h
system-queues.hcircular-queue.h
- - - - 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: include/uevloop/system/containers Directory Reference - - - - - - - - - -
-
- - - - - - -
-
µEvLoop -
-
A fast and lightweight event loop aimed at embedded platforms in C99.
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
containers Directory Reference
-
-
-
-Directory dependency graph for containers:
-
-
include/uevloop/system/containers
- - - - - - -
- - - - - - - - - - - -

-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.
 
-
- - - - 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: include/uevloop/utils Directory Reference - - - - - - - - - -
-
- - - - - - -
-
µEvLoop -
-
A fast and lightweight event loop aimed at embedded platforms in C99.
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
utils Directory Reference
-
-
-
-Directory dependency graph for utils:
-
-
include/uevloop/utils
- - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-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.
 
-
- - - - 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: include/uevloop/portability Directory Reference - - - - - - - - - -
-
- - - - - - -
-
µEvLoop -
-
A fast and lightweight event loop aimed at embedded platforms in C99.
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
portability Directory Reference
-
-
- - - - - -

-Files

file  critical-section.h [code]
 Contains macros for delimitating critical sections.
 
-
- - - - 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: include/uevloop/system Directory Reference - - - - - - - - - -
-
- - - - - - -
-
µEvLoop -
-
A fast and lightweight event loop aimed at embedded platforms in C99.
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
system Directory Reference
-
-
-
-Directory dependency graph for system:
-
-
include/uevloop/system
- - - - - - - - -
- - -

-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.
 
-
- - - - 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: include/uevloop Directory Reference - - - - - - - - - -
-
- - - - - - -
-
µEvLoop -
-
A fast and lightweight event loop aimed at embedded platforms in C99.
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
uevloop Directory Reference
-
-
-
-Directory dependency graph for uevloop:
-
-
include/uevloop
- - - - - - - - -
- - -

-Directories

- - - - -

-Files

file  config.h [code]
 Central repository of system configuration. This is meant to be edited by the programmer as needed.
 
-
- - - - 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: include Directory Reference - - - - - - - - - -
-
- - - - - - -
-
µEvLoop -
-
A fast and lightweight event loop aimed at embedded platforms in C99.
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
include Directory Reference
-
-
-
-Directory dependency graph for include:
-
-
include
- - - - -
- - -

-Directories

-
- - - - 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: include/uevloop/system/event-loop.h File Reference - - - - - - - - - -
-
- - - - - - -
-
µEvLoop -
-
A fast and lightweight event loop aimed at embedded platforms in C99.
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
event-loop.h File Reference
-
-
- -

Module responsible for running enqueued events and process them accordingly. -More...

-
-Include dependency graph for event-loop.h:
-
-
- - - - - - - - - - - -
-
-This graph shows which files directly or indirectly include this file:
-
-
- - - - -
-
-

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...
 
-

Detailed Description

-

Module responsible for running enqueued events and process them accordingly.

-

Function Documentation

- -

◆ uel_evloop_enqueue_closure()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void uel_evloop_enqueue_closure (uel_evloop_t * event_loop,
uel_closure_t * closure,
void * value 
)
-
- -

Enqueues a closure to be invoked.

-
Parameters
- - - - -
event_loopThe uel_evloop_t instance into which the closure will be enqueued
closureThe closure to be enqueued
valueThe value to invoked the closure with
-
-
- -
-
- -

◆ uel_evloop_init()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void uel_evloop_init (uel_evloop_t * event_loop,
uel_syspools_t * pools,
uel_sysqueues_t * queues 
)
-
- -

Initialises an event loop.

-
Parameters
- - - - -
event_loopThe uel_evloop_t instance to be initialised
poolsThe system's internal pools
queuesThe system's internal queues
-
-
- -
-
- -

◆ uel_evloop_observe()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
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.

-
Parameters
- - - - -
event_loopThe event loop where to register this observer
condition_varThe address of some data that should be observed
closureThe closure to be invoked when the observed value changes
-
-
-
Returns
The observer event representing this observation operation
- -
-
- -

◆ uel_evloop_observe_once()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
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.

-
Parameters
- - - - -
event_loopThe event loop where to register this observer
condition_varThe address of some data that should be observed
closureThe closure to be invoked when the observed value changes
-
-
-
Returns
The observer event representing this observation operation
- -
-
- -

◆ uel_evloop_run()

- -
-
- - - - - - - - -
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.

-
Parameters
- - -
event_loopThe uel_evloop_t instance to be run
-
-
- -
-
-
- - - - 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: include/uevloop/system/event-loop.h Source File - - - - - - - - - -
-
- - - - - - -
-
µEvLoop -
-
A fast and lightweight event loop aimed at embedded platforms in C99.
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
event-loop.h
-
-
-Go to the documentation of this file.
1 
-
5 #ifndef UEL_EVENT_LOOP_H
-
6 #define UEL_EVENT_LOOP_H
-
7 
- - - - -
12 
-
20 typedef struct uel_evloop uel_evloop_t;
-
21 struct uel_evloop{
-
22  uel_syspools_t *pools;
-
23  uel_sysqueues_t *queues;
-
24  uel_llist_t observers;
-
25 };
-
26 
-
33 void uel_evloop_init(
-
34  uel_evloop_t *event_loop,
-
35  uel_syspools_t *pools,
-
36  uel_sysqueues_t *queues
-
37 );
-
38 
-
49 void uel_evloop_run(uel_evloop_t *event_loop);
-
50 
- -
58  uel_evloop_t *event_loop,
-
59  uel_closure_t *closure,
-
60  void *value
-
61 );
-
62 
-
71 uel_event_t *uel_evloop_observe(
-
72  uel_evloop_t *event_loop,
-
73  volatile uintptr_t *condition_var,
-
74  uel_closure_t *closure
-
75 );
-
76 
-
86 uel_event_t *uel_evloop_observe_once(
-
87  uel_evloop_t *event_loop,
-
88  volatile uintptr_t *condition_var,
-
89  uel_closure_t *closure
-
90 );
-
91 
-
92 #endif /* end of include guard: UEL_EVENT_LOOP_H */
-
-
Defines a simple implementation of linked lists and functions to manipulate it.
-
void uel_evloop_run(uel_evloop_t *event_loop)
Triggers a runloop.
-
void uel_evloop_init(uel_evloop_t *event_loop, uel_syspools_t *pools, uel_sysqueues_t *queues)
Initialises an event loop.
-
uel_syspools_t * pools
Reference to the system's pools.
Definition: event-loop.h:22
-
Defines closures, objects that bind functions to creating and calling contexts.
-
uel_sysqueues_t * queues
Reference to the system's queues.
Definition: event-loop.h:23
-
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.
-
uel_llist_t observers
Stores references to values to be observed.
Definition: event-loop.h:24
-
void uel_evloop_enqueue_closure(uel_evloop_t *event_loop, uel_closure_t *closure, void *value)
Enqueues a closure to be invoked.
-
The event loop object.
Definition: event-loop.h:21
-
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.
-
A container for the system's internal queues.
-
A container for the system's internal pools.
- - - - 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: include/uevloop/system/event.h File Reference - - - - - - - - - -
-
- - - - - - -
-
µEvLoop -
-
A fast and lightweight event loop aimed at embedded platforms in C99.
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
event.h File Reference
-
-
- -

Defines events and methods to configure events. -More...

-
-Include dependency graph for event.h:
-
-
- - - - - -
-
-This graph shows which files directly or indirectly include this file:
-
-
- - - - - - - - - -
-
-

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...
 
-

Detailed Description

-

Defines events and methods to configure events.

-

Function Documentation

- -

◆ uel_event_config_closure()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void uel_event_config_closure (uel_event_t * event,
uel_closure_t * closure,
void * value,
bool repeating 
)
-
- -

Configures a closure event.

-
Parameters
- - - - - -
eventThe event to be configured
closureThe closure to be invoked when the event is run
valueThe value to supply to the closure as parameters when it is invoked
repeatingIntructs the system whether should this event be disposed of after processing
-
-
- -
-
- -

◆ uel_event_config_observer()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void uel_event_config_observer (uel_event_t * event,
uel_closure_t * closure,
volatile uintptr_t * condition_var,
bool repeating 
)
-
- -

Configures an observer event.

-
Parameters
- - - - - -
eventThe event to be configured
closureThe closure to be invoked when the observed value changes
condition_varThe address of a volatile variable to be observed
repeatingIntructs the system whether should this event be disposed of after processing
-
-
- -
-
- -

◆ uel_event_config_signal()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void uel_event_config_signal (uel_event_t * event,
uintptr_t signal,
uel_llist_t * listeners,
void * params 
)
-
- -

Configures a signal event.

-
Parameters
- - - - - -
eventThe event to be configured
signalThe integer value that identifies this signal
listenersThe listeners associated to this signal
paramsThe parameters associated with this signal emission
-
-
- -
-
- -

◆ uel_event_config_signal_listener()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void uel_event_config_signal_listener (uel_event_t * event,
uel_closure_t * closure,
bool repeating 
)
-
- -

Configures a signal listener event.

-
Parameters
- - - - -
eventThe event to be configured
closureThe closure to be invoked when the event is run
repeatingIntructs the system whether should this event be disposed of after processing
-
-
- -
-
- -

◆ uel_event_config_timer()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
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.

-
Parameters
- - - - - - - - -
eventThe event to be configured
timeout_in_msThe delay to process this event. If the event is repeating, this defines the interval between successive executions.
repeatingIf this flag is set, the event will not be destroyed after execution. Instead it will be put on the schedule queue.
immediateIf this flag is set, a recurring timer will be immediately enqueued for processing. One-shot timers will ignore this setting.
closureThe closure to be invoked when the timer expires
valueThe value to supply to the closure as parameters when it is invoked
current_timeThe current value set in the system counter.
-
-
- -
-
- -

◆ uel_event_observer_cancel()

- -
-
- - - - - - - - -
void uel_event_observer_cancel (uel_event_t * event)
-
- -

Cancels an observer.

-
Parameters
- - -
eventThe observer event to be cancelled
-
-
- -
-
- -

◆ uel_event_timer_cancel()

- -
-
- - - - - - - - -
void uel_event_timer_cancel (uel_event_t * event)
-
- -

Cancels a timer event.

-
Parameters
- - -
eventThe timer event to be cancelled
-
-
- -
-
- -

◆ uel_event_timer_pause()

- -
-
- - - - - - - - -
void uel_event_timer_pause (uel_event_t * event)
-
- -

Pauses a timer event.

-
Parameters
- - -
eventThe timer event to be paused
-
-
- -
-
- -

◆ uel_event_timer_resume()

- -
-
- - - - - - - - -
void uel_event_timer_resume (uel_event_t * event)
-
- -

Resumes a paused timer event.

-
Parameters
- - -
eventThe timer event to be resumed
-
-
- -
-
-
- - - - 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: include/uevloop/system/event.h Source File - - - - - - - - - -
-
- - - - - - -
-
µEvLoop -
-
A fast and lightweight event loop aimed at embedded platforms in C99.
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
event.h
-
-
-Go to the documentation of this file.
1 
-
5 #ifndef UEL_EVENT_H
-
6 #define UEL_EVENT_H
-
7 
-
9 #include <stdint.h>
-
10 #include <stdbool.h>
-
12 
-
13 #include "uevloop/utils/closure.h"
- -
15 
- -
18  UEL_CLOSURE_EVENT,
-
19  UEL_TIMER_EVENT,
-
20  UEL_SIGNAL_EVENT,
-
21  UEL_SIGNAL_LISTENER_EVENT,
-
22  UEL_OBSERVER_EVENT
-
23 };
- -
26 
-
27 
- -
30  UEL_TIMER_RUNNING,
-
31  UEL_TIMER_PAUSED,
-
32  UEL_TIMER_CANCELLED
-
33 };
- -
36 
-
37 
-
57 typedef struct event uel_event_t;
-
58 struct event {
- -
60  uel_closure_t closure;
-
61  void *value;
-
62  bool repeating;
-
63 
- -
67 
-
69  struct uel_event_timer {
-
73  uint32_t due_time;
-
74  uint16_t timeout;
- -
76  } timer;
-
77 
- -
80  uintptr_t value;
-
81  uel_llist_t *listeners;
-
82  } signal;
-
83 
- -
89  bool unlistened;
-
90  } listener;
-
91 
- -
94  volatile uintptr_t *condition_var;
-
95  uintptr_t last_value;
-
96  bool cancelled;
-
98  } observer;
-
99  } detail;
-
100 };
-
101 
- -
111  uel_event_t *event,
-
112  uel_closure_t *closure,
-
113  void *value,
-
114  bool repeating
-
115 );
-
116 
- -
125  uel_event_t *event,
-
126  uintptr_t signal,
-
127  uel_llist_t *listeners,
-
128  void *params
-
129 );
-
130 
-
138 void uel_event_config_signal_listener(uel_event_t *event, uel_closure_t *closure, bool repeating);
-
139 
- -
149  uel_event_t *event,
-
150  uel_closure_t *closure,
-
151  volatile uintptr_t *condition_var,
-
152  bool repeating
-
153 );
-
154 
-
159 void uel_event_observer_cancel(uel_event_t *event);
-
160 
- -
174  uel_event_t *event,
-
175  uint16_t timeout_in_ms,
-
176  bool repeating,
-
177  bool immediate,
-
178  uel_closure_t *closure,
-
179  void *value,
-
180  uint32_t current_time
-
181 );
-
182 
-
187 void uel_event_timer_pause(uel_event_t *event);
-
188 
-
193 void uel_event_timer_resume(uel_event_t *event);
-
194 
-
199 void uel_event_timer_cancel(uel_event_t *event);
-
200 
-
201 #endif /* UEL_EVENT_H */
-
-
Defines a simple implementation of linked lists and functions to manipulate it.
-
uel_llist_t * listeners
Reference to the signal listeners.
Definition: event.h:81
-
uintptr_t value
The integer value that identifies this signal.
Definition: event.h:80
-
void * value
The value the closure should be invoked with.
Definition: event.h:61
-
bool unlistened
Definition: event.h:89
-
uintptr_t last_value
Definition: event.h:95
-
Defines closures, objects that bind functions to creating and calling contexts.
-
void uel_event_timer_pause(uel_event_t *event)
Pauses a timer event.
-
Events are special messages passed around the core. They represent tasks to be run at some point by t...
Definition: event.h:58
-
uel_event_type_t type
The type of the event, as defined by uel_event_type_t
Definition: event.h:59
-
struct event::uel_event_detail::uel_event_signal signal
The emission information of this event. Relevant only for signals.
-
enum uel_event_timer_status uel_event_timer_status_t
Alias to the uel_event_timer_status.
Definition: event.h:35
-
void uel_event_timer_cancel(uel_event_t *event)
Cancels a timer event.
-
volatile uintptr_t * condition_var
The address of a volatile value to observe.
Definition: event.h:94
-
union event::uel_event_detail detail
Represents speciffic detail on a event depending on its type.
-
enum uel_event_type uel_event_type_t
Alias to the uel_event_type enum.
Definition: event.h:25
-
Contains the context of a particular signal listener.
Definition: event.h:85
-
void uel_event_observer_cancel(uel_event_t *event)
Cancels an observer.
-
void uel_event_config_signal(uel_event_t *event, uintptr_t signal, uel_llist_t *listeners, void *params)
Configures a signal event.
-
Definition: event.h:66
-
struct event::uel_event_detail::uel_event_listener listener
The listening information of this event. Relevant only for signal listeners.
-
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.
-
void uel_event_config_observer(uel_event_t *event, uel_closure_t *closure, volatile uintptr_t *condition_var, bool repeating)
Configures an observer event.
-
uint32_t due_time
The value the system timer must be at when this event's closure should be invoked....
Definition: event.h:73
-
uel_event_timer_status_t status
Current timer status.
Definition: event.h:75
-
bool repeating
Marks whether the event should be discarded after processing.
Definition: event.h:62
-
Contains information related to an emitted signal.
Definition: event.h:79
-
Contains information suitable for scheduling an event at the scheduler.
Definition: event.h:69
-
bool cancelled
Whether this observer has been cancelled and is awaiting for destruction.
Definition: event.h:97
-
struct event::uel_event_detail::uel_event_timer timer
The scheduling information of this event. Relevant only for timers.
-
void uel_event_timer_resume(uel_event_t *event)
Resumes a paused timer event.
-
void uel_event_config_closure(uel_event_t *event, uel_closure_t *closure, void *value, bool repeating)
Configures a closure event.
-
uel_event_type
Possible types of events understood by the core.
Definition: event.h:17
-
Contains the reference to an observer variable.
Definition: event.h:93
-
uel_closure_t closure
The closure to be invoked a.k.a. the action to be run.
Definition: event.h:60
-
struct event::uel_event_detail::uel_event_observer observer
The observing information of this event. Relevant only for observers.
-
uel_event_timer_status
Possible statuses for a timer event.
Definition: event.h:29
-
void uel_event_config_signal_listener(uel_event_t *event, uel_closure_t *closure, bool repeating)
Configures a signal listener event.
-
uint16_t timeout
Holds the interval between two executions of the timer.
Definition: event.h:74
- - - - 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: File List - - - - - - - - - -
-
- - - - - - -
-
µEvLoop -
-
A fast and lightweight event loop aimed at embedded platforms in C99.
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
-
File List
-
-
-
Here is a list of all documented files with brief descriptions:
-
[detail level 12345]
- - - - - - - - - - - - - - - - - - - - - - - - - - -
  include
  uevloop
  portability
 critical-section.hContains macros for delimitating critical sections
  system
  containers
 application.hThe application module is a convenient top-level container for the system internals
 system-pools.hA container for the system's internal pools
 system-queues.hA container for the system's internal queues
 event-loop.hModule responsible for running enqueued events and process them accordingly
 event.hDefines events and methods to configure events
 scheduler.hModule responsible for keeping track of time and tasks to be run in the future
 signal.hDefines signals and relays, structures used to communicate asynchronously between distant parts of the application
  utils
 automatic-pool.hDefines automatic pointers and automatic pools, objects that wrap object pools and objects managed by them. These wrappers provide basic automatic memory management
 circular-queue.hDefines circular queues, fast and efficient FIFO data structures
 closure.hDefines closures, objects that bind functions to creating and calling contexts
 conditional.hContains definitions of functional conditionals, structures that act as if-else constructs
 functional.hContains helpers for composing and augumenting closures
 iterator.hDefines iterators, structures and functions suitable for enumerating other data structures
 linked-list.hDefines a simple implementation of linked lists and functions to manipulate it
 module.h
 object-pool.hDefines object pools, arrays of pre-allocated objects for dynamic use
 pipeline.hDefines pipelines, structures to hold many closures and functions to invoke them sequentially, composing their functionality
 promise.hContains definitions for promise stores, promises and functions to manipulate them
 config.hCentral repository of system configuration. This is meant to be edited by the programmer as needed
-
-
- - - - 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: include/uevloop/utils/functional.h File Reference - - - - - - - - - -
-
- - - - - - -
-
µEvLoop -
-
A fast and lightweight event loop aimed at embedded platforms in C99.
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
functional.h File Reference
-
-
- -

Contains helpers for composing and augumenting closures. -More...

-
-Include dependency graph for functional.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...
 
-

Detailed Description

-

Contains helpers for composing and augumenting closures.

-

Function Documentation

- -

◆ uel_func_all()

- -
-
- - - - - - - - -
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.

-
Parameters
- - -
closureThe test to be applied against each enumerated element
-
-
-
Returns
Whether all elements pass the supplied test closure.
- -
-
- -

◆ uel_func_any()

- -
-
- - - - - - - - -
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.

-
Parameters
- - -
closureThe test to be applied against each enumerated element
-
-
-
Returns
Whether any elements pass the supplied test closure.
- -
-
- -

◆ uel_func_conditional()

- -
-
- - - - - - - - -
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.

-
Parameters
- - -
conditionalThe conditional to be wrapped
-
-
-
Returns
A closure that, when invoked, will apply the supplied conditional
- -
-
- -

◆ uel_func_count()

- -
-
- - - - - - - - -
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.

-
Parameters
- - -
closureThe test to be applied against each enumerated element
-
-
-
Returns
The number of elements that passed the supplied test closure.
- -
-
- -

◆ uel_func_find()

- -
-
- - - - - - - - -
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.

-
Parameters
- - -
closureThe test to be applied against each enumerated element
-
-
-
Returns
The address of the first element that passes the supplied test. If no such element is found, returns NULL.
- -
-
- -

◆ uel_func_foreach()

- -
-
- - - - - - - - -
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.

-

See uel_iterator_foreach().

-
Parameters
- - -
closureA reference to the closure to be wrapped
-
-
- -
-
- -

◆ uel_func_map()

- -
-
- - - - - - - - -
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().

-
Parameters
- - -
closureA reference to the closure to be wrapped
-
-
- -
-
- -

◆ uel_func_mapper_init()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void uel_func_mapper_init (uel_func_mapper_t * mapper,
uel_iterator_t * iterator,
void ** destination,
size_t limit 
)
-
- -

Initialises a mapper object.

-
Parameters
- - - - - -
mapperThe mapper instance to be initialised
iteratorThe iterator responsible for enumerating elements
destinationAn array of void pointers to where elements will be mapped
limitThe maximum size of elements that can be mapped
-
-
- -
-
- -

◆ uel_func_none()

- -
-
- - - - - - - - -
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.

-
Parameters
- - -
closureThe test to be applied against each enumerated element
-
-
-
Returns
Whether all elements are reproved in the supplied test closure.
- -
-
- -

◆ uel_func_pipeline()

- -
-
- - - - - - - - -
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.

-
Parameters
- - -
pipelineThe pipeline to be wrapped
-
-
-
Returns
A closure that, when invoked, will apply the supplied pipeline
- -
-
-
- - - - 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: include/uevloop/utils/functional.h Source File - - - - - - - - - -
-
- - - - - - -
-
µEvLoop -
-
A fast and lightweight event loop aimed at embedded platforms in C99.
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
functional.h
-
-
-Go to the documentation of this file.
1 
-
6 #ifndef UEL_FUNCTIONAL_H
-
7 #define UEL_FUNCTIONAL_H
-
8 
-
10 #include <stdlib.h>
-
12 
-
13 #include "uevloop/utils/closure.h"
-
14 #include "uevloop/utils/pipeline.h"
- -
16 #include "uevloop/utils/iterator.h"
-
17 
-
21 typedef struct uel_func_mapper uel_func_mapper_t;
- -
24  uel_iterator_t *iterator;
-
26  void **destination;
-
28  size_t limit;
-
29 };
-
30 
-
38 void uel_func_mapper_init(uel_func_mapper_t *mapper, uel_iterator_t *iterator,
-
39  void **destination, size_t limit);
-
40 
-
50 uel_closure_t uel_func_pipeline(uel_pipeline_t *pipeline);
-
51 
-
61 uel_closure_t uel_func_conditional(uel_conditional_t *conditional);
-
62 
-
73 uel_closure_t uel_func_foreach(uel_closure_t *closure);
-
74 
-
89 uel_closure_t uel_func_map(uel_closure_t *closure);
-
90 
-
104 uel_closure_t uel_func_find(uel_closure_t *closure);
-
105 
-
118 uel_closure_t uel_func_count(uel_closure_t *closure);
-
119 
-
132 uel_closure_t uel_func_all(uel_closure_t *closure);
-
133 
-
146 uel_closure_t uel_func_none(uel_closure_t *closure);
-
147 
-
160 uel_closure_t uel_func_any(uel_closure_t *closure);
-
161 
-
162 #endif /* end of include guard: UEL_FUNCTIONAL_H */
-
-
uel_closure_t uel_func_find(uel_closure_t *closure)
Wraps a closure in a find construct.
-
Defines pipelines, structures to hold many closures and functions to invoke them sequentially,...
-
Maps elements of an iterator to an area of memory. Each element is assigned to a void pointer slot.
Definition: functional.h:22
-
uel_closure_t uel_func_none(uel_closure_t *closure)
Wraps a closure in a none construct.
-
Defines closures, objects that bind functions to creating and calling contexts.
-
uel_closure_t uel_func_count(uel_closure_t *closure)
Wraps a closure in a count construct.
-
uel_closure_t uel_func_foreach(uel_closure_t *closure)
Wraps a closure in a foreach construct.
-
uel_closure_t uel_func_pipeline(uel_pipeline_t *pipeline)
Wraps a pipeline in a closure.
-
uel_iterator_t * iterator
The iterator that enumerates the elements to be mapped.
Definition: functional.h:24
-
Defines iterators, structures and functions suitable for enumerating other data structures.
-
uel_closure_t uel_func_any(uel_closure_t *closure)
Wraps a closure in a all construct.
-
uel_closure_t uel_func_conditional(uel_conditional_t *conditional)
Wraps a conditional in a closure.
-
uel_closure_t uel_func_map(uel_closure_t *closure)
Wraps a closure in a map construct.
-
uel_closure_t uel_func_all(uel_closure_t *closure)
Wraps a closure in a all construct.
-
void ** destination
The area of memory to where elements will be mapped.
Definition: functional.h:26
-
size_t limit
The maximum size of slots to be mapped to.
Definition: functional.h:28
-
void uel_func_mapper_init(uel_func_mapper_t *mapper, uel_iterator_t *iterator, void **destination, size_t limit)
Initialises a mapper object.
-
Contains definitions of functional conditionals, structures that act as if-else constructs.
- - - - 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: Data Fields - - - - - - - - - -
-
- - - - - - -
-
µEvLoop -
-
A fast and lightweight event loop aimed at embedded platforms in C99.
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
Here is a list of all documented struct and union fields with links to the struct/union documentation for each field:
- -

- a -

- - -

- b -

- - -

- c -

- - -

- d -

- - -

- e -

- - -

- f -

- - -

- h -

- - -

- i -

- - -

- l -

- - -

- m -

- - -

- n -

- - -

- o -

- - -

- p -

- - -

- q -

- - -

- r -

- - -

- s -

- - -

- t -

- - -

- u -

- - -

- v -

- - -

- w -

-
- - - - 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: Data Fields - Variables - - - - - - - - - -
-
- - - - - - -
-
µEvLoop -
-
A fast and lightweight event loop aimed at embedded platforms in C99.
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-  - -

- a -

- - -

- b -

- - -

- c -

- - -

- d -

- - -

- e -

- - -

- f -

- - -

- h -

- - -

- i -

- - -

- l -

- - -

- m -

- - -

- n -

- - -

- o -

- - -

- p -

- - -

- q -

- - -

- r -

- - -

- s -

- - -

- t -

- - -

- u -

- - -

- v -

- - -

- w -

-
- - - - 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: Globals - - - - - - - - - -
-
- - - - - - -
-
µEvLoop -
-
A fast and lightweight event loop aimed at embedded platforms in C99.
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:
- -

- u -

-
- - - - 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: Globals - - - - - - - - - -
-
- - - - - - -
-
µEvLoop -
-
A fast and lightweight event loop aimed at embedded platforms in C99.
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
- - - - 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: Globals - - - - - - - - - -
-
- - - - - - -
-
µEvLoop -
-
A fast and lightweight event loop aimed at embedded platforms in C99.
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
- - - - 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: Globals - - - - - - - - - -
-
- - - - - - -
-
µEvLoop -
-
A fast and lightweight event loop aimed at embedded platforms in C99.
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
- - - - 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: Globals - - - - - - - - - -
-
- - - - - - -
-
µEvLoop -
-
A fast and lightweight event loop aimed at embedded platforms in C99.
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-  - -

- u -

-
- - - - 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: Globals - - - - - - - - - -
-
- - - - - - -
-
µEvLoop -
-
A fast and lightweight event loop aimed at embedded platforms in C99.
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
- - - - 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: Graph Legend - - - - - - - - - -
-
- - - - - - -
-
µEvLoop -
-
A fast and lightweight event loop aimed at embedded platforms in C99.
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
-
Graph Legend
-
-
-

This page explains how to interpret the graphs that are generated by doxygen.

-

Consider the following example:

/*! Invisible class because of truncation */
-
class Invisible { };
-
-
/*! Truncated class, inheritance relation is hidden */
-
class Truncated : public Invisible { };
-
-
/* Class not documented with doxygen comments */
-
class Undocumented { };
-
-
/*! Class that is inherited using public inheritance */
-
class PublicBase : public Truncated { };
-
-
/*! A template class */
-
template<class T> class Templ { };
-
-
/*! Class that is inherited using protected inheritance */
-
class ProtectedBase { };
-
-
/*! Class that is inherited using private inheritance */
-
class PrivateBase { };
-
-
/*! Class that is used by the Inherited class */
-
class Used { };
-
-
/*! Super class that inherits a number of other classes */
-
class Inherited : public PublicBase,
-
protected ProtectedBase,
-
private PrivateBase,
-
public Undocumented,
-
public Templ<int>
-
{
-
private:
-
Used *m_usedClass;
-
};
-

This will result in the following graph:

-

The boxes in the above graph have the following meaning:

- -

The arrows have the following meaning:

- -
- - - - 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: µEvLoop <img src="https://github.com/andsmedeiros/uevloop/workflows/C/C++%20CI/badge.svg?event=push" alt="C/C++ CI"/> - - - - - - - - - -
-
- - - - - - -
-
µEvLoop -
-
A fast and lightweight event loop aimed at embedded platforms in C99.
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
-
µEvLoop C/C++ CI
-
-
-

A fast and lightweight event loop aimed at embedded platforms in C99.

- -

About

-

µ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.

-

*DISCLAIMER*

-

µ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.

-

Highlights

-
    -
  • As minimalist and loose-coupled as possible.
  • -
  • Does not allocate any dynamic memory on its own. All memory needed is statically allocated either explicitly by the user or implicitly by containers.
  • -
  • Small memory footprint and runtime latency.
  • -
  • Does not try to make assumptions about the underlying system.
  • -
  • Extremely portable and conforming to ISO C99.
  • -
  • Depends only on a very small subset of the standard libc, mostly for fixed size integers and booleans.
  • -
  • Allows for excellent execution predictability and ease of debugging.
  • -
  • Can be used baremetal or alongside RTOSes.
  • -
  • Well tested and well documented.
  • -
-

API documentation

-

The API documentation is automatically generated by Doxygen. Find it here.

-

Testing

-

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.

-

Test coverage

-

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.

-

Core data structures

-

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.

-

Closures

-

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.

-

Basic closure usage

-
#include <stdint.h>
- -
-
static void *add(void *context, void *params){
-
uintptr_t value1 = (uintptr_t)context;
-
uintptr_t value2 = (uintptr_t)params;
-
-
return (void *)(value1 + value2);
-
}
-
-
// ...
-
-
// Binds the function `add` to the context (5)
-
uel_closure_t add_five = uel_closure_create(&add, (void *)5);
-
-
// Invokes the closure with the parameters set to (2)
-
uintptr_t result = (uintptr_t)uel_closure_invoke(&add_five, (void *)2);
-
// Result is 7
-

A word on (void *)

-

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

-

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

-

Basic circular queue usage

-
#include <stdint.h>
- -
-
#define BUFFER_SIZE_LOG2N (5)
-
#define BUFFER_SIZE (1<<BUFFER_SIZE_LOG2N) // 1<<5 == 2**5 == 32
-
-
// ...
-
uel_cqueue_t queue;
-
void *buffer[BUFFER_SIZE];
-
// Creates a queue with 32 (2**5) slots
-
uel_cqueue_init(&queue, buffer, BUFFER_SIZE_LOG2N);
-
-
// Push items in the queue
-
uel_cqueue_push(&queue, (void *)3)
-
uel_cqueue_push(&queue, (void *)2)
-
uel_cqueue_push(&queue, (void *)1);
-
-
// Pop items from the queue
-
uintptr_t value1 = (uintptr_t) uel_cqueue_pop(&queue); // value1 is 3
-
uintptr_t value2 = (uintptr_t) uel_cqueue_pop(&queue); // value2 is 2
-
uintptr_t value3 = (uintptr_t) uel_cqueue_pop(&queue); // value3 is 1
-

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.

-

Object pools

-

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.

-

Basic object pool usage

-
#include <stdint.h>
- -
-
typedef struct obj obj_t;
-
struct obj {
-
uint32_t num;
-
char str[32];
-
// Whatever
-
};
-
-
// ...
-
-
// The log2 of our pool size.
-
#define POOL_SIZE_LOG2N (5)
-
UEL_DECLARE_OBJPOOL_BUFFERS(obj_t, POOL_SIZE_LOG2N, my_pool);
-
-
uel_objpool_t my_pool;
-
uel_objpool_init(&my_pool, POOL_SIZE_LOG2N, sizeof(obj_t), UEL_OBJPOOL_BUFFERS(my_pool));
-
// my_pool now is a pool with 32 (2**5) obj_t
-
-
// ...
-
-
// Whenever the programmer needs a fresh obj_t
-
obj_t *obj = (obj_t *)uel_objpool_acquire(&my_pool);
-
-
// When it is no longer needed, return it to the pool
-
uel_objpool_release(&my_pool, obj);
-

Linked lists

-

µEvLoop ships a simple linked list implementation that holds void pointers, as usual.

-

Basic linked list usage

-
#include <stddef.h>
-
#include <stdint.h>
- -
-
// ...
-
-
uel_llist_t list;
- -
-
uel_llist_node_t nodes[2] = {
-
{(void *)1, NULL},
-
{(void *)2, NULL}
-
};
-
-
// Push items into the list
-
uel_llist_push_head(&list, &nodes[0]);
-
uel_llist_push_head(&list, &nodes[1]);
-
-
// List now is TAIL-> [1]-> [2]-> NULL. HEAD-> [2]
-
uel_llist_node_t *node1 = (uel_llist_node_t *)llist_pop_tail(&list);
-
uel_llist_node_t *node2 = (uel_llist_node_t *)llist_pop_tail(&list);
-
-
//node1 == nodes[0] and node2 == nodes[1]
-

Containers

-

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.

-

System pools

-

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.

-

System pools usage

-
-
-
// ...
-
-
uel_syspools_t pools;
- -
// This allocates two pools:
-
// 1) pools.event_pool
-
// 2) pools.llist_node_pool
-

System queues

-

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.

-

System queues usage

-
-
-
// ...
-
-
uel_sysqueues_t queues;
- -
// This allocates two queues:
-
// 1) queues.event_queue (events ready to be processed are put here)
-
// 2) queues.schedule_queue (events ready to be scheduled are put here)
-

Application

-

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; }

#### Application registry
-
-
The `application` component can also keep a registry of modules to manage. See [Appendix A: Modules](#appendix-a-modules) for more information.
-
-
## Core components
-
-
### Scheduler
-
-
The scheduler is a component that keeps track of current execution time and closures to be run in the future. It provides similar functionality to the `setTimeout` and `setInterval` Javascript functions.
-
-
Two queues lead in and out of it: the inbound schedule_queue is externally fed events that should be scheduled and then accounted for; the outbound event_queue hold events that are due to be collected and processed.
-
-
This component needs access to system's pools and queues.
-
-
#### Basic scheduler initialisation
-
-
```c
-
#include <uevloop/system/containers/system-pools.h>
-
#include <uevloop/system/containers/system-queues.h>
-
#include <uevloop/system/scheduler.h>
-
-
// ...
-
-
// Create the system containers
-
uel_syspools_t pools;
-
uel_syspools_init(&pools);
-
uel_sysqueues_t queues;
-
uel_sysqueues_init(&queues);
-
-
// Create the scheduler
-
uel_scheduer_t scheduler;
-
uel_sch_init(&scheduler, &pools, &queues);
-

Scheduler operation

-

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.

-
#include <stdio.h>
-
#include <stdint.h>
- -
-
static void *print_coords(void *context, void *params){
-
uintptr_t x = (uintptr_t)context;
-
uintptr_t y = (uintptr_t)params;
-
printf("(x: %d, y: %d)\n", x, y);
-
-
return NULL;
-
}
-
-
// ...
-
-
uel_closure_t print_x_one = uel_closure_create(&print_coords, (void *)1);
-
uel_closure_t print_x_two = uel_closure_create(&print_coords, (void *)2);
-
uel_closure_t print_x_three = uel_closure_create(&print_coords, (void *)3);
-
-
// Schedules to run 1000ms in the future.
-
// Will print (x: 1, y: 4)
-
uel_sch_run_later(&scheduler, 1000, print_x_one, (void *)4);
-
-
// Schedules to run at intervals of 500ms, runs the first time after 500ms
-
// Will print (x: 2, y: 5)
-
uel_sch_run_at_intervals(&scheduler, 500, false, print_x_two, (void *)5);
-
-
// Schedules to run at intervals of 300ms, runs the first time the next runloop
-
// Will print (x: 3, y: 6)
-
uel_sch_run_at_intervals(&scheduler, 300, true, print_x_three, (void *)6);
-

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.

-
// millisecond counter
-
volatile uint32_t counter = 0;
-
-
// 1kHz timer ISR
-
void my_timer_isr(){
-
my_timer_isr_flag = 0;
-
uel_sch_update_timer(&scheduler, ++counter);
-
}
-
-
// ...
-
-
// On the main loop
- -

When the function uel_sch_manage_timers is called, two things happen:

    -
  1. The schedule_queue is flushed and every timer in it is scheduled accordingly;
  2. -
  3. The scheduler iterates over the scheduled timer list from the beginning and breaks it when it finds a timer scheduled further in the future. It then proceeds to move each timer from the extracted list to the event_queue, where they will be further collected and processed.
  4. -
-

Timer events

-

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);

When pausing and resuming timer events, be aware of the internal's latencies: paused timers are only sent to the hold queue when their scheduled time is hit. Also, when resumed, they are scheduled based solely on their period setting, being the elapsed time when they were paused completely ignored. Should a timer both scheduled *and* paused be resumed *before* its elapsed time is hit, it behaves as it was never paused.
-
Regarding cancelled timer events, they are equally susceptible to internal latency as they will only be destroyed when processed by the `event loop`. However, cancelled timers are not meant to be reused anyway. As a rule of thumb, **never** use a timer event after it was cancelled.
-
-
#### Scheduler time resolution
-
-
There are two distinct factors that will determine the actual time resolution of the scheduler:
-
1. the frequency of the feed in timer ISR
-
2. the frequency the function `uel_sch_manage_timers` is called.
-
-
The basic resolution variable is the feed-in timer frequency. Having this update too sporadically will cause events scheduled to differing moments to be indistinguishable regarding their schedule (*e.g.*: most of the time, having the timer increment every 100ms will make any events scheduled to moments with less than 100ms of difference to each other to be run in the same runloop).
-
-
A good value for the timer ISR frequency is usually between 1 kHz - 200 Hz, but depending on project requirements and available resources it can be less. Down to around 10 Hz is still valid, but precision will start to deteriorate quickly from here on.
-
-
There is little use having the feed-in timer ISR run at more than 1 kHz, as it is meant to measure milliseconds. Software timers are unlikely to be accurate enough for much greater frequencies anyway.
-
-
If the `uel_sch_manage_timers` function is not called frequently enough, events will start enqueuing and won't be served in time. Just make sure it is called when the counter is updated or when there are events on the schedule queue.
-
-
### Event loop
-
-
The central piece of µEvLoop (even its name is a bloody reference to it) is the event loop, a queue of events to be processed sequentially. It is not aware of the execution time and simply process all enqueued events when run. Most heavy work in the system happens here.
-
-
The event loop requires access to system's internal pools and queues.
-
-
#### Basic event loop initialisation
-
-
```c
-
#include <uevloop/system/containers/system-pools.h>
-
#include <uevloop/system/containers/system-queues.h>
-
#include <uevloop/system/event-loop.h>
-
-
// Create system containers
-
uel_syspools_t pools;
-
uel_syspools_init(&pools);
-
uel_sysqueues_t queues;
-
uel_sysqueues_init(&queues);
-
-
// Create the event loop
-
uel_evloop_t loop;
-
uel_evloop_init(&loop, &pools, &queues);
-

Event loop usage

-

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.

-
-
-
static void *add(void *context, void *params){
-
uintptr_t *num = (uintptr_t *)context;
-
uintptr_t other = (uintptr_t)params;
-
*num += other;
-
-
return NULL;
-
}
-
-
// ...
-
-
uintptr_t value = 0;
-
uel_closure_t closure = uel_closure_create(&add, (void *)&value);
-
-
uel_evloop_enqueue_closure(&loop, &closure, (void *)1);
-
// value is 0
-
- -
// value is 1
-
-
uel_evloop_enqueue_closure(&loop, &closure, (void *)2);
-
uel_evloop_enqueue_closure(&loop, &closure, (void *)3);
- -
// value is 6
-

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.

-

Observers

-

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).

### Signal
-
-
Signals are similar to events in Javascript. It allows the programmer to message distant parts of the system to communicate with each other in a pub/sub fashion.
-
-
At the centre of the signal `system` is the Signal Relay, a structure that bind specific signals to its listeners. When a signal is emitted, the relay will **asynchronously** run each listener registered for that signal. If the listener was not recurring, it will be destroyed upon execution by the event loop.
-
-
#### Signals and relay initialisation
-
-
To use signals, the programmer must first define what signals will be available in a particular relay, then create the relay bound to this signals.
-
-
To be initialised, the relay must have access to the system's internal pools and queues. The programmer will also need to supply it a buffer of [linked lists](#linked-lists), where listeners will be stored.
-
-
```c
-
#include <uevloop/system/containers/system-pools.h>
-
#include <uevloop/system/containers/system-queues.h>
-
#include <uevloop/system/signal.h>
-
#include <uevloop/utils/linked-list.h>
-
-
// Create the system containers
-
uel_syspools_t pools;
-
uel_syspools_init(&pools);
-
uel_sysqueues_t queues;
-
uel_sysqueues_init(&queues);
-
-
// Define what signals will be available to this relay.
-
// Doing so in an enum makes it easy to add new signals in the future.
-
enum my_component_signals {
-
SIGNAL_1 = 0,
-
SIGNAL_2,
-
// New events would go here
-
SIGNAL_COUNT
-
};
-
-
// Declare the relay buffer. Note this array will be the number of signals large.
-
uel_llist_t buffer[SIGNAL_COUNT];
-
-
// Create the relay
-
uel_signal_relay_t relay;
-
uel_signal_relay_init(&relay, &pools, &queues, buffer, SIGNAL_COUNT);
-

Signal operation

-
// This is the listener function.
-
static void *respond_to_signal(void *context, void *params){
-
uintptr_t num = (uintptr_t)context;
-
// Signals can be emitted with parameters, just like events in JS
-
char c = (char)(uintptr_t)params;
-
printf("%d%c\n", num, c);
-
-
return NULL;
-
}
-
-
// Listeners can be persistent. They will fire once each time the signal is emitted
-
uel_closure_t respond_to_signal_1 = uel_closure_create(&respond_to_signal, (void *)1);
-
uel_signal_listener_t listener_1 = uel_signal_listen(SIGNAL_1, &relay, &respond_to_signal_1);
-
-
// Listeners can also be transient, so they fire ust on first emission
-
uel_closure_t respond_to_signal_2 = uel_closure_create(&respond_to_signal, (void *)2);
-
uel_signal_listener_t listener_2 = uel_signal_listen_once(SIGNAL_2, &relay, &respond_to_signal_2);
-
-
// ...
-
uel_signal_emit(SIGNAL_1, &relay, (void *)('a')); // prints 1a
-
uel_signal_emit(SIGNAL_2, &relay, (void *)('b')); // prints 2b
-
uel_signal_emit(SIGNAL_1, &relay, (void *)('c')); // prints 1c
-
uel_signal_emit(SIGNAL_2, &relay, (void *)('d')); // doesn't print anything
-

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.

-
uel_signal_unlisten(listener_1, &relay);
-
uel_signal_unlisten(listener_2, &relay); // This has no effect because the listener
-
// for SIGNAL_2 has already been marked as unlistened
-

Appendix A: Promises

-

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.

-

Promise stores

-

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 creation

-

Promise store need access to two object pools, one for promises and one for segments.

#include <uevloop/utils/object-pools.h>
-
#include <uevloop/system/promise.h>
-
-
#define PROMISE_STORE_SIZE_LOG2N 4 // 16 promises
-
#define SEGMENT_STORE_SIZE_LOG2N 6 // 64 segments
-
-
uel_objpool_t promise_pool;
-
uel_objpool_t segment_pool;
-
UEL_DECLARE_OBJPOOL_BUFFERS(uel_promise_t, PROMISE_STORE_SIZE_LOG2N, promise);
-
UEL_DECLARE_OBJPOOL_BUFFERS(uel_promise_segment_t, SEGMENT_STORE_SIZE_LOG2N, segment);
- -
&promise_pool,
-
PROMISE_STORE_SIZE_LOG2N,
-
sizeof(uel_promise_t),
- -
);
- -
&segment_pool,
-
SEGMENT_STORE_SIZE_LOG2N,
-
sizeof(uel_promise_segment_t),
- -
);
-
-
uel_promise_store_t store = uel_promise_store_create(&promise_pool, &segment_pool);
-

Promises and 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.

-

Promise creation

-

There are two necessary pieces for creating a promise: a store and a constructor closure that starts the asynchronous operation.

-
void *start_some_async(void *context, void *params){
-
uel_promise_t *promise = (uel_promise_t *)params;
-
// ...
-
return NULL; // return value is ignored
-
}
-
-
// ...
-
-
uel_promise_t *promise =
-
uel_promise_create(&store, uel_closure_create(start_some_async, NULL));
-

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.

-

Promise settling

-

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:

-
uel_promise_resolve(promise1, (void *)SOME_VALUE); // operation succeeded
-
uel_promise_reject(promise2, (void *)SOME_ERROR); // operation failed
-

Once a promise is settled, it holds a value that can be accessed via promise->value.

-

Segments

-

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.

-
#include <stdio.h>
-
#include <stddef.h>
-
-
void *report_success(void *context, void *params) {
-
char *tag = (char *)context;
-
uel_promise_t *promise = (uel_promise_t *)params;
-
printf("promise %s resolved with %d\n", tag, promise->value);
-
return NULL;
-
}
-
-
void *report_error(void *context, void *params) {
-
char *tag = (char *)context;
-
uel_promise_t *promise = (uel_promise_t *)params;
-
printf("promise %s rejected with %d\n", tag, promise->value);
-
return NULL;
-
}
-
-
// ...
-
-
// Assume p1, p2 and p3 as pending, resolved and rejected promises, respectively
-
// p2 is resolved with (uintptr_t)10 and p3 is rejected with (uintptr_t)100
-
- -
p1,
-
uel_closure_create(report_success, (void *)"p1"),
-
uel_closure_create(report_error, (void *)"p1")
-
);
-
// Neither closure gets invoked. Instead, a new segment containing them is enqueued.
-
- -
p2,
-
uel_closure_create(report_success, (void *)"p2"),
-
uel_closure_create(report_error, (void *)"p2")
-
);
-
// As the promise is already resolved, instead of enqueueing a segment, the first
-
// closure is invoked.
-
// "p2 resolved with 10" is printed
-
- -
p3,
-
uel_closure_create(report_success, (void *)"p3"),
-
uel_closure_create(report_error, (void *)"p3")
-
);
-
// Similarly, as the promise is already rejected, the second closure gets invoked
-
// immediately.
-
// "p3 rejected with 100" is printed
-
-
uel_promise_resolve(p1, (uintptr_t)1);
-
// Upon settling, segments are removed from the queue and processed.
-
// "p1 resolved with 1" is printed
-

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:

-
uel_promise_then(my_promise, my_closure);
-
// `my_closure` is invoked only when `my_promise` is resolved.
-
// The added segment is ignored if the promise is rejected.
-
-
uel_promise_catch(my_promise, my_closure);
-
// `my_closure` is invoked only when `my_promise` is rejected.
-
// The added segment is ignored if the promise is resolved.
-
-
uel_promise_always(my_promise, my_closure);
-
// `my_closure` is invoked always upon settling, regardless of the settled state
-

Segment chains and promise resettling

-

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.

-
void *store_char(void *context, void *params) {
-
unsigned char *var = (unsigned char *)context;
-
uel_promise_t *promise = (uel_promise_t *)params;
-
if((uintptr_t)promise->value <= 255) {
-
*var = (unsigned char)(uintptr_t)promise->value;
-
} else {
-
uel_promise_resettle(promise, UEL_PROMISE_REJECTED, (void *)"Value too big");
-
}
-
return NULL;
-
}
-
-
void *report_error(void *context, void *params) {
-
uel_promise_t *promise = (uel_promise_t *)params;
-
printf("promise was rejected with error '%s'\n", (char *)promise->value);
-
return NULL;
-
}
-
-
void *done(void *context, void *params) {
-
static char *states[3] = { "pending", "resolved", "rejected" };
-
uel_promise_t *promise = (uel_promise_t *)params;
-
printf("operation done with state '%s'\n", states[promise->state]);
-
}
-
-
unsigned char c1 = 0;
-
uel_promise_t *p1 = uel_promise_create(&store, uel_nop()); // Creates a pending promise
-
uel_promise_then(p1, uel_closure_create(store_char, (void *)&c1));
-
uel_promise_catch(p1, uel_closure_create(report_error, NULL));
-
uel_promsie_always(p1, uel_closure_create(done, NULL));
-

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:

-
uel_promise_resolve(p1, (void *)10);
-

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:

uel_promise_resolve(p1, (void *)1000);
-

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:

uel_promise_reject(p1, (void *)"Asynchronous operation failed");
-

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.

-

Nested promises

-

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:

-
// ADC implementation
-
static uel_promise_t *adc_promise;
-
-
// This ISR is called when the ADC finishes sampling
-
// the instructed number of samples
-
static void adc_isr() {
-
uel_promise_resolve(adc_promise, (void *)ADC_BUFFER);
-
adc_promise = NULL;
-
adc_isr_flag = 0;
-
}
-
-
// Launches the ADC and returns. This effectively starts an asynchronous operation.
-
static void *start_adc(void *context, void *params) {
-
uintptr_t count = (uintptr_t)context;
-
uel_promise_t *promise = (uel_promise_t *)params;
-
ADC_COUNT = count;
-
ADC_START = 1;
-
adc_promise = promise;
-
return NULL;
-
}
-
-
// Public interface function. Returns a promise that,
-
// when resolved, will contain the address of the buffer where
-
// data was sampled
-
uel_promise_t *adc_read(uintptr_t count) {
-
return uel_promise_create(&store, uel_closure_create(start_adc, (void *)count));
-
}
-
// DMA implementation
-
static uel_promise_ t *dma_promise;
-
-
// This ISR is called when the DMA channel has finished
-
// moving data
-
static void dma_isr() {
-
uel_promise_resolve(dma_promise, (void *)DMA_DESTINATION);
-
dma_promise = NULL;
-
dma_isr_flag = 0;
-
}
-
-
// Auxiliary structure to hold DMA mapping information
-
struct dma_mapping {
-
void *source;
-
void *destination;
-
uintptr_t count;
-
};
-
-
// Launches the DMA channel, starting an asynchronous operation
-
static void *start_dma(void *context, void *params) {
-
struct dma_mapping *mapping = (struct dma_mapping *)context;
-
uel_promise_t *promise = (uel_promise_t *)params;
-
DMA_SOURCE = mapping->source;
-
DMA_DESTINATION = mapping->destination;
-
DMA_COUNT = mapping->count;
-
DMA_START = 1;
-
adc_promise = promise;
-
return NULL;
-
}
-
-
// Public interface function.
-
// Returns a promise that, when resolved, will hold the address
-
// of the buffer to where data was moved
-
uel_promise_t *dma_move(void *destination, void *source, uintptr_t count) {
-
struct dma_mapping mapping = { source, destination, count };
-
return uel_promise_create(&store, uel_closure_create(start_adc, (void *)&mapping));
-
}
-

Implementing the project requirements is this simple:

-
#define N 10 // Will take 10 samples
-
-
static void *move_from_buffer(void *context, void *params) {
-
uel_promise_t *promise = (uel_promise_t *)params;
-
void *source = promise->value;
-
void *destination = context;
-
return (void *)dma_move(destination, source, N);
-
}
-
-
static void *data_moved(void *context, void *params) {
-
uel_promise_t *promise = (uel_promise_t *)params;
-
printf("Data moved to %p\n", promise->value);
-
return NULL;
-
}
-
-
// ...
-
-
uel_promise_t *promise = adc_read(N);
-
unsigned char destination[N];
-
uel_promise_then(promise, uel_closure_create(move_from_buffer, (void *)destination));
-
uel_promise_then(promise, uel_closure_create(data_moved, NULL));
-

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.

-

Promise destruction and promise helpers

-

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:

-
// When invoked, destroys the promise
-
uel_closure_t destroyer = uel_promise_destroyer(promise);
-
-
// When invoked with some value, resolves the promise with that value
-
uel_closure_t resolver = uel_promise_resolver(promise);
-
-
// When invoked with some value, rejects the promise with that value
-
uel_closure_t rejecter = uel_promise_rejecter(promise);
-

Appendix B: Modules

-

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:

    -
  • They can act as bridges to static data, such as SFRs;
  • -
  • They can be object factories, meant to distribute and recycle objects to other modules;
  • -
  • They can act as services, background processes that interact with other parts of the application in a sattelite-fashion.
  • -
-

Module creation

-
// File: my_module.h
-
- - -
-
typedef struct my_module my_module_t; // Private implementation
-
-
uel_module_t *my_module(uel_application_t *my_app);
-
-
// Any functions' signatures to operate the module go here
-
// File: my_module.c
-
-
#include "my_module.h"
-
-
struct my_module {
-
uel_module_t base; // Inherits base interface
-
-
// Other properties
-
};
-
-
// The config hook is used to prepare the module.
-
// When it is fired by the `application`, all modules are guaranteed to be
-
// registered, but may still be in an inconsistent state.
-
// Modules are loaded in the order they are supplied, so previous modules will
-
// already be configured.
-
static void config(uel_module_t *mod){
-
// ...
-
}
-
-
// The launch hook is where the module should effectively start its functions.
-
// All modules here are guaranteed to be registered and properly configurated.
-
static void launch(uel_module_t *mod){
-
// ...
-
}
-
-
// The constructor function is the only mandatory symbol to be exported.
-
// This function should initialise all independent or readly available data.
-
// It must not be called more than once per module.
-
uel_module_t *my_module(uel_application_t *my_app){
-
static my_module_t module;
-
uel_module_init(&module.base, config, launch, my_app);
-
-
// Initialise other module's properties
-
-
return &module.base;
-
}
-

Module registration

-

Modules are operated by the application component. It is responsible for loading, configuring and launching each module.

-
// File: my_app_modules.h
-
-
#include "my_module.h"
-
-
// Each module must be identified by a positive integer, zero-indexed.
-
// Storing module IDs in an enum makes it easy to add new modules in the future.
-
enum MY_APP_MODULES {
-
MY_MODULE,
-
// other modules...,
-
MY_APP_MODULE_COUNT
-
};
-
// File: main.c
-
- -
#include "my_app_modules.h"
-
-
// Creates the controlling application
-
uel_application_t my_app;
-
uel_app_init(&my_app);
-
-
// Declares a list of module pointers to be supplied to the application.
-
uel_module_t *modules[MY_APP_MODULE_COUNT];
-
-
// Individually initialising pointers in the list ensures IDs always
-
// match their corresponding module, even if they change during development.
-
modules[MY_MODULE] = my_module(&my_app);
-
-
// This loads the modules into the application:
-
// - The module list is stored as the application registry;
-
// - Each module's configuration hook is sequentially invoked, according to
-
// their position in the registry;
-
// - Each module's launch hook is sequentially invoked, equally ordered by
-
// the registry.
-
uel_app_load(&my_app, modules, MY_APP_MODULE_COUNT);
-

Dependency Injection

-

There are two method for injecting a registered module: parametrised injection and ad-hoc injection. Each is adequate for a different situation:

-

Parametrised injection

-

Parametrised dependencies are dependencies that are supplied during module construction.

-

Given the following module header:

// File: my_greeter.h
-
-
#include "my_module.h"
- - -
-
typedef struct my_greeter my_greeter_t;
-
uel_module_t *my_greeter(
-
uel_application_t *my_app,
-
const char *name, // <-- Parametrised dependency
-
my_module_t *other_module // <-- Dependencies can be other modules
-
);
-

The application loading procedure would be:

// File: my_app_modules.h
-
-
enum MY_APP_MODULES {
-
MY_MODULE,
-
MY_GREETER,
-
MY_APP_MODULE_COUNT
-
};
-

```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)

Parametrised injection facilitates reasoning about what each module depends on and in which order they are loaded. This is the preferable way to inject dependencies into modules.
-
-
#### Ad-hoc injection
-
Ad-hoc injections can occur anywhere, including places outside the scope of the application's managed modules.
-
-
```c
-
// ANYWHERE with access to `my_app`:
-
-
#include <uevloop/system/containers/application.h>
-
#include "my_greeter.h"
-
#include "my_app_modules.h"
-
-
my_greeter_t *greeter = (my_greeter_t *)uel_app_require(&my_app, MY_GREETER);
-

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.

-

Appendix C: Useful goodies

-

Iterators

-

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:

-

Array iterators

-
-
#define NUMS_LENGTH 5
-
-
uintptr_t nums[NUMS_LENGTH] = { 1, 2, 3, 4, 5 };
-
uel_iterator_array_t array_iterator =
-
uel_iterator_array_create(nums, NUMS_LENGTH, sizeof(uintptr_t));
-

Linked list iterators

-
- -
-
uel_llist_node_t nodes[] = {
-
{ (void *)1, NULL },
-
{ (void *)2, NULL ),
-
{ (void *)3, NULL }
-
};
-
uel_llist_t list;
- -
uel_llist_push_head(&list, &nodes[0]);
-
uel_llist_push_head(&list, &nodes[1]);
-
- -

Iterator operation

-

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 } ```

-

Iteration helpers

-

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

There are many more iteration helpers, check the more details on [the docs](https://andsmedeiros.github.io/uevloop/html/iterator_8h.html).
-
-
#### Custom iterators
-
-
Iterators are meant to be expansible. If you need to enumerate your own type, write an iterator specialisation:
-
-
```c
-
struct my_collection_type{
-
// whatever, could be a binary tree, a hash table etc
-
};
-
struct my_collection_iterator{
-
uel_iterator_t base; // inherits the base interface
-
// any other state necessary for iteration
-
};
-
void *my_collection_next(my_collection_iterator *iterator, void *last){
-
// implement your iteration logic here.
-
// remember:
-
// if last == NULL, yield the first element.
-
// if last == last element in collection, yield NULL.
-
}
-
-
struct my_collection_type collection; // initialised as needed
-
struct my_collection_iterator iterator = {
-
{ (uel_iterator_next_t)&my_collection_next, (void *)&collection },
-
// initialise any state as necessary
-
};
-

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

-

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.

-
-
#include <stdio.h>
-
-
void *is_divisible(void *context, void *params){
-
uintptr_t divisor = (uintptr_t)context;
-
uintptr_t dividend = (uintptr_t)params;
-
return (void *)(uintptr_t)(dividend % divisor != 0);
-
}
-
-
void *qualify_number(void *context, void *params){
-
char *parity = (char *)context;
-
uintptr_t num = (uintptr_t)params;
-
printf("%d is %s\n", num, parity);
-
return NULL;
-
}
-
-
uel_closure_t is_even =
-
uel_closure_create(is_divisible, (void *)2);
-
uel_closure_t print_even =
-
uel_closure_create(qualify_number, (void *)"even");
-
uel_closure_t print_odd =
-
uel_closure_create(qualify_number, (void *)"odd");
-
-
uel_conditional_t numer_parity;
-
uel_conditional_init(&number_parity, is_even, print_even, print_odd);
-
-
uel_conditional_apply(&number_parity, (void *)1);
-
// prints "1 is odd"
-
-
uel_conditional_apply(&number_parity, (void *)2);
-
// prints "2 is even"
-

Pipelines

-

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.

-
-
-
void *exponentiate(void *context, void *params){
-
uintptr_t power = (uintptr_t)context;
-
uintptr_t base = (uintptr_t)params;
-
return (void *)(uintptr_t)pow(base, power);
-
}
-
void *add(void *context, void *params){
-
uintptr_t term1 = (uintptr_t)context;
-
uintptr_t term2 = (uintptr_t)params;
-
return (void *)(uintptr_t)(term1 + term2);
-
}
-
-
uel_closure_t square = uel_closure_create(exponentiate, (void *)2);
-
uel_closure_t increment = uel_closure_create(add, (void *)1);
-
-
// creates the math_pipeline, equivalent to the function f(x) = x^2 + 1
-
UEL_PIPELINE_DECLARE(math, square, increment);
-
-
uintptr_t res = (uintptr_t)uel_pipeline_apply(&math_pipeline, (void *)5);
-
// res == f(5) == (5^2 + 1) == 26
-

Functional helpers

-

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 and automatic pointers

-

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 pool creation

-

Automatic pools are created and initialised in very similar ways to object pools:

-
-
-
#define TUPLE_POOL_SIZE_LOG2N 5 // 32 tuples
-
struct tuple {
-
int a;
-
int b;
-
};
-
UEL_DECLARE_AUTOPOOL_BUFFERS(struct tuple, TUPLE_POOL_SIZE_LOG2N, tuple);
-
uel_autopool_t tuple_pool;
- -
&tuple_pool,
-
TUPLE_POOL_SIZE_LOG2N,
-
sizeof(struct tuple),
- -
);
-

Automatic pool operation and automatic pointer destruction

-

After an automatic pool has been created, it can allocate and deallocate objects, just like object pools.

-
struct tuple **t = (struct tuple **)uel_autopool_alloc(&tuple_pool);
-
if(t) {
-
(**t).a = 1;
-
(**t).b = 10;
- -
}
-

Automatic pool constructors and destructors

-

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.

-
static void *default_tuple(void *context, void *params) {
-
struct tuple *value = (struct tuple *)context;
-
struct tuple *t = (struct tuple *)params;
-
*t = *value;
-
return NULL;
-
}
-
-
static void *zero_tuple(void *context, void *params) {
-
struct tuple *t = (struct tuple *)params;
-
t->a = 0;
-
t->b = 0;
-
return NULL;
-
}
-
-
// ...
-
-
static struct tuple default_value = { 10, 100 };
-
uel_autopool_set_contructor(
-
&tuple_pool,
-
uel_closure_create(default_tuple, (void *)&default_value)
-
);
- -
&tuple_pool,
-
uel_closure_create(zero_tuple, NULL)
-
);
-
-
struct tuple **t1 = (struct tuple **)uel_autopool_alloc(&tuple_pool);
-
// t1.a == 10, t1.b == 100
-
- -
// before t1 is dealloc'ed t1.a == 0, t1.b == 0
-

Concurrency model

-

µ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.

-

Critical sections

-

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:

-
    -
  1. 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.

    -
  2. -
  3. 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.

    -
  4. -
  5. UEL_CRITICAL_EXIT

    -

    Exits the current critical section. After this is called, any shared memory is allowed to be claimed by some party.

    -
  6. -
-

Motivation

-

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.

-

Roadmap

-
    -
  • Better error handling
  • -
  • Logging helpers
  • -
  • Macro shortcuts for frequently used functions
  • -
  • More lifecycle hooks for modules
  • -
  • Application teardown/exit
  • -
  • Implement application signals
  • -
-
-
-
void uel_signal_emit(uel_signal_t signal, uel_signal_relay_t *relay, void *params)
Emits a signal at the supplied relay. Any closure listening to this signal will be asynchronously inv...
-
uel_iterator_array_t uel_iterator_array_create(void *collection, size_t count, size_t size)
Creates a new array iterator.
-
Defines pipelines, structures to hold many closures and functions to invoke them sequentially,...
-
Defines a simple implementation of linked lists and functions to manipulate it.
-
void * uel_cqueue_pop(uel_cqueue_t *queue)
Pops an element from the queue.
-
void uel_evloop_run(uel_evloop_t *event_loop)
Triggers a runloop.
-
void uel_promise_resettle(uel_promise_t *promise, uel_promise_state_t state, void *value)
Resettles a promise as the supplied state. Unlike uel_promise_resolve() and uel_promise_reject(),...
-
uel_promise_t * uel_promise_create(uel_promise_store_t *store, uel_closure_t closure)
Acquires a new promise from the supplied store and binds it to the asynchronous operation started by ...
-
uel_autoptr_t uel_autopool_alloc(uel_autopool_t *pool)
Allocates an object and wrap it in a automatic pointer.
-
#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 mu...
Definition: automatic-pool.h:134
-
void ** uel_autoptr_t
Aliases uel_autoptr_t to void ** so it can be cast to pointers to other types.
Definition: automatic-pool.h:34
-
void uel_syspools_init(uel_syspools_t *pools)
Initialise the system pools.
-
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.
-
void uel_sysqueues_init(uel_sysqueues_t *queues)
Initialises a new uel_sysqueues_t.
-
Defines closures, objects that bind functions to creating and calling contexts.
-
void * uel_objpool_acquire(uel_objpool_t *pool)
Acquires an object from the pool.
-
-
void uel_promise_after(uel_promise_t *promise, uel_closure_t resolve, uel_closure_t reject)
Adds a new synchronous segment to the promise. Either of its closures will be invoked,...
-
Defines automatic pointers and automatic pools, objects that wrap object pools and objects managed by...
-
uel_closure_t uel_promise_destroyer(uel_promise_t *promise)
Creates a closure bound to a promise. When the closure is invoked, the promise is destroyed....
-
uel_closure_t uel_nop()
Returns a closure that does nothing.
-
void * uel_conditional_apply(uel_conditional_t *conditional, void *params)
Applies a conditional do some input.
-
#define UEL_DECLARE_OBJPOOL_BUFFERS(type, size_log2n, id)
Declares the necessary buffers to back an object pool, so the programmer doesn't have to reason much ...
Definition: object-pool.h:85
-
#define UEL_AUTOPOOL_BUFFERS(id)
Refers to a previously declared buffer set.
Definition: automatic-pool.h:146
-
void uel_autoptr_dealloc(uel_autoptr_t autoptr)
Deallocates an automatic pointer.
-
void uel_promise_then(uel_promise_t *promise, uel_closure_t resolve)
Adds a new synchronous segment to the promise. It will be invoked upon promise resolution....
-
uel_closure_t uel_closure_create(uel_closure_function_t function, void *context)
Creates a new closure.
-
@ UEL_PROMISE_REJECTED
A promise that has been rejected with some error.
Definition: promise.h:22
-
Defines object pools, arrays of pre-allocated objects for dynamic use.
-
void uel_cqueue_init(uel_cqueue_t *queue, void **buffer, uintptr_t size_log2n)
Initialised a circular queue object.
-
void uel_promise_always(uel_promise_t *promise, uel_closure_t always)
Adds a new synchronous segment to the promise. The same closure will be invoked on promise settling r...
-
void uel_evloop_enqueue_closure(uel_evloop_t *event_loop, uel_closure_t *closure, void *value)
Enqueues a closure to be invoked.
-
bool uel_objpool_release(uel_objpool_t *pool, void *element)
Releases an object to the pool.
-
void uel_llist_init(uel_llist_t *list)
Initialised a linked list.
-
void * uel_closure_invoke(uel_closure_t *closure, void *params)
Invokes a closure and returns whatever value it returned.
-
uel_promise_store_t uel_promise_store_create(uel_objpool_t *promise_pool, uel_objpool_t *segment_pool)
Creates a new promise store from the promise and segment pools.
-
Defines iterators, structures and functions suitable for enumerating other data structures.
-
Defines circular queues, fast and efficient FIFO data structures.
-
uel_iterator_llist_t uel_iterator_llist_create(uel_llist_t *list)
Creates a new linked list iterator.
-
uel_signal_listener_t uel_signal_listen_once(uel_signal_t signal, uel_signal_relay_t *relay, uel_closure_t *closure)
Attaches a listener closure to some signal at a particular relay. The listener closure will be invoke...
-
#define UEL_PIPELINE_DECLARE(id,...)
Helper macro to create a pipeline and its required data structures.
Definition: pipeline.h:59
-
void uel_promise_reject(uel_promise_t *promise, void *value)
Settles a promise as rejected and, synchronously, invokes the reject closures of each segment in the ...
-
uel_iterator_t uel_iterator_llist_t
Alias to uel_iterator_t. Iterator suitable to traverse linked lists.
Definition: iterator.h:158
-
uel_event_t * uel_sch_run_later(uel_scheduer_t *scheduler, uint16_t timeout_in_ms, uel_closure_t closure, void *value)
Enqueues a closure for later execution.
-
void uel_app_init(uel_application_t *app)
Initialises an uel_application_t instance.
-
void uel_module_init(uel_module_t *module, uel_module_hook_t config, uel_module_hook_t launch, struct uel_application *app)
Initialised a module.
-
void * uel_pipeline_apply(uel_pipeline_t *pipeline, void *params)
Applies a pipeline to some input.
-
uel_closure_t uel_promise_rejecter(uel_promise_t *promise)
Creates a closure bound to a promise. When the closure is invoked with some parameter,...
-
uel_closure_t uel_promise_resolver(uel_promise_t *promise)
Creates a closure bound to a promise. When the closure is invoked with some parameter,...
-
uel_event_t * uel_sch_run_at_intervals(uel_scheduer_t *scheduler, uint16_t interval_in_ms, bool immediate, uel_closure_t closure, void *value)
Enqueues a closure for execution at intervals.
-
void uel_promise_catch(uel_promise_t *promise, uel_closure_t reject)
Adds a new synchronous segment to the promise. It will be invoked upon promise rejection....
-
uel_signal_listener_t uel_signal_listen(uel_signal_t signal, uel_signal_relay_t *relay, uel_closure_t *closure)
Attaches a listener closure to some signal at a particular relay.
-
void uel_autopool_set_destructor(uel_autopool_t *pool, uel_closure_t destructor)
Sets the destructor closure of an autopool.
-
void uel_sch_update_timer(uel_scheduer_t *scheduler, uint32_t timer)
Updates the internal time counter.
-
#define UEL_OBJPOOL_BUFFERS(id)
Refers to a previously declared buffer set.
Definition: object-pool.h:96
-
void uel_llist_push_head(uel_llist_t *list, uel_llist_node_t *node)
Pushes a node to the head of the list.
-
A container for the system's internal queues.
-
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.
-
Contains definitions of functional conditionals, structures that act as if-else constructs.
-
bool uel_cqueue_push(uel_cqueue_t *queue, void *element)
Pushes an element into the queue.
-
void uel_signal_unlisten(uel_signal_listener_t listener)
Marks a signal listener as expired. When its corresponding signal is emitted, this listener's closure...
-
struct uel_event_listener * uel_signal_listener_t
Defines a reference type suitable to manipulate the actual listener event's context.
Definition: signal.h:27
-
void uel_promise_resolve(uel_promise_t *promise, void *value)
Settles a promise as resolved and, synchronously, invokes the resolve closures of each segment in the...
-
A container for the system's internal pools.
-
void uel_sch_manage_timers(uel_scheduer_t *scheduler)
Enqueue timers that are due to be processed in the event queue.
-
void uel_objpool_init(uel_objpool_t *pool, size_t size_log2n, size_t item_size, uint8_t *buffer, void **queue_buffer)
Initialises an object pool.
-
The application module is a convenient top-level container for the system internals.
-
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.
- - - - 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: include/uevloop/utils/iterator.h File Reference - - - - - - - - - -
-
- - - - - - -
-
µEvLoop -
-
A fast and lightweight event loop aimed at embedded platforms in C99.
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
iterator.h File Reference
-
-
- -

Defines iterators, structures and functions suitable for enumerating other data structures. -More...

-
-Include dependency graph for iterator.h:
-
-
- - - - - -
-
-This graph shows which files directly or indirectly include this file:
-
-
- - - - -
-
-

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...
 
-

Detailed Description

-

Defines iterators, structures and functions suitable for enumerating other data structures.

-

Macro Definition Documentation

- -

◆ UEL_ITERATOR_MAP_BOUNDLESS

- -
-
- - - - -
#define UEL_ITERATOR_MAP_BOUNDLESS   UINT_MAX
-
-

Defines the maximum possible iteration limit for the uel_iterator_map() function.

- -
-
-

Typedef Documentation

- -

◆ uel_iterator_llist_t

- -
-
- - - - -
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.

- -
-
-

Function Documentation

- -

◆ uel_iterator_all()

- -
-
- - - - - - - - - - - - - - - - - - -
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.

-
Parameters
- - - -
iteratorThe iterator that enumerates the elements of some collection
closureThe test to be applied against each enumerated element
-
-
-
Returns
Whether all elements are approved by the test closure.
- -
-
- -

◆ uel_iterator_any()

- -
-
- - - - - - - - - - - - - - - - - - -
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.

-
Parameters
- - - -
iteratorThe iterator that enumerates the elements of some collection
closureThe test to be applied against each enumerated element
-
-
-
Returns
Whether any elements are approved by the test closure. If such element is found, this function returns early.
- -
-
- -

◆ uel_iterator_array_create()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
uel_iterator_array_t uel_iterator_array_create (void * collection,
size_t count,
size_t size 
)
-
- -

Creates a new array iterator.

-
Parameters
- - - - -
collectionThe array to be enumerated
countThe number of elements in this array
sizeThe size of each element in the array
-
-
-
Returns
The created iterator
- -
-
- -

◆ uel_iterator_array_next()

- -
-
- - - - - - - - - - - - - - - - - - -
void* uel_iterator_array_next (uel_iterator_array_t * iterator,
void * last 
)
-
- -

Yields elements in a array.

-
Parameters
- - - -
iteratorThe iterator thar enumerates the elements in the target array
lastThe last element yielded. If NULL, returns the first element.
-
-
-
Returns
The next element in the array with respect to the last one provided. If there are no more elements in the array, this returns NULL.
- -
-
- -

◆ uel_iterator_count()

- -
-
- - - - - - - - - - - - - - - - - - -
size_t uel_iterator_count (uel_iterator_t * iterator,
uel_closure_t * closure 
)
-
- -

Counts elements enumerated by an iterator that pass the supplied test.

-
Parameters
- - - -
iteratorThe iterator that enumerates the elements of some collection
closureThe test to be applied against each enumerated element
-
-
-
Returns
How many elements successfully passed the supplied test
- -
-
- -

◆ uel_iterator_find()

- -
-
- - - - - - - - - - - - - - - - - - -
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.

-
Parameters
- - - -
iteratorThe iterator that enumerates the elements of some collection
closureThe test to be applied against each enumerated element
-
-
-
Returns
The address of the first element that passes the supplied test. If no such element is found, returns NULL.
- -
-
- -

◆ uel_iterator_foreach()

- -
-
- - - - - - - - - - - - - - - - - - -
bool uel_iterator_foreach (uel_iterator_t * iterator,
uel_closure_t * closure 
)
-
- -

Applies a closure to an enumerable collection.

-
Parameters
- - - -
iteratorThe iterator that enumerates the elements of some collection
closureThe closure to be invoked with each element in the enumerated collection as parameter. If this closure returns false, the iteration will be halted.
-
-
-
Returns
Whether the collection was fully iterated over or if the process was halted by returning false.
- -
-
- -

◆ uel_iterator_llist_create()

- -
-
- - - - - - - - -
uel_iterator_llist_t uel_iterator_llist_create (uel_llist_t * list)
-
- -

Creates a new linked list iterator.

-
Parameters
- - -
listThe linked list to be enumerated
-
-
-
Returns
The created iterator
- -
-
- -

◆ uel_iterator_llist_next()

- -
-
- - - - - - - - - - - - - - - - - - -
void* uel_iterator_llist_next (uel_iterator_t * iterator,
void * last 
)
-
- -

Yields elements in a linked list.

-
Parameters
- - - -
iteratorThe iterator thar enumerates the elements in the target list
lastThe last element yielded. If NULL, returns the first element.
-
-
-
Returns
The next element in the list with respect to the last one provided. If there are no more elements in the list, this returns NULL.
- -
-
- -

◆ uel_iterator_map()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
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.

-
Parameters
- - - - - -
iteratorThe iterator that enumerates the elements of some collection
closureThe closure to be invoked with each element in the enumerated collection ad parameter.
destinationThe destination of the data produced by the invoked closure. This must be an array of void pointers large enough to store all produced data
limitThe 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.
-
-
-
Returns
The number of effectively iterated elements.
- -
-
- -

◆ uel_iterator_none()

- -
-
- - - - - - - - - - - - - - - - - - -
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.

-
Parameters
- - - -
iteratorThe iterator that enumerates the elements of some collection
closureThe test to be applied against each enumerated element
-
-
-
Returns
Whether all elements are reproved by the test closure.
- -
-
-
- - - - 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: include/uevloop/utils/iterator.h Source File - - - - - - - - - -
-
- - - - - - -
-
µEvLoop -
-
A fast and lightweight event loop aimed at embedded platforms in C99.
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
iterator.h
-
-
-Go to the documentation of this file.
1 
-
7 #ifndef UEL_ITERATOR_H
-
8 #define UEL_ITERATOR_H
-
9 
-
11 #include <stdlib.h>
-
12 #include <limits.h>
-
14 
- -
16 #include "uevloop/utils/closure.h"
-
17 
-
28 typedef struct uel_iterator uel_iterator_t;
-
29 struct uel_iterator{
-
41  void * (* next)(uel_iterator_t *, void *);
-
43  void *collection;
-
44 };
-
45 
-
55 bool uel_iterator_foreach(uel_iterator_t *iterator, uel_closure_t *closure);
-
56 
-
73 size_t uel_iterator_map(uel_iterator_t *iterator, uel_closure_t *closure, void **destination, size_t limit);
-
74 
-
83 void *uel_iterator_find(uel_iterator_t *iterator, uel_closure_t *closure);
-
84 
-
91 size_t uel_iterator_count(uel_iterator_t *iterator, uel_closure_t *closure);
-
92 
-
100 bool uel_iterator_all(uel_iterator_t *iterator, uel_closure_t *closure);
-
101 
-
109 bool uel_iterator_none(uel_iterator_t *iterator, uel_closure_t *closure);
-
110 
-
119 bool uel_iterator_any(uel_iterator_t *iterator, uel_closure_t *closure);
-
120 
-
124 typedef struct uel_iterator_array uel_iterator_array_t;
- -
127  uel_iterator_t base;
-
129  size_t item_count;
-
131  size_t item_size;
-
132 };
-
133 
-
141 void *uel_iterator_array_next(uel_iterator_array_t *iterator, void *last);
-
142 
-
150 uel_iterator_array_t uel_iterator_array_create(void *collection, size_t count, size_t size);
-
151 
-
158 typedef uel_iterator_t uel_iterator_llist_t;
-
159 
-
167 void *uel_iterator_llist_next(uel_iterator_t *iterator, void *last);
-
168 
- -
175 
-
178 #define UEL_ITERATOR_MAP_BOUNDLESS UINT_MAX
-
179 
-
180 #endif /* UEL_ITERATOR_H */
-
-
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.
-
uel_iterator_array_t uel_iterator_array_create(void *collection, size_t count, size_t size)
Creates a new array iterator.
-
Defines a simple implementation of linked lists and functions to manipulate it.
-
size_t item_size
The size of each element in the array.
Definition: iterator.h:131
-
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.
-
Defines closures, objects that bind functions to creating and calling contexts.
-
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.
-
uel_iterator_t base
The base iterator interface.
Definition: iterator.h:127
-
void * uel_iterator_array_next(uel_iterator_array_t *iterator, void *last)
Yields elements in a array.
-
size_t uel_iterator_count(uel_iterator_t *iterator, uel_closure_t *closure)
Counts elements enumerated by an iterator that pass the supplied test.
-
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.
-
bool uel_iterator_foreach(uel_iterator_t *iterator, uel_closure_t *closure)
Applies a closure to an enumerable collection.
-
uel_iterator_llist_t uel_iterator_llist_create(uel_llist_t *list)
Creates a new linked list iterator.
-
uel_iterator_t uel_iterator_llist_t
Alias to uel_iterator_t. Iterator suitable to traverse linked lists.
Definition: iterator.h:158
-
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.
-
Iterators are data structures that wrap arbitrary collections of data and define ways of enumerating ...
Definition: iterator.h:29
-
void * collection
A reference to the collection being iterated.
Definition: iterator.h:43
-
void * uel_iterator_llist_next(uel_iterator_t *iterator, void *last)
Yields elements in a linked list.
-
size_t item_count
The number of elements in the array.
Definition: iterator.h:129
-
A specialised iterator suitable for iterating over arrays of arbitrary data.
Definition: iterator.h:125
- - - - 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+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp($),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+$),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),ne=function(e,t,n){var r="0x"+t-65536;return r!=r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(m.childNodes),m.childNodes),t[m.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&((e?e.ownerDocument||e:m)!==C&&T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!A[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&U.test(t)){(s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=k),o=(l=h(t)).length;while(o--)l[o]="#"+s+" "+xe(l[o]);c=l.join(","),f=ee.test(t)&&ye(e.parentNode)||e}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){A(t,!0)}finally{s===k&&e.removeAttribute("id")}}}return g(t.replace(B,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[k]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e.namespaceURI,n=(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:m;return r!==C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),m!==C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=k,!C.getElementsByName||!C.getElementsByName(k).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+k+"-]").length||v.push("~="),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+k+"+*").length||v.push(".#.+[+~]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",$)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e===C||e.ownerDocument===m&&y(m,e)?-1:t===C||t.ownerDocument===m&&y(m,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e===C?-1:t===C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]===m?-1:s[r]===m?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if((e.ownerDocument||e)!==C&&T(e),d.matchesSelector&&E&&!A[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){A(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=p[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&p(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?k.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?k.grep(e,function(e){return e===n!==r}):"string"!=typeof n?k.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(k.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||q,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:L.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof k?t[0]:t,k.merge(this,k.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),D.test(r[1])&&k.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(k):k.makeArray(e,this)}).prototype=k.fn,q=k(E);var H=/^(?:parents|prev(?:Until|All))/,O={children:!0,contents:!0,next:!0,prev:!0};function P(e,t){while((e=e[t])&&1!==e.nodeType);return e}k.fn.extend({has:function(e){var t=k(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i,ge={option:[1,""],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?k.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;nx",y.noCloneChecked=!!me.cloneNode(!0).lastChild.defaultValue;var Te=/^key/,Ce=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Ee=/^([^.]*)(?:\.(.+)|)/;function ke(){return!0}function Se(){return!1}function Ne(e,t){return e===function(){try{return E.activeElement}catch(e){}}()==("focus"===t)}function Ae(e,t,n,r,i,o){var a,s;if("object"==typeof t){for(s in"string"!=typeof n&&(r=r||n,n=void 0),t)Ae(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=Se;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return k().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=k.guid++)),e.each(function(){k.event.add(this,t,i,r,n)})}function De(e,i,o){o?(Q.set(e,i,!1),k.event.add(e,i,{namespace:!1,handler:function(e){var t,n,r=Q.get(this,i);if(1&e.isTrigger&&this[i]){if(r.length)(k.event.special[i]||{}).delegateType&&e.stopPropagation();else if(r=s.call(arguments),Q.set(this,i,r),t=o(this,i),this[i](),r!==(n=Q.get(this,i))||t?Q.set(this,i,!1):n={},r!==n)return e.stopImmediatePropagation(),e.preventDefault(),n.value}else r.length&&(Q.set(this,i,{value:k.event.trigger(k.extend(r[0],k.Event.prototype),r.slice(1),this)}),e.stopImmediatePropagation())}})):void 0===Q.get(e,i)&&k.event.add(e,i,ke)}k.event={global:{},add:function(t,e,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Q.get(t);if(v){n.handler&&(n=(o=n).handler,i=o.selector),i&&k.find.matchesSelector(ie,i),n.guid||(n.guid=k.guid++),(u=v.events)||(u=v.events={}),(a=v.handle)||(a=v.handle=function(e){return"undefined"!=typeof k&&k.event.triggered!==e.type?k.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||"").match(R)||[""]).length;while(l--)d=g=(s=Ee.exec(e[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=k.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=k.event.special[d]||{},c=k.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&k.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(t,r,h,a)||t.addEventListener&&t.addEventListener(d,a)),f.add&&(f.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),k.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Q.hasData(e)&&Q.get(e);if(v&&(u=v.events)){l=(t=(t||"").match(R)||[""]).length;while(l--)if(d=g=(s=Ee.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d){f=k.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,v.handle)||k.removeEvent(e,d,v.handle),delete u[d])}else for(d in u)k.event.remove(e,d+t[l],n,r,!0);k.isEmptyObject(u)&&Q.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,a,s=k.event.fix(e),u=new Array(arguments.length),l=(Q.get(this,"events")||{})[s.type]||[],c=k.event.special[s.type]||{};for(u[0]=s,t=1;t\x20\t\r\n\f]*)[^>]*)\/>/gi,qe=/\s*$/g;function Oe(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&k(e).children("tbody")[0]||e}function Pe(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function Re(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Me(e,t){var n,r,i,o,a,s,u,l;if(1===t.nodeType){if(Q.hasData(e)&&(o=Q.access(e),a=Q.set(t,o),l=o.events))for(i in delete a.handle,a.events={},l)for(n=0,r=l[i].length;n")},clone:function(e,t,n){var r,i,o,a,s,u,l,c=e.cloneNode(!0),f=oe(e);if(!(y.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||k.isXMLDoc(e)))for(a=ve(c),r=0,i=(o=ve(e)).length;r").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var Vt,Gt=[],Yt=/(=)\?(?=&|$)|\?\?/;k.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Gt.pop()||k.expando+"_"+kt++;return this[e]=!0,e}}),k.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Yt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Yt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Yt,"$1"+r):!1!==e.jsonp&&(e.url+=(St.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||k.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?k(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Gt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((Vt=E.implementation.createHTMLDocument("").body).innerHTML="
",2===Vt.childNodes.length),k.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=D.exec(e))?[t.createElement(i[1])]:(i=we([e],t,o),o&&o.length&&k(o).remove(),k.merge([],i.childNodes)));var r,i,o},k.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(k.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},k.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){k.fn[t]=function(e){return this.on(t,e)}}),k.expr.pseudos.animated=function(t){return k.grep(k.timers,function(e){return t===e.elem}).length},k.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=k.css(e,"position"),c=k(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=k.css(e,"top"),u=k.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,k.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},k.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){k.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===k.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===k.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=k(e).offset()).top+=k.css(e,"borderTopWidth",!0),i.left+=k.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-k.css(r,"marginTop",!0),left:t.left-i.left-k.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===k.css(e,"position"))e=e.offsetParent;return e||ie})}}),k.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;k.fn[t]=function(e){return _(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),k.each(["top","left"],function(e,n){k.cssHooks[n]=ze(y.pixelPosition,function(e,t){if(t)return t=_e(e,n),$e.test(t)?k(e).position()[n]+"px":t})}),k.each({Height:"height",Width:"width"},function(a,s){k.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){k.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return _(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?k.css(e,t,i):k.style(e,t,n,i)},s,n?e:void 0,n)}})}),k.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){k.fn[n]=function(e,t){return 0a;a++)for(i in o[a])n=o[a][i],o[a].hasOwnProperty(i)&&void 0!==n&&(e[i]=t.isPlainObject(n)?t.isPlainObject(e[i])?t.widget.extend({},e[i],n):t.widget.extend({},n):n);return e},t.widget.bridge=function(e,i){var n=i.prototype.widgetFullName||e;t.fn[e]=function(o){var a="string"==typeof o,r=s.call(arguments,1),h=this;return a?this.length||"instance"!==o?this.each(function(){var i,s=t.data(this,n);return"instance"===o?(h=s,!1):s?t.isFunction(s[o])&&"_"!==o.charAt(0)?(i=s[o].apply(s,r),i!==s&&void 0!==i?(h=i&&i.jquery?h.pushStack(i.get()):i,!1):void 0):t.error("no such method '"+o+"' for "+e+" widget instance"):t.error("cannot call methods on "+e+" prior to initialization; "+"attempted to call method '"+o+"'")}):h=void 0:(r.length&&(o=t.widget.extend.apply(null,[o].concat(r))),this.each(function(){var e=t.data(this,n);e?(e.option(o||{}),e._init&&e._init()):t.data(this,n,new i(o,this))})),h}},t.Widget=function(){},t.Widget._childConstructors=[],t.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"
",options:{classes:{},disabled:!1,create:null},_createWidget:function(e,s){s=t(s||this.defaultElement||this)[0],this.element=t(s),this.uuid=i++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=t(),this.hoverable=t(),this.focusable=t(),this.classesElementLookup={},s!==this&&(t.data(s,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t){t.target===s&&this.destroy()}}),this.document=t(s.style?s.ownerDocument:s.document||s),this.window=t(this.document[0].defaultView||this.document[0].parentWindow)),this.options=t.widget.extend({},this.options,this._getCreateOptions(),e),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:t.noop,_create:t.noop,_init:t.noop,destroy:function(){var e=this;this._destroy(),t.each(this.classesElementLookup,function(t,i){e._removeClass(i,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:t.noop,widget:function(){return this.element},option:function(e,i){var s,n,o,a=e;if(0===arguments.length)return t.widget.extend({},this.options);if("string"==typeof e)if(a={},s=e.split("."),e=s.shift(),s.length){for(n=a[e]=t.widget.extend({},this.options[e]),o=0;s.length-1>o;o++)n[s[o]]=n[s[o]]||{},n=n[s[o]];if(e=s.pop(),1===arguments.length)return void 0===n[e]?null:n[e];n[e]=i}else{if(1===arguments.length)return void 0===this.options[e]?null:this.options[e];a[e]=i}return this._setOptions(a),this},_setOptions:function(t){var e;for(e in t)this._setOption(e,t[e]);return this},_setOption:function(t,e){return"classes"===t&&this._setOptionClasses(e),this.options[t]=e,"disabled"===t&&this._setOptionDisabled(e),this},_setOptionClasses:function(e){var i,s,n;for(i in e)n=this.classesElementLookup[i],e[i]!==this.options.classes[i]&&n&&n.length&&(s=t(n.get()),this._removeClass(n,i),s.addClass(this._classes({element:s,keys:i,classes:e,add:!0})))},_setOptionDisabled:function(t){this._toggleClass(this.widget(),this.widgetFullName+"-disabled",null,!!t),t&&(this._removeClass(this.hoverable,null,"ui-state-hover"),this._removeClass(this.focusable,null,"ui-state-focus"))},enable:function(){return this._setOptions({disabled:!1})},disable:function(){return this._setOptions({disabled:!0})},_classes:function(e){function i(i,o){var a,r;for(r=0;i.length>r;r++)a=n.classesElementLookup[i[r]]||t(),a=e.add?t(t.unique(a.get().concat(e.element.get()))):t(a.not(e.element).get()),n.classesElementLookup[i[r]]=a,s.push(i[r]),o&&e.classes[i[r]]&&s.push(e.classes[i[r]])}var s=[],n=this;return e=t.extend({element:this.element,classes:this.options.classes||{}},e),this._on(e.element,{remove:"_untrackClassesElement"}),e.keys&&i(e.keys.match(/\S+/g)||[],!0),e.extra&&i(e.extra.match(/\S+/g)||[]),s.join(" ")},_untrackClassesElement:function(e){var i=this;t.each(i.classesElementLookup,function(s,n){-1!==t.inArray(e.target,n)&&(i.classesElementLookup[s]=t(n.not(e.target).get()))})},_removeClass:function(t,e,i){return this._toggleClass(t,e,i,!1)},_addClass:function(t,e,i){return this._toggleClass(t,e,i,!0)},_toggleClass:function(t,e,i,s){s="boolean"==typeof s?s:i;var n="string"==typeof t||null===t,o={extra:n?e:i,keys:n?t:e,element:n?this.element:t,add:s};return o.element.toggleClass(this._classes(o),s),this},_on:function(e,i,s){var n,o=this;"boolean"!=typeof e&&(s=i,i=e,e=!1),s?(i=n=t(i),this.bindings=this.bindings.add(i)):(s=i,i=this.element,n=this.widget()),t.each(s,function(s,a){function r(){return e||o.options.disabled!==!0&&!t(this).hasClass("ui-state-disabled")?("string"==typeof a?o[a]:a).apply(o,arguments):void 0}"string"!=typeof a&&(r.guid=a.guid=a.guid||r.guid||t.guid++);var h=s.match(/^([\w:-]*)\s*(.*)$/),l=h[1]+o.eventNamespace,c=h[2];c?n.on(l,c,r):i.on(l,r)})},_off:function(e,i){i=(i||"").split(" ").join(this.eventNamespace+" ")+this.eventNamespace,e.off(i).off(i),this.bindings=t(this.bindings.not(e).get()),this.focusable=t(this.focusable.not(e).get()),this.hoverable=t(this.hoverable.not(e).get())},_delay:function(t,e){function i(){return("string"==typeof t?s[t]:t).apply(s,arguments)}var s=this;return setTimeout(i,e||0)},_hoverable:function(e){this.hoverable=this.hoverable.add(e),this._on(e,{mouseenter:function(e){this._addClass(t(e.currentTarget),null,"ui-state-hover")},mouseleave:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-hover")}})},_focusable:function(e){this.focusable=this.focusable.add(e),this._on(e,{focusin:function(e){this._addClass(t(e.currentTarget),null,"ui-state-focus")},focusout:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-focus")}})},_trigger:function(e,i,s){var n,o,a=this.options[e];if(s=s||{},i=t.Event(i),i.type=(e===this.widgetEventPrefix?e:this.widgetEventPrefix+e).toLowerCase(),i.target=this.element[0],o=i.originalEvent)for(n in o)n in i||(i[n]=o[n]);return this.element.trigger(i,s),!(t.isFunction(a)&&a.apply(this.element[0],[i].concat(s))===!1||i.isDefaultPrevented())}},t.each({show:"fadeIn",hide:"fadeOut"},function(e,i){t.Widget.prototype["_"+e]=function(s,n,o){"string"==typeof n&&(n={effect:n});var a,r=n?n===!0||"number"==typeof n?i:n.effect||i:e;n=n||{},"number"==typeof n&&(n={duration:n}),a=!t.isEmptyObject(n),n.complete=o,n.delay&&s.delay(n.delay),a&&t.effects&&t.effects.effect[r]?s[e](n):r!==e&&s[r]?s[r](n.duration,n.easing,o):s.queue(function(i){t(this)[e](),o&&o.call(s[0]),i()})}}),t.widget,function(){function e(t,e,i){return[parseFloat(t[0])*(u.test(t[0])?e/100:1),parseFloat(t[1])*(u.test(t[1])?i/100:1)]}function i(e,i){return parseInt(t.css(e,i),10)||0}function s(e){var i=e[0];return 9===i.nodeType?{width:e.width(),height:e.height(),offset:{top:0,left:0}}:t.isWindow(i)?{width:e.width(),height:e.height(),offset:{top:e.scrollTop(),left:e.scrollLeft()}}:i.preventDefault?{width:0,height:0,offset:{top:i.pageY,left:i.pageX}}:{width:e.outerWidth(),height:e.outerHeight(),offset:e.offset()}}var n,o=Math.max,a=Math.abs,r=/left|center|right/,h=/top|center|bottom/,l=/[\+\-]\d+(\.[\d]+)?%?/,c=/^\w+/,u=/%$/,d=t.fn.position;t.position={scrollbarWidth:function(){if(void 0!==n)return n;var e,i,s=t("
"),o=s.children()[0];return t("body").append(s),e=o.offsetWidth,s.css("overflow","scroll"),i=o.offsetWidth,e===i&&(i=s[0].clientWidth),s.remove(),n=e-i},getScrollInfo:function(e){var i=e.isWindow||e.isDocument?"":e.element.css("overflow-x"),s=e.isWindow||e.isDocument?"":e.element.css("overflow-y"),n="scroll"===i||"auto"===i&&e.widthi?"left":e>0?"right":"center",vertical:0>r?"top":s>0?"bottom":"middle"};l>p&&p>a(e+i)&&(u.horizontal="center"),c>f&&f>a(s+r)&&(u.vertical="middle"),u.important=o(a(e),a(i))>o(a(s),a(r))?"horizontal":"vertical",n.using.call(this,t,u)}),h.offset(t.extend(D,{using:r}))})},t.ui.position={fit:{left:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollLeft:s.offset.left,a=s.width,r=t.left-e.collisionPosition.marginLeft,h=n-r,l=r+e.collisionWidth-a-n;e.collisionWidth>a?h>0&&0>=l?(i=t.left+h+e.collisionWidth-a-n,t.left+=h-i):t.left=l>0&&0>=h?n:h>l?n+a-e.collisionWidth:n:h>0?t.left+=h:l>0?t.left-=l:t.left=o(t.left-r,t.left)},top:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollTop:s.offset.top,a=e.within.height,r=t.top-e.collisionPosition.marginTop,h=n-r,l=r+e.collisionHeight-a-n;e.collisionHeight>a?h>0&&0>=l?(i=t.top+h+e.collisionHeight-a-n,t.top+=h-i):t.top=l>0&&0>=h?n:h>l?n+a-e.collisionHeight:n:h>0?t.top+=h:l>0?t.top-=l:t.top=o(t.top-r,t.top)}},flip:{left:function(t,e){var i,s,n=e.within,o=n.offset.left+n.scrollLeft,r=n.width,h=n.isWindow?n.scrollLeft:n.offset.left,l=t.left-e.collisionPosition.marginLeft,c=l-h,u=l+e.collisionWidth-r-h,d="left"===e.my[0]?-e.elemWidth:"right"===e.my[0]?e.elemWidth:0,p="left"===e.at[0]?e.targetWidth:"right"===e.at[0]?-e.targetWidth:0,f=-2*e.offset[0];0>c?(i=t.left+d+p+f+e.collisionWidth-r-o,(0>i||a(c)>i)&&(t.left+=d+p+f)):u>0&&(s=t.left-e.collisionPosition.marginLeft+d+p+f-h,(s>0||u>a(s))&&(t.left+=d+p+f))},top:function(t,e){var i,s,n=e.within,o=n.offset.top+n.scrollTop,r=n.height,h=n.isWindow?n.scrollTop:n.offset.top,l=t.top-e.collisionPosition.marginTop,c=l-h,u=l+e.collisionHeight-r-h,d="top"===e.my[1],p=d?-e.elemHeight:"bottom"===e.my[1]?e.elemHeight:0,f="top"===e.at[1]?e.targetHeight:"bottom"===e.at[1]?-e.targetHeight:0,m=-2*e.offset[1];0>c?(s=t.top+p+f+m+e.collisionHeight-r-o,(0>s||a(c)>s)&&(t.top+=p+f+m)):u>0&&(i=t.top-e.collisionPosition.marginTop+p+f+m-h,(i>0||u>a(i))&&(t.top+=p+f+m))}},flipfit:{left:function(){t.ui.position.flip.left.apply(this,arguments),t.ui.position.fit.left.apply(this,arguments)},top:function(){t.ui.position.flip.top.apply(this,arguments),t.ui.position.fit.top.apply(this,arguments)}}}}(),t.ui.position,t.extend(t.expr[":"],{data:t.expr.createPseudo?t.expr.createPseudo(function(e){return function(i){return!!t.data(i,e)}}):function(e,i,s){return!!t.data(e,s[3])}}),t.fn.extend({disableSelection:function(){var t="onselectstart"in document.createElement("div")?"selectstart":"mousedown";return function(){return this.on(t+".ui-disableSelection",function(t){t.preventDefault()})}}(),enableSelection:function(){return this.off(".ui-disableSelection")}}),t.ui.focusable=function(i,s){var n,o,a,r,h,l=i.nodeName.toLowerCase();return"area"===l?(n=i.parentNode,o=n.name,i.href&&o&&"map"===n.nodeName.toLowerCase()?(a=t("img[usemap='#"+o+"']"),a.length>0&&a.is(":visible")):!1):(/^(input|select|textarea|button|object)$/.test(l)?(r=!i.disabled,r&&(h=t(i).closest("fieldset")[0],h&&(r=!h.disabled))):r="a"===l?i.href||s:s,r&&t(i).is(":visible")&&e(t(i)))},t.extend(t.expr[":"],{focusable:function(e){return t.ui.focusable(e,null!=t.attr(e,"tabindex"))}}),t.ui.focusable,t.fn.form=function(){return"string"==typeof this[0].form?this.closest("form"):t(this[0].form)},t.ui.formResetMixin={_formResetHandler:function(){var e=t(this);setTimeout(function(){var i=e.data("ui-form-reset-instances");t.each(i,function(){this.refresh()})})},_bindFormResetHandler:function(){if(this.form=this.element.form(),this.form.length){var t=this.form.data("ui-form-reset-instances")||[];t.length||this.form.on("reset.ui-form-reset",this._formResetHandler),t.push(this),this.form.data("ui-form-reset-instances",t)}},_unbindFormResetHandler:function(){if(this.form.length){var e=this.form.data("ui-form-reset-instances");e.splice(t.inArray(this,e),1),e.length?this.form.data("ui-form-reset-instances",e):this.form.removeData("ui-form-reset-instances").off("reset.ui-form-reset")}}},"1.7"===t.fn.jquery.substring(0,3)&&(t.each(["Width","Height"],function(e,i){function s(e,i,s,o){return t.each(n,function(){i-=parseFloat(t.css(e,"padding"+this))||0,s&&(i-=parseFloat(t.css(e,"border"+this+"Width"))||0),o&&(i-=parseFloat(t.css(e,"margin"+this))||0)}),i}var n="Width"===i?["Left","Right"]:["Top","Bottom"],o=i.toLowerCase(),a={innerWidth:t.fn.innerWidth,innerHeight:t.fn.innerHeight,outerWidth:t.fn.outerWidth,outerHeight:t.fn.outerHeight};t.fn["inner"+i]=function(e){return void 0===e?a["inner"+i].call(this):this.each(function(){t(this).css(o,s(this,e)+"px")})},t.fn["outer"+i]=function(e,n){return"number"!=typeof e?a["outer"+i].call(this,e):this.each(function(){t(this).css(o,s(this,e,!0,n)+"px")})}}),t.fn.addBack=function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}),t.ui.keyCode={BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38},t.ui.escapeSelector=function(){var t=/([!"#$%&'()*+,./:;<=>?@[\]^`{|}~])/g;return function(e){return e.replace(t,"\\$1")}}(),t.fn.labels=function(){var e,i,s,n,o;return this[0].labels&&this[0].labels.length?this.pushStack(this[0].labels):(n=this.eq(0).parents("label"),s=this.attr("id"),s&&(e=this.eq(0).parents().last(),o=e.add(e.length?e.siblings():this.siblings()),i="label[for='"+t.ui.escapeSelector(s)+"']",n=n.add(o.find(i).addBack(i))),this.pushStack(n))},t.fn.scrollParent=function(e){var i=this.css("position"),s="absolute"===i,n=e?/(auto|scroll|hidden)/:/(auto|scroll)/,o=this.parents().filter(function(){var e=t(this);return s&&"static"===e.css("position")?!1:n.test(e.css("overflow")+e.css("overflow-y")+e.css("overflow-x"))}).eq(0);return"fixed"!==i&&o.length?o:t(this[0].ownerDocument||document)},t.extend(t.expr[":"],{tabbable:function(e){var i=t.attr(e,"tabindex"),s=null!=i;return(!s||i>=0)&&t.ui.focusable(e,s)}}),t.fn.extend({uniqueId:function(){var t=0;return function(){return this.each(function(){this.id||(this.id="ui-id-"+ ++t)})}}(),removeUniqueId:function(){return this.each(function(){/^ui-id-\d+$/.test(this.id)&&t(this).removeAttr("id")})}}),t.ui.ie=!!/msie [\w.]+/.exec(navigator.userAgent.toLowerCase());var n=!1;t(document).on("mouseup",function(){n=!1}),t.widget("ui.mouse",{version:"1.12.1",options:{cancel:"input, textarea, button, select, option",distance:1,delay:0},_mouseInit:function(){var e=this;this.element.on("mousedown."+this.widgetName,function(t){return e._mouseDown(t)}).on("click."+this.widgetName,function(i){return!0===t.data(i.target,e.widgetName+".preventClickEvent")?(t.removeData(i.target,e.widgetName+".preventClickEvent"),i.stopImmediatePropagation(),!1):void 0}),this.started=!1},_mouseDestroy:function(){this.element.off("."+this.widgetName),this._mouseMoveDelegate&&this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate)},_mouseDown:function(e){if(!n){this._mouseMoved=!1,this._mouseStarted&&this._mouseUp(e),this._mouseDownEvent=e;var i=this,s=1===e.which,o="string"==typeof this.options.cancel&&e.target.nodeName?t(e.target).closest(this.options.cancel).length:!1;return s&&!o&&this._mouseCapture(e)?(this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){i.mouseDelayMet=!0},this.options.delay)),this._mouseDistanceMet(e)&&this._mouseDelayMet(e)&&(this._mouseStarted=this._mouseStart(e)!==!1,!this._mouseStarted)?(e.preventDefault(),!0):(!0===t.data(e.target,this.widgetName+".preventClickEvent")&&t.removeData(e.target,this.widgetName+".preventClickEvent"),this._mouseMoveDelegate=function(t){return i._mouseMove(t)},this._mouseUpDelegate=function(t){return i._mouseUp(t)},this.document.on("mousemove."+this.widgetName,this._mouseMoveDelegate).on("mouseup."+this.widgetName,this._mouseUpDelegate),e.preventDefault(),n=!0,!0)):!0}},_mouseMove:function(e){if(this._mouseMoved){if(t.ui.ie&&(!document.documentMode||9>document.documentMode)&&!e.button)return this._mouseUp(e);if(!e.which)if(e.originalEvent.altKey||e.originalEvent.ctrlKey||e.originalEvent.metaKey||e.originalEvent.shiftKey)this.ignoreMissingWhich=!0;else if(!this.ignoreMissingWhich)return this._mouseUp(e)}return(e.which||e.button)&&(this._mouseMoved=!0),this._mouseStarted?(this._mouseDrag(e),e.preventDefault()):(this._mouseDistanceMet(e)&&this._mouseDelayMet(e)&&(this._mouseStarted=this._mouseStart(this._mouseDownEvent,e)!==!1,this._mouseStarted?this._mouseDrag(e):this._mouseUp(e)),!this._mouseStarted)},_mouseUp:function(e){this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,e.target===this._mouseDownEvent.target&&t.data(e.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(e)),this._mouseDelayTimer&&(clearTimeout(this._mouseDelayTimer),delete this._mouseDelayTimer),this.ignoreMissingWhich=!1,n=!1,e.preventDefault()},_mouseDistanceMet:function(t){return Math.max(Math.abs(this._mouseDownEvent.pageX-t.pageX),Math.abs(this._mouseDownEvent.pageY-t.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),t.ui.plugin={add:function(e,i,s){var n,o=t.ui[e].prototype;for(n in s)o.plugins[n]=o.plugins[n]||[],o.plugins[n].push([i,s[n]])},call:function(t,e,i,s){var n,o=t.plugins[e];if(o&&(s||t.element[0].parentNode&&11!==t.element[0].parentNode.nodeType))for(n=0;o.length>n;n++)t.options[o[n][0]]&&o[n][1].apply(t.element,i)}},t.widget("ui.resizable",t.ui.mouse,{version:"1.12.1",widgetEventPrefix:"resize",options:{alsoResize:!1,animate:!1,animateDuration:"slow",animateEasing:"swing",aspectRatio:!1,autoHide:!1,classes:{"ui-resizable-se":"ui-icon ui-icon-gripsmall-diagonal-se"},containment:!1,ghost:!1,grid:!1,handles:"e,s,se",helper:!1,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:90,resize:null,start:null,stop:null},_num:function(t){return parseFloat(t)||0},_isNumber:function(t){return!isNaN(parseFloat(t))},_hasScroll:function(e,i){if("hidden"===t(e).css("overflow"))return!1;var s=i&&"left"===i?"scrollLeft":"scrollTop",n=!1;return e[s]>0?!0:(e[s]=1,n=e[s]>0,e[s]=0,n)},_create:function(){var e,i=this.options,s=this;this._addClass("ui-resizable"),t.extend(this,{_aspectRatio:!!i.aspectRatio,aspectRatio:i.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:i.helper||i.ghost||i.animate?i.helper||"ui-resizable-helper":null}),this.element[0].nodeName.match(/^(canvas|textarea|input|select|button|img)$/i)&&(this.element.wrap(t("
").css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),this.element=this.element.parent().data("ui-resizable",this.element.resizable("instance")),this.elementIsWrapper=!0,e={marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom"),marginLeft:this.originalElement.css("marginLeft")},this.element.css(e),this.originalElement.css("margin",0),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css(e),this._proportionallyResize()),this._setupHandles(),i.autoHide&&t(this.element).on("mouseenter",function(){i.disabled||(s._removeClass("ui-resizable-autohide"),s._handles.show())}).on("mouseleave",function(){i.disabled||s.resizing||(s._addClass("ui-resizable-autohide"),s._handles.hide())}),this._mouseInit()},_destroy:function(){this._mouseDestroy();var e,i=function(e){t(e).removeData("resizable").removeData("ui-resizable").off(".resizable").find(".ui-resizable-handle").remove()};return this.elementIsWrapper&&(i(this.element),e=this.element,this.originalElement.css({position:e.css("position"),width:e.outerWidth(),height:e.outerHeight(),top:e.css("top"),left:e.css("left")}).insertAfter(e),e.remove()),this.originalElement.css("resize",this.originalResizeStyle),i(this.originalElement),this},_setOption:function(t,e){switch(this._super(t,e),t){case"handles":this._removeHandles(),this._setupHandles();break;default:}},_setupHandles:function(){var e,i,s,n,o,a=this.options,r=this;if(this.handles=a.handles||(t(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se"),this._handles=t(),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),s=this.handles.split(","),this.handles={},i=0;s.length>i;i++)e=t.trim(s[i]),n="ui-resizable-"+e,o=t("
"),this._addClass(o,"ui-resizable-handle "+n),o.css({zIndex:a.zIndex}),this.handles[e]=".ui-resizable-"+e,this.element.append(o);this._renderAxis=function(e){var i,s,n,o;e=e||this.element;for(i in this.handles)this.handles[i].constructor===String?this.handles[i]=this.element.children(this.handles[i]).first().show():(this.handles[i].jquery||this.handles[i].nodeType)&&(this.handles[i]=t(this.handles[i]),this._on(this.handles[i],{mousedown:r._mouseDown})),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i)&&(s=t(this.handles[i],this.element),o=/sw|ne|nw|se|n|s/.test(i)?s.outerHeight():s.outerWidth(),n=["padding",/ne|nw|n/.test(i)?"Top":/se|sw|s/.test(i)?"Bottom":/^e$/.test(i)?"Right":"Left"].join(""),e.css(n,o),this._proportionallyResize()),this._handles=this._handles.add(this.handles[i])},this._renderAxis(this.element),this._handles=this._handles.add(this.element.find(".ui-resizable-handle")),this._handles.disableSelection(),this._handles.on("mouseover",function(){r.resizing||(this.className&&(o=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),r.axis=o&&o[1]?o[1]:"se")}),a.autoHide&&(this._handles.hide(),this._addClass("ui-resizable-autohide"))},_removeHandles:function(){this._handles.remove()},_mouseCapture:function(e){var i,s,n=!1;for(i in this.handles)s=t(this.handles[i])[0],(s===e.target||t.contains(s,e.target))&&(n=!0);return!this.options.disabled&&n},_mouseStart:function(e){var i,s,n,o=this.options,a=this.element;return this.resizing=!0,this._renderProxy(),i=this._num(this.helper.css("left")),s=this._num(this.helper.css("top")),o.containment&&(i+=t(o.containment).scrollLeft()||0,s+=t(o.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:i,top:s},this.size=this._helper?{width:this.helper.width(),height:this.helper.height()}:{width:a.width(),height:a.height()},this.originalSize=this._helper?{width:a.outerWidth(),height:a.outerHeight()}:{width:a.width(),height:a.height()},this.sizeDiff={width:a.outerWidth()-a.width(),height:a.outerHeight()-a.height()},this.originalPosition={left:i,top:s},this.originalMousePosition={left:e.pageX,top:e.pageY},this.aspectRatio="number"==typeof o.aspectRatio?o.aspectRatio:this.originalSize.width/this.originalSize.height||1,n=t(".ui-resizable-"+this.axis).css("cursor"),t("body").css("cursor","auto"===n?this.axis+"-resize":n),this._addClass("ui-resizable-resizing"),this._propagate("start",e),!0},_mouseDrag:function(e){var i,s,n=this.originalMousePosition,o=this.axis,a=e.pageX-n.left||0,r=e.pageY-n.top||0,h=this._change[o];return this._updatePrevProperties(),h?(i=h.apply(this,[e,a,r]),this._updateVirtualBoundaries(e.shiftKey),(this._aspectRatio||e.shiftKey)&&(i=this._updateRatio(i,e)),i=this._respectSize(i,e),this._updateCache(i),this._propagate("resize",e),s=this._applyChanges(),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),t.isEmptyObject(s)||(this._updatePrevProperties(),this._trigger("resize",e,this.ui()),this._applyChanges()),!1):!1},_mouseStop:function(e){this.resizing=!1;var i,s,n,o,a,r,h,l=this.options,c=this;return this._helper&&(i=this._proportionallyResizeElements,s=i.length&&/textarea/i.test(i[0].nodeName),n=s&&this._hasScroll(i[0],"left")?0:c.sizeDiff.height,o=s?0:c.sizeDiff.width,a={width:c.helper.width()-o,height:c.helper.height()-n},r=parseFloat(c.element.css("left"))+(c.position.left-c.originalPosition.left)||null,h=parseFloat(c.element.css("top"))+(c.position.top-c.originalPosition.top)||null,l.animate||this.element.css(t.extend(a,{top:h,left:r})),c.helper.height(c.size.height),c.helper.width(c.size.width),this._helper&&!l.animate&&this._proportionallyResize()),t("body").css("cursor","auto"),this._removeClass("ui-resizable-resizing"),this._propagate("stop",e),this._helper&&this.helper.remove(),!1},_updatePrevProperties:function(){this.prevPosition={top:this.position.top,left:this.position.left},this.prevSize={width:this.size.width,height:this.size.height}},_applyChanges:function(){var t={};return this.position.top!==this.prevPosition.top&&(t.top=this.position.top+"px"),this.position.left!==this.prevPosition.left&&(t.left=this.position.left+"px"),this.size.width!==this.prevSize.width&&(t.width=this.size.width+"px"),this.size.height!==this.prevSize.height&&(t.height=this.size.height+"px"),this.helper.css(t),t},_updateVirtualBoundaries:function(t){var e,i,s,n,o,a=this.options;o={minWidth:this._isNumber(a.minWidth)?a.minWidth:0,maxWidth:this._isNumber(a.maxWidth)?a.maxWidth:1/0,minHeight:this._isNumber(a.minHeight)?a.minHeight:0,maxHeight:this._isNumber(a.maxHeight)?a.maxHeight:1/0},(this._aspectRatio||t)&&(e=o.minHeight*this.aspectRatio,s=o.minWidth/this.aspectRatio,i=o.maxHeight*this.aspectRatio,n=o.maxWidth/this.aspectRatio,e>o.minWidth&&(o.minWidth=e),s>o.minHeight&&(o.minHeight=s),o.maxWidth>i&&(o.maxWidth=i),o.maxHeight>n&&(o.maxHeight=n)),this._vBoundaries=o},_updateCache:function(t){this.offset=this.helper.offset(),this._isNumber(t.left)&&(this.position.left=t.left),this._isNumber(t.top)&&(this.position.top=t.top),this._isNumber(t.height)&&(this.size.height=t.height),this._isNumber(t.width)&&(this.size.width=t.width)},_updateRatio:function(t){var e=this.position,i=this.size,s=this.axis;return this._isNumber(t.height)?t.width=t.height*this.aspectRatio:this._isNumber(t.width)&&(t.height=t.width/this.aspectRatio),"sw"===s&&(t.left=e.left+(i.width-t.width),t.top=null),"nw"===s&&(t.top=e.top+(i.height-t.height),t.left=e.left+(i.width-t.width)),t},_respectSize:function(t){var e=this._vBoundaries,i=this.axis,s=this._isNumber(t.width)&&e.maxWidth&&e.maxWidtht.width,a=this._isNumber(t.height)&&e.minHeight&&e.minHeight>t.height,r=this.originalPosition.left+this.originalSize.width,h=this.originalPosition.top+this.originalSize.height,l=/sw|nw|w/.test(i),c=/nw|ne|n/.test(i);return o&&(t.width=e.minWidth),a&&(t.height=e.minHeight),s&&(t.width=e.maxWidth),n&&(t.height=e.maxHeight),o&&l&&(t.left=r-e.minWidth),s&&l&&(t.left=r-e.maxWidth),a&&c&&(t.top=h-e.minHeight),n&&c&&(t.top=h-e.maxHeight),t.width||t.height||t.left||!t.top?t.width||t.height||t.top||!t.left||(t.left=null):t.top=null,t},_getPaddingPlusBorderDimensions:function(t){for(var e=0,i=[],s=[t.css("borderTopWidth"),t.css("borderRightWidth"),t.css("borderBottomWidth"),t.css("borderLeftWidth")],n=[t.css("paddingTop"),t.css("paddingRight"),t.css("paddingBottom"),t.css("paddingLeft")];4>e;e++)i[e]=parseFloat(s[e])||0,i[e]+=parseFloat(n[e])||0;return{height:i[0]+i[2],width:i[1]+i[3]}},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var t,e=0,i=this.helper||this.element;this._proportionallyResizeElements.length>e;e++)t=this._proportionallyResizeElements[e],this.outerDimensions||(this.outerDimensions=this._getPaddingPlusBorderDimensions(t)),t.css({height:i.height()-this.outerDimensions.height||0,width:i.width()-this.outerDimensions.width||0})},_renderProxy:function(){var e=this.element,i=this.options;this.elementOffset=e.offset(),this._helper?(this.helper=this.helper||t("
"),this._addClass(this.helper,this._helper),this.helper.css({width:this.element.outerWidth(),height:this.element.outerHeight(),position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++i.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element -},_change:{e:function(t,e){return{width:this.originalSize.width+e}},w:function(t,e){var i=this.originalSize,s=this.originalPosition;return{left:s.left+e,width:i.width-e}},n:function(t,e,i){var s=this.originalSize,n=this.originalPosition;return{top:n.top+i,height:s.height-i}},s:function(t,e,i){return{height:this.originalSize.height+i}},se:function(e,i,s){return t.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[e,i,s]))},sw:function(e,i,s){return t.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[e,i,s]))},ne:function(e,i,s){return t.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[e,i,s]))},nw:function(e,i,s){return t.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[e,i,s]))}},_propagate:function(e,i){t.ui.plugin.call(this,e,[i,this.ui()]),"resize"!==e&&this._trigger(e,i,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),t.ui.plugin.add("resizable","animate",{stop:function(e){var i=t(this).resizable("instance"),s=i.options,n=i._proportionallyResizeElements,o=n.length&&/textarea/i.test(n[0].nodeName),a=o&&i._hasScroll(n[0],"left")?0:i.sizeDiff.height,r=o?0:i.sizeDiff.width,h={width:i.size.width-r,height:i.size.height-a},l=parseFloat(i.element.css("left"))+(i.position.left-i.originalPosition.left)||null,c=parseFloat(i.element.css("top"))+(i.position.top-i.originalPosition.top)||null;i.element.animate(t.extend(h,c&&l?{top:c,left:l}:{}),{duration:s.animateDuration,easing:s.animateEasing,step:function(){var s={width:parseFloat(i.element.css("width")),height:parseFloat(i.element.css("height")),top:parseFloat(i.element.css("top")),left:parseFloat(i.element.css("left"))};n&&n.length&&t(n[0]).css({width:s.width,height:s.height}),i._updateCache(s),i._propagate("resize",e)}})}}),t.ui.plugin.add("resizable","containment",{start:function(){var e,i,s,n,o,a,r,h=t(this).resizable("instance"),l=h.options,c=h.element,u=l.containment,d=u instanceof t?u.get(0):/parent/.test(u)?c.parent().get(0):u;d&&(h.containerElement=t(d),/document/.test(u)||u===document?(h.containerOffset={left:0,top:0},h.containerPosition={left:0,top:0},h.parentData={element:t(document),left:0,top:0,width:t(document).width(),height:t(document).height()||document.body.parentNode.scrollHeight}):(e=t(d),i=[],t(["Top","Right","Left","Bottom"]).each(function(t,s){i[t]=h._num(e.css("padding"+s))}),h.containerOffset=e.offset(),h.containerPosition=e.position(),h.containerSize={height:e.innerHeight()-i[3],width:e.innerWidth()-i[1]},s=h.containerOffset,n=h.containerSize.height,o=h.containerSize.width,a=h._hasScroll(d,"left")?d.scrollWidth:o,r=h._hasScroll(d)?d.scrollHeight:n,h.parentData={element:d,left:s.left,top:s.top,width:a,height:r}))},resize:function(e){var i,s,n,o,a=t(this).resizable("instance"),r=a.options,h=a.containerOffset,l=a.position,c=a._aspectRatio||e.shiftKey,u={top:0,left:0},d=a.containerElement,p=!0;d[0]!==document&&/static/.test(d.css("position"))&&(u=h),l.left<(a._helper?h.left:0)&&(a.size.width=a.size.width+(a._helper?a.position.left-h.left:a.position.left-u.left),c&&(a.size.height=a.size.width/a.aspectRatio,p=!1),a.position.left=r.helper?h.left:0),l.top<(a._helper?h.top:0)&&(a.size.height=a.size.height+(a._helper?a.position.top-h.top:a.position.top),c&&(a.size.width=a.size.height*a.aspectRatio,p=!1),a.position.top=a._helper?h.top:0),n=a.containerElement.get(0)===a.element.parent().get(0),o=/relative|absolute/.test(a.containerElement.css("position")),n&&o?(a.offset.left=a.parentData.left+a.position.left,a.offset.top=a.parentData.top+a.position.top):(a.offset.left=a.element.offset().left,a.offset.top=a.element.offset().top),i=Math.abs(a.sizeDiff.width+(a._helper?a.offset.left-u.left:a.offset.left-h.left)),s=Math.abs(a.sizeDiff.height+(a._helper?a.offset.top-u.top:a.offset.top-h.top)),i+a.size.width>=a.parentData.width&&(a.size.width=a.parentData.width-i,c&&(a.size.height=a.size.width/a.aspectRatio,p=!1)),s+a.size.height>=a.parentData.height&&(a.size.height=a.parentData.height-s,c&&(a.size.width=a.size.height*a.aspectRatio,p=!1)),p||(a.position.left=a.prevPosition.left,a.position.top=a.prevPosition.top,a.size.width=a.prevSize.width,a.size.height=a.prevSize.height)},stop:function(){var e=t(this).resizable("instance"),i=e.options,s=e.containerOffset,n=e.containerPosition,o=e.containerElement,a=t(e.helper),r=a.offset(),h=a.outerWidth()-e.sizeDiff.width,l=a.outerHeight()-e.sizeDiff.height;e._helper&&!i.animate&&/relative/.test(o.css("position"))&&t(this).css({left:r.left-n.left-s.left,width:h,height:l}),e._helper&&!i.animate&&/static/.test(o.css("position"))&&t(this).css({left:r.left-n.left-s.left,width:h,height:l})}}),t.ui.plugin.add("resizable","alsoResize",{start:function(){var e=t(this).resizable("instance"),i=e.options;t(i.alsoResize).each(function(){var e=t(this);e.data("ui-resizable-alsoresize",{width:parseFloat(e.width()),height:parseFloat(e.height()),left:parseFloat(e.css("left")),top:parseFloat(e.css("top"))})})},resize:function(e,i){var s=t(this).resizable("instance"),n=s.options,o=s.originalSize,a=s.originalPosition,r={height:s.size.height-o.height||0,width:s.size.width-o.width||0,top:s.position.top-a.top||0,left:s.position.left-a.left||0};t(n.alsoResize).each(function(){var e=t(this),s=t(this).data("ui-resizable-alsoresize"),n={},o=e.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];t.each(o,function(t,e){var i=(s[e]||0)+(r[e]||0);i&&i>=0&&(n[e]=i||null)}),e.css(n)})},stop:function(){t(this).removeData("ui-resizable-alsoresize")}}),t.ui.plugin.add("resizable","ghost",{start:function(){var e=t(this).resizable("instance"),i=e.size;e.ghost=e.originalElement.clone(),e.ghost.css({opacity:.25,display:"block",position:"relative",height:i.height,width:i.width,margin:0,left:0,top:0}),e._addClass(e.ghost,"ui-resizable-ghost"),t.uiBackCompat!==!1&&"string"==typeof e.options.ghost&&e.ghost.addClass(this.options.ghost),e.ghost.appendTo(e.helper)},resize:function(){var e=t(this).resizable("instance");e.ghost&&e.ghost.css({position:"relative",height:e.size.height,width:e.size.width})},stop:function(){var e=t(this).resizable("instance");e.ghost&&e.helper&&e.helper.get(0).removeChild(e.ghost.get(0))}}),t.ui.plugin.add("resizable","grid",{resize:function(){var e,i=t(this).resizable("instance"),s=i.options,n=i.size,o=i.originalSize,a=i.originalPosition,r=i.axis,h="number"==typeof s.grid?[s.grid,s.grid]:s.grid,l=h[0]||1,c=h[1]||1,u=Math.round((n.width-o.width)/l)*l,d=Math.round((n.height-o.height)/c)*c,p=o.width+u,f=o.height+d,m=s.maxWidth&&p>s.maxWidth,g=s.maxHeight&&f>s.maxHeight,_=s.minWidth&&s.minWidth>p,v=s.minHeight&&s.minHeight>f;s.grid=h,_&&(p+=l),v&&(f+=c),m&&(p-=l),g&&(f-=c),/^(se|s|e)$/.test(r)?(i.size.width=p,i.size.height=f):/^(ne)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.top=a.top-d):/^(sw)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.left=a.left-u):((0>=f-c||0>=p-l)&&(e=i._getPaddingPlusBorderDimensions(this)),f-c>0?(i.size.height=f,i.position.top=a.top-d):(f=c-e.height,i.size.height=f,i.position.top=a.top+o.height-f),p-l>0?(i.size.width=p,i.position.left=a.left-u):(p=l-e.width,i.size.width=p,i.position.left=a.left+o.width-p))}}),t.ui.resizable});/** - * Copyright (c) 2007 Ariel Flesler - aflesler ○ gmail • com | https://github.com/flesler - * Licensed under MIT - * @author Ariel Flesler - * @version 2.1.2 - */ -;(function(f){"use strict";"function"===typeof define&&define.amd?define(["jquery"],f):"undefined"!==typeof module&&module.exports?module.exports=f(require("jquery")):f(jQuery)})(function($){"use strict";function n(a){return!a.nodeName||-1!==$.inArray(a.nodeName.toLowerCase(),["iframe","#document","html","body"])}function h(a){return $.isFunction(a)||$.isPlainObject(a)?a:{top:a,left:a}}var p=$.scrollTo=function(a,d,b){return $(window).scrollTo(a,d,b)};p.defaults={axis:"xy",duration:0,limit:!0};$.fn.scrollTo=function(a,d,b){"object"=== typeof d&&(b=d,d=0);"function"===typeof b&&(b={onAfter:b});"max"===a&&(a=9E9);b=$.extend({},p.defaults,b);d=d||b.duration;var u=b.queue&&1=f[g]?0:Math.min(f[g],n));!a&&1-1){targetElements.on(evt+EVENT_NAMESPACE,function elementToggle(event){$.powerTip.toggle(this,event)})}else{targetElements.on(evt+EVENT_NAMESPACE,function elementOpen(event){$.powerTip.show(this,event)})}});$.each(options.closeEvents,function(idx,evt){if($.inArray(evt,options.openEvents)<0){targetElements.on(evt+EVENT_NAMESPACE,function elementClose(event){$.powerTip.hide(this,!isMouseEvent(event))})}});targetElements.on("keydown"+EVENT_NAMESPACE,function elementKeyDown(event){if(event.keyCode===27){$.powerTip.hide(this,true)}})}return targetElements};$.fn.powerTip.defaults={fadeInTime:200,fadeOutTime:100,followMouse:false,popupId:"powerTip",popupClass:null,intentSensitivity:7,intentPollInterval:100,closeDelay:100,placement:"n",smartPlacement:false,offset:10,mouseOnToPopup:false,manual:false,openEvents:["mouseenter","focus"],closeEvents:["mouseleave","blur"]};$.fn.powerTip.smartPlacementLists={n:["n","ne","nw","s"],e:["e","ne","se","w","nw","sw","n","s","e"],s:["s","se","sw","n"],w:["w","nw","sw","e","ne","se","n","s","w"],nw:["nw","w","sw","n","s","se","nw"],ne:["ne","e","se","n","s","sw","ne"],sw:["sw","w","nw","s","n","ne","sw"],se:["se","e","ne","s","n","nw","se"],"nw-alt":["nw-alt","n","ne-alt","sw-alt","s","se-alt","w","e"],"ne-alt":["ne-alt","n","nw-alt","se-alt","s","sw-alt","e","w"],"sw-alt":["sw-alt","s","se-alt","nw-alt","n","ne-alt","w","e"],"se-alt":["se-alt","s","sw-alt","ne-alt","n","nw-alt","e","w"]};$.powerTip={show:function apiShowTip(element,event){if(isMouseEvent(event)){trackMouse(event);session.previousX=event.pageX;session.previousY=event.pageY;$(element).data(DATA_DISPLAYCONTROLLER).show()}else{$(element).first().data(DATA_DISPLAYCONTROLLER).show(true,true)}return element},reposition:function apiResetPosition(element){$(element).first().data(DATA_DISPLAYCONTROLLER).resetPosition();return element},hide:function apiCloseTip(element,immediate){var displayController;immediate=element?immediate:true;if(element){displayController=$(element).first().data(DATA_DISPLAYCONTROLLER)}else if(session.activeHover){displayController=session.activeHover.data(DATA_DISPLAYCONTROLLER)}if(displayController){displayController.hide(immediate)}return element},toggle:function apiToggle(element,event){if(session.activeHover&&session.activeHover.is(element)){$.powerTip.hide(element,!isMouseEvent(event))}else{$.powerTip.show(element,event)}return element}};$.powerTip.showTip=$.powerTip.show;$.powerTip.closeTip=$.powerTip.hide;function CSSCoordinates(){var me=this;me.top="auto";me.left="auto";me.right="auto";me.bottom="auto";me.set=function(property,value){if($.isNumeric(value)){me[property]=Math.round(value)}}}function DisplayController(element,options,tipController){var hoverTimer=null,myCloseDelay=null;function openTooltip(immediate,forceOpen){cancelTimer();if(!element.data(DATA_HASACTIVEHOVER)){if(!immediate){session.tipOpenImminent=true;hoverTimer=setTimeout(function intentDelay(){hoverTimer=null;checkForIntent()},options.intentPollInterval)}else{if(forceOpen){element.data(DATA_FORCEDOPEN,true)}closeAnyDelayed();tipController.showTip(element)}}else{cancelClose()}}function closeTooltip(disableDelay){if(myCloseDelay){myCloseDelay=session.closeDelayTimeout=clearTimeout(myCloseDelay);session.delayInProgress=false}cancelTimer();session.tipOpenImminent=false;if(element.data(DATA_HASACTIVEHOVER)){element.data(DATA_FORCEDOPEN,false);if(!disableDelay){session.delayInProgress=true;session.closeDelayTimeout=setTimeout(function closeDelay(){session.closeDelayTimeout=null;tipController.hideTip(element);session.delayInProgress=false;myCloseDelay=null},options.closeDelay);myCloseDelay=session.closeDelayTimeout}else{tipController.hideTip(element)}}}function checkForIntent(){var xDifference=Math.abs(session.previousX-session.currentX),yDifference=Math.abs(session.previousY-session.currentY),totalDifference=xDifference+yDifference;if(totalDifference",{id:options.popupId});if($body.length===0){$body=$("body")}$body.append(tipElement);session.tooltips=session.tooltips?session.tooltips.add(tipElement):tipElement}if(options.followMouse){if(!tipElement.data(DATA_HASMOUSEMOVE)){$document.on("mousemove"+EVENT_NAMESPACE,positionTipOnCursor);$window.on("scroll"+EVENT_NAMESPACE,positionTipOnCursor);tipElement.data(DATA_HASMOUSEMOVE,true)}}function beginShowTip(element){element.data(DATA_HASACTIVEHOVER,true);tipElement.queue(function queueTipInit(next){showTip(element);next()})}function showTip(element){var tipContent;if(!element.data(DATA_HASACTIVEHOVER)){return}if(session.isTipOpen){if(!session.isClosing){hideTip(session.activeHover)}tipElement.delay(100).queue(function queueTipAgain(next){showTip(element);next()});return}element.trigger("powerTipPreRender");tipContent=getTooltipContent(element);if(tipContent){tipElement.empty().append(tipContent)}else{return}element.trigger("powerTipRender");session.activeHover=element;session.isTipOpen=true;tipElement.data(DATA_MOUSEONTOTIP,options.mouseOnToPopup);tipElement.addClass(options.popupClass);if(!options.followMouse||element.data(DATA_FORCEDOPEN)){positionTipOnElement(element);session.isFixedTipOpen=true}else{positionTipOnCursor()}if(!element.data(DATA_FORCEDOPEN)&&!options.followMouse){$document.on("click"+EVENT_NAMESPACE,function documentClick(event){var target=event.target;if(target!==element[0]){if(options.mouseOnToPopup){if(target!==tipElement[0]&&!$.contains(tipElement[0],target)){$.powerTip.hide()}}else{$.powerTip.hide()}}})}if(options.mouseOnToPopup&&!options.manual){tipElement.on("mouseenter"+EVENT_NAMESPACE,function tipMouseEnter(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).cancel()}});tipElement.on("mouseleave"+EVENT_NAMESPACE,function tipMouseLeave(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).hide()}})}tipElement.fadeIn(options.fadeInTime,function fadeInCallback(){if(!session.desyncTimeout){session.desyncTimeout=setInterval(closeDesyncedTip,500)}element.trigger("powerTipOpen")})}function hideTip(element){session.isClosing=true;session.isTipOpen=false;session.desyncTimeout=clearInterval(session.desyncTimeout);element.data(DATA_HASACTIVEHOVER,false);element.data(DATA_FORCEDOPEN,false);$document.off("click"+EVENT_NAMESPACE);tipElement.off(EVENT_NAMESPACE);tipElement.fadeOut(options.fadeOutTime,function fadeOutCallback(){var coords=new CSSCoordinates;session.activeHover=null;session.isClosing=false;session.isFixedTipOpen=false;tipElement.removeClass();coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset);tipElement.css(coords);element.trigger("powerTipClose")})}function positionTipOnCursor(){var tipWidth,tipHeight,coords,collisions,collisionCount;if(!session.isFixedTipOpen&&(session.isTipOpen||session.tipOpenImminent&&tipElement.data(DATA_HASMOUSEMOVE))){tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=new CSSCoordinates;coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset);collisions=getViewportCollisions(coords,tipWidth,tipHeight);if(collisions!==Collision.none){collisionCount=countFlags(collisions);if(collisionCount===1){if(collisions===Collision.right){coords.set("left",session.scrollLeft+session.windowWidth-tipWidth)}else if(collisions===Collision.bottom){coords.set("top",session.scrollTop+session.windowHeight-tipHeight)}}else{coords.set("left",session.currentX-tipWidth-options.offset);coords.set("top",session.currentY-tipHeight-options.offset)}}tipElement.css(coords)}}function positionTipOnElement(element){var priorityList,finalPlacement;if(options.smartPlacement||options.followMouse&&element.data(DATA_FORCEDOPEN)){priorityList=$.fn.powerTip.smartPlacementLists[options.placement];$.each(priorityList,function(idx,pos){var collisions=getViewportCollisions(placeTooltip(element,pos),tipElement.outerWidth(),tipElement.outerHeight());finalPlacement=pos;return collisions!==Collision.none})}else{placeTooltip(element,options.placement);finalPlacement=options.placement}tipElement.removeClass("w nw sw e ne se n s w se-alt sw-alt ne-alt nw-alt");tipElement.addClass(finalPlacement)}function placeTooltip(element,placement){var iterationCount=0,tipWidth,tipHeight,coords=new CSSCoordinates;coords.set("top",0);coords.set("left",0);tipElement.css(coords);do{tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=placementCalculator.compute(element,placement,tipWidth,tipHeight,options.offset);tipElement.css(coords)}while(++iterationCount<=5&&(tipWidth!==tipElement.outerWidth()||tipHeight!==tipElement.outerHeight()));return coords}function closeDesyncedTip(){var isDesynced=false,hasDesyncableCloseEvent=$.grep(["mouseleave","mouseout","blur","focusout"],function(eventType){return $.inArray(eventType,options.closeEvents)!==-1}).length>0;if(session.isTipOpen&&!session.isClosing&&!session.delayInProgress&&hasDesyncableCloseEvent){if(session.activeHover.data(DATA_HASACTIVEHOVER)===false||session.activeHover.is(":disabled")){isDesynced=true}else if(!isMouseOver(session.activeHover)&&!session.activeHover.is(":focus")&&!session.activeHover.data(DATA_FORCEDOPEN)){if(tipElement.data(DATA_MOUSEONTOTIP)){if(!isMouseOver(tipElement)){isDesynced=true}}else{isDesynced=true}}if(isDesynced){hideTip(session.activeHover)}}}this.showTip=beginShowTip;this.hideTip=hideTip;this.resetPosition=positionTipOnElement}function isSvgElement(element){return Boolean(window.SVGElement&&element[0]instanceof SVGElement)}function isMouseEvent(event){return Boolean(event&&$.inArray(event.type,MOUSE_EVENTS)>-1&&typeof event.pageX==="number")}function initTracking(){if(!session.mouseTrackingActive){session.mouseTrackingActive=true;getViewportDimensions();$(getViewportDimensions);$document.on("mousemove"+EVENT_NAMESPACE,trackMouse);$window.on("resize"+EVENT_NAMESPACE,trackResize);$window.on("scroll"+EVENT_NAMESPACE,trackScroll)}}function getViewportDimensions(){session.scrollLeft=$window.scrollLeft();session.scrollTop=$window.scrollTop();session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackResize(){session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackScroll(){var x=$window.scrollLeft(),y=$window.scrollTop();if(x!==session.scrollLeft){session.currentX+=x-session.scrollLeft;session.scrollLeft=x}if(y!==session.scrollTop){session.currentY+=y-session.scrollTop;session.scrollTop=y}}function trackMouse(event){session.currentX=event.pageX;session.currentY=event.pageY}function isMouseOver(element){var elementPosition=element.offset(),elementBox=element[0].getBoundingClientRect(),elementWidth=elementBox.right-elementBox.left,elementHeight=elementBox.bottom-elementBox.top;return session.currentX>=elementPosition.left&&session.currentX<=elementPosition.left+elementWidth&&session.currentY>=elementPosition.top&&session.currentY<=elementPosition.top+elementHeight}function getTooltipContent(element){var tipText=element.data(DATA_POWERTIP),tipObject=element.data(DATA_POWERTIPJQ),tipTarget=element.data(DATA_POWERTIPTARGET),targetElement,content;if(tipText){if($.isFunction(tipText)){tipText=tipText.call(element[0])}content=tipText}else if(tipObject){if($.isFunction(tipObject)){tipObject=tipObject.call(element[0])}if(tipObject.length>0){content=tipObject.clone(true,true)}}else if(tipTarget){targetElement=$("#"+tipTarget);if(targetElement.length>0){content=targetElement.html()}}return content}function getViewportCollisions(coords,elementWidth,elementHeight){var viewportTop=session.scrollTop,viewportLeft=session.scrollLeft,viewportBottom=viewportTop+session.windowHeight,viewportRight=viewportLeft+session.windowWidth,collisions=Collision.none;if(coords.topviewportBottom||Math.abs(coords.bottom-session.windowHeight)>viewportBottom){collisions|=Collision.bottom}if(coords.leftviewportRight){collisions|=Collision.left}if(coords.left+elementWidth>viewportRight||coords.right1)){a.preventDefault();var c=a.originalEvent.changedTouches[0],d=document.createEvent("MouseEvents");d.initMouseEvent(b,!0,!0,window,1,c.screenX,c.screenY,c.clientX,c.clientY,!1,!1,!1,!1,0,null),a.target.dispatchEvent(d)}}if(a.support.touch="ontouchend"in document,a.support.touch){var e,b=a.ui.mouse.prototype,c=b._mouseInit,d=b._mouseDestroy;b._touchStart=function(a){var b=this;!e&&b._mouseCapture(a.originalEvent.changedTouches[0])&&(e=!0,b._touchMoved=!1,f(a,"mouseover"),f(a,"mousemove"),f(a,"mousedown"))},b._touchMove=function(a){e&&(this._touchMoved=!0,f(a,"mousemove"))},b._touchEnd=function(a){e&&(f(a,"mouseup"),f(a,"mouseout"),this._touchMoved||f(a,"click"),e=!1)},b._mouseInit=function(){var b=this;b.element.bind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),c.call(b)},b._mouseDestroy=function(){var b=this;b.element.unbind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),d.call(b)}}}(jQuery);/*! SmartMenus jQuery Plugin - v1.1.0 - September 17, 2017 - * http://www.smartmenus.org/ - * Copyright Vasil Dinkov, Vadikom Web Ltd. http://vadikom.com; Licensed MIT */(function(t){"function"==typeof define&&define.amd?define(["jquery"],t):"object"==typeof module&&"object"==typeof module.exports?module.exports=t(require("jquery")):t(jQuery)})(function($){function initMouseDetection(t){var e=".smartmenus_mouse";if(mouseDetectionEnabled||t)mouseDetectionEnabled&&t&&($(document).off(e),mouseDetectionEnabled=!1);else{var i=!0,s=null,o={mousemove:function(t){var e={x:t.pageX,y:t.pageY,timeStamp:(new Date).getTime()};if(s){var o=Math.abs(s.x-e.x),a=Math.abs(s.y-e.y);if((o>0||a>0)&&2>=o&&2>=a&&300>=e.timeStamp-s.timeStamp&&(mouse=!0,i)){var n=$(t.target).closest("a");n.is("a")&&$.each(menuTrees,function(){return $.contains(this.$root[0],n[0])?(this.itemEnter({currentTarget:n[0]}),!1):void 0}),i=!1}}s=e}};o[touchEvents?"touchstart":"pointerover pointermove pointerout MSPointerOver MSPointerMove MSPointerOut"]=function(t){isTouchEvent(t.originalEvent)&&(mouse=!1)},$(document).on(getEventsNS(o,e)),mouseDetectionEnabled=!0}}function isTouchEvent(t){return!/^(4|mouse)$/.test(t.pointerType)}function getEventsNS(t,e){e||(e="");var i={};for(var s in t)i[s.split(" ").join(e+" ")+e]=t[s];return i}var menuTrees=[],mouse=!1,touchEvents="ontouchstart"in window,mouseDetectionEnabled=!1,requestAnimationFrame=window.requestAnimationFrame||function(t){return setTimeout(t,1e3/60)},cancelAnimationFrame=window.cancelAnimationFrame||function(t){clearTimeout(t)},canAnimate=!!$.fn.animate;return $.SmartMenus=function(t,e){this.$root=$(t),this.opts=e,this.rootId="",this.accessIdPrefix="",this.$subArrow=null,this.activatedItems=[],this.visibleSubMenus=[],this.showTimeout=0,this.hideTimeout=0,this.scrollTimeout=0,this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.idInc=0,this.$firstLink=null,this.$firstSub=null,this.disabled=!1,this.$disableOverlay=null,this.$touchScrollingSub=null,this.cssTransforms3d="perspective"in t.style||"webkitPerspective"in t.style,this.wasCollapsible=!1,this.init()},$.extend($.SmartMenus,{hideAll:function(){$.each(menuTrees,function(){this.menuHideAll()})},destroy:function(){for(;menuTrees.length;)menuTrees[0].destroy();initMouseDetection(!0)},prototype:{init:function(t){var e=this;if(!t){menuTrees.push(this),this.rootId=((new Date).getTime()+Math.random()+"").replace(/\D/g,""),this.accessIdPrefix="sm-"+this.rootId+"-",this.$root.hasClass("sm-rtl")&&(this.opts.rightToLeftSubMenus=!0);var i=".smartmenus";this.$root.data("smartmenus",this).attr("data-smartmenus-id",this.rootId).dataSM("level",1).on(getEventsNS({"mouseover focusin":$.proxy(this.rootOver,this),"mouseout focusout":$.proxy(this.rootOut,this),keydown:$.proxy(this.rootKeyDown,this)},i)).on(getEventsNS({mouseenter:$.proxy(this.itemEnter,this),mouseleave:$.proxy(this.itemLeave,this),mousedown:$.proxy(this.itemDown,this),focus:$.proxy(this.itemFocus,this),blur:$.proxy(this.itemBlur,this),click:$.proxy(this.itemClick,this)},i),"a"),i+=this.rootId,this.opts.hideOnClick&&$(document).on(getEventsNS({touchstart:$.proxy(this.docTouchStart,this),touchmove:$.proxy(this.docTouchMove,this),touchend:$.proxy(this.docTouchEnd,this),click:$.proxy(this.docClick,this)},i)),$(window).on(getEventsNS({"resize orientationchange":$.proxy(this.winResize,this)},i)),this.opts.subIndicators&&(this.$subArrow=$("").addClass("sub-arrow"),this.opts.subIndicatorsText&&this.$subArrow.html(this.opts.subIndicatorsText)),initMouseDetection()}if(this.$firstSub=this.$root.find("ul").each(function(){e.menuInit($(this))}).eq(0),this.$firstLink=this.$root.find("a").eq(0),this.opts.markCurrentItem){var s=/(index|default)\.[^#\?\/]*/i,o=/#.*/,a=window.location.href.replace(s,""),n=a.replace(o,"");this.$root.find("a").each(function(){var t=this.href.replace(s,""),i=$(this);(t==a||t==n)&&(i.addClass("current"),e.opts.markCurrentTree&&i.parentsUntil("[data-smartmenus-id]","ul").each(function(){$(this).dataSM("parent-a").addClass("current")}))})}this.wasCollapsible=this.isCollapsible()},destroy:function(t){if(!t){var e=".smartmenus";this.$root.removeData("smartmenus").removeAttr("data-smartmenus-id").removeDataSM("level").off(e),e+=this.rootId,$(document).off(e),$(window).off(e),this.opts.subIndicators&&(this.$subArrow=null)}this.menuHideAll();var i=this;this.$root.find("ul").each(function(){var t=$(this);t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.dataSM("shown-before")&&((i.opts.subMenusMinWidth||i.opts.subMenusMaxWidth)&&t.css({width:"",minWidth:"",maxWidth:""}).removeClass("sm-nowrap"),t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.css({zIndex:"",top:"",left:"",marginLeft:"",marginTop:"",display:""})),0==(t.attr("id")||"").indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeDataSM("in-mega").removeDataSM("shown-before").removeDataSM("scroll-arrows").removeDataSM("parent-a").removeDataSM("level").removeDataSM("beforefirstshowfired").removeAttr("role").removeAttr("aria-hidden").removeAttr("aria-labelledby").removeAttr("aria-expanded"),this.$root.find("a.has-submenu").each(function(){var t=$(this);0==t.attr("id").indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeClass("has-submenu").removeDataSM("sub").removeAttr("aria-haspopup").removeAttr("aria-controls").removeAttr("aria-expanded").closest("li").removeDataSM("sub"),this.opts.subIndicators&&this.$root.find("span.sub-arrow").remove(),this.opts.markCurrentItem&&this.$root.find("a.current").removeClass("current"),t||(this.$root=null,this.$firstLink=null,this.$firstSub=null,this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),menuTrees.splice($.inArray(this,menuTrees),1))},disable:function(t){if(!this.disabled){if(this.menuHideAll(),!t&&!this.opts.isPopup&&this.$root.is(":visible")){var e=this.$root.offset();this.$disableOverlay=$('
').css({position:"absolute",top:e.top,left:e.left,width:this.$root.outerWidth(),height:this.$root.outerHeight(),zIndex:this.getStartZIndex(!0),opacity:0}).appendTo(document.body)}this.disabled=!0}},docClick:function(t){return this.$touchScrollingSub?(this.$touchScrollingSub=null,void 0):((this.visibleSubMenus.length&&!$.contains(this.$root[0],t.target)||$(t.target).closest("a").length)&&this.menuHideAll(),void 0)},docTouchEnd:function(){if(this.lastTouch){if(!(!this.visibleSubMenus.length||void 0!==this.lastTouch.x2&&this.lastTouch.x1!=this.lastTouch.x2||void 0!==this.lastTouch.y2&&this.lastTouch.y1!=this.lastTouch.y2||this.lastTouch.target&&$.contains(this.$root[0],this.lastTouch.target))){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var t=this;this.hideTimeout=setTimeout(function(){t.menuHideAll()},350)}this.lastTouch=null}},docTouchMove:function(t){if(this.lastTouch){var e=t.originalEvent.touches[0];this.lastTouch.x2=e.pageX,this.lastTouch.y2=e.pageY}},docTouchStart:function(t){var e=t.originalEvent.touches[0];this.lastTouch={x1:e.pageX,y1:e.pageY,target:e.target}},enable:function(){this.disabled&&(this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),this.disabled=!1)},getClosestMenu:function(t){for(var e=$(t).closest("ul");e.dataSM("in-mega");)e=e.parent().closest("ul");return e[0]||null},getHeight:function(t){return this.getOffset(t,!0)},getOffset:function(t,e){var i;"none"==t.css("display")&&(i={position:t[0].style.position,visibility:t[0].style.visibility},t.css({position:"absolute",visibility:"hidden"}).show());var s=t[0].getBoundingClientRect&&t[0].getBoundingClientRect(),o=s&&(e?s.height||s.bottom-s.top:s.width||s.right-s.left);return o||0===o||(o=e?t[0].offsetHeight:t[0].offsetWidth),i&&t.hide().css(i),o},getStartZIndex:function(t){var e=parseInt(this[t?"$root":"$firstSub"].css("z-index"));return!t&&isNaN(e)&&(e=parseInt(this.$root.css("z-index"))),isNaN(e)?1:e},getTouchPoint:function(t){return t.touches&&t.touches[0]||t.changedTouches&&t.changedTouches[0]||t},getViewport:function(t){var e=t?"Height":"Width",i=document.documentElement["client"+e],s=window["inner"+e];return s&&(i=Math.min(i,s)),i},getViewportHeight:function(){return this.getViewport(!0)},getViewportWidth:function(){return this.getViewport()},getWidth:function(t){return this.getOffset(t)},handleEvents:function(){return!this.disabled&&this.isCSSOn()},handleItemEvents:function(t){return this.handleEvents()&&!this.isLinkInMegaMenu(t)},isCollapsible:function(){return"static"==this.$firstSub.css("position")},isCSSOn:function(){return"inline"!=this.$firstLink.css("display")},isFixed:function(){var t="fixed"==this.$root.css("position");return t||this.$root.parentsUntil("body").each(function(){return"fixed"==$(this).css("position")?(t=!0,!1):void 0}),t},isLinkInMegaMenu:function(t){return $(this.getClosestMenu(t[0])).hasClass("mega-menu")},isTouchMode:function(){return!mouse||this.opts.noMouseOver||this.isCollapsible()},itemActivate:function(t,e){var i=t.closest("ul"),s=i.dataSM("level");if(s>1&&(!this.activatedItems[s-2]||this.activatedItems[s-2][0]!=i.dataSM("parent-a")[0])){var o=this;$(i.parentsUntil("[data-smartmenus-id]","ul").get().reverse()).add(i).each(function(){o.itemActivate($(this).dataSM("parent-a"))})}if((!this.isCollapsible()||e)&&this.menuHideSubMenus(this.activatedItems[s-1]&&this.activatedItems[s-1][0]==t[0]?s:s-1),this.activatedItems[s-1]=t,this.$root.triggerHandler("activate.smapi",t[0])!==!1){var a=t.dataSM("sub");a&&(this.isTouchMode()||!this.opts.showOnClick||this.clickActivated)&&this.menuShow(a)}},itemBlur:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&this.$root.triggerHandler("blur.smapi",e[0])},itemClick:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(this.$touchScrollingSub&&this.$touchScrollingSub[0]==e.closest("ul")[0])return this.$touchScrollingSub=null,t.stopPropagation(),!1;if(this.$root.triggerHandler("click.smapi",e[0])===!1)return!1;var i=$(t.target).is(".sub-arrow"),s=e.dataSM("sub"),o=s?2==s.dataSM("level"):!1,a=this.isCollapsible(),n=/toggle$/.test(this.opts.collapsibleBehavior),r=/link$/.test(this.opts.collapsibleBehavior),h=/^accordion/.test(this.opts.collapsibleBehavior);if(s&&!s.is(":visible")){if((!r||!a||i)&&(this.opts.showOnClick&&o&&(this.clickActivated=!0),this.itemActivate(e,h),s.is(":visible")))return this.focusActivated=!0,!1}else if(a&&(n||i))return this.itemActivate(e,h),this.menuHide(s),n&&(this.focusActivated=!1),!1;return this.opts.showOnClick&&o||e.hasClass("disabled")||this.$root.triggerHandler("select.smapi",e[0])===!1?!1:void 0}},itemDown:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&e.dataSM("mousedown",!0)},itemEnter:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(!this.isTouchMode()){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);var i=this;this.showTimeout=setTimeout(function(){i.itemActivate(e)},this.opts.showOnClick&&1==e.closest("ul").dataSM("level")?1:this.opts.showTimeout)}this.$root.triggerHandler("mouseenter.smapi",e[0])}},itemFocus:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(!this.focusActivated||this.isTouchMode()&&e.dataSM("mousedown")||this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0]==e[0]||this.itemActivate(e,!0),this.$root.triggerHandler("focus.smapi",e[0]))},itemLeave:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(this.isTouchMode()||(e[0].blur(),this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0)),e.removeDataSM("mousedown"),this.$root.triggerHandler("mouseleave.smapi",e[0]))},menuHide:function(t){if(this.$root.triggerHandler("beforehide.smapi",t[0])!==!1&&(canAnimate&&t.stop(!0,!0),"none"!=t.css("display"))){var e=function(){t.css("z-index","")};this.isCollapsible()?canAnimate&&this.opts.collapsibleHideFunction?this.opts.collapsibleHideFunction.call(this,t,e):t.hide(this.opts.collapsibleHideDuration,e):canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,t,e):t.hide(this.opts.hideDuration,e),t.dataSM("scroll")&&(this.menuScrollStop(t),t.css({"touch-action":"","-ms-touch-action":"","-webkit-transform":"",transform:""}).off(".smartmenus_scroll").removeDataSM("scroll").dataSM("scroll-arrows").hide()),t.dataSM("parent-a").removeClass("highlighted").attr("aria-expanded","false"),t.attr({"aria-expanded":"false","aria-hidden":"true"});var i=t.dataSM("level");this.activatedItems.splice(i-1,1),this.visibleSubMenus.splice($.inArray(t,this.visibleSubMenus),1),this.$root.triggerHandler("hide.smapi",t[0])}},menuHideAll:function(){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);for(var t=this.opts.isPopup?1:0,e=this.visibleSubMenus.length-1;e>=t;e--)this.menuHide(this.visibleSubMenus[e]);this.opts.isPopup&&(canAnimate&&this.$root.stop(!0,!0),this.$root.is(":visible")&&(canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,this.$root):this.$root.hide(this.opts.hideDuration))),this.activatedItems=[],this.visibleSubMenus=[],this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.$root.triggerHandler("hideAll.smapi")},menuHideSubMenus:function(t){for(var e=this.activatedItems.length-1;e>=t;e--){var i=this.activatedItems[e].dataSM("sub");i&&this.menuHide(i)}},menuInit:function(t){if(!t.dataSM("in-mega")){t.hasClass("mega-menu")&&t.find("ul").dataSM("in-mega",!0);for(var e=2,i=t[0];(i=i.parentNode.parentNode)!=this.$root[0];)e++;var s=t.prevAll("a").eq(-1);s.length||(s=t.prevAll().find("a").eq(-1)),s.addClass("has-submenu").dataSM("sub",t),t.dataSM("parent-a",s).dataSM("level",e).parent().dataSM("sub",t);var o=s.attr("id")||this.accessIdPrefix+ ++this.idInc,a=t.attr("id")||this.accessIdPrefix+ ++this.idInc;s.attr({id:o,"aria-haspopup":"true","aria-controls":a,"aria-expanded":"false"}),t.attr({id:a,role:"group","aria-hidden":"true","aria-labelledby":o,"aria-expanded":"false"}),this.opts.subIndicators&&s[this.opts.subIndicatorsPos](this.$subArrow.clone())}},menuPosition:function(t){var e,i,s=t.dataSM("parent-a"),o=s.closest("li"),a=o.parent(),n=t.dataSM("level"),r=this.getWidth(t),h=this.getHeight(t),u=s.offset(),l=u.left,c=u.top,d=this.getWidth(s),m=this.getHeight(s),p=$(window),f=p.scrollLeft(),v=p.scrollTop(),b=this.getViewportWidth(),S=this.getViewportHeight(),g=a.parent().is("[data-sm-horizontal-sub]")||2==n&&!a.hasClass("sm-vertical"),M=this.opts.rightToLeftSubMenus&&!o.is("[data-sm-reverse]")||!this.opts.rightToLeftSubMenus&&o.is("[data-sm-reverse]"),w=2==n?this.opts.mainMenuSubOffsetX:this.opts.subMenusSubOffsetX,T=2==n?this.opts.mainMenuSubOffsetY:this.opts.subMenusSubOffsetY;if(g?(e=M?d-r-w:w,i=this.opts.bottomToTopSubMenus?-h-T:m+T):(e=M?w-r:d-w,i=this.opts.bottomToTopSubMenus?m-T-h:T),this.opts.keepInViewport){var y=l+e,I=c+i;if(M&&f>y?e=g?f-y+e:d-w:!M&&y+r>f+b&&(e=g?f+b-r-y+e:w-r),g||(S>h&&I+h>v+S?i+=v+S-h-I:(h>=S||v>I)&&(i+=v-I)),g&&(I+h>v+S+.49||v>I)||!g&&h>S+.49){var x=this;t.dataSM("scroll-arrows")||t.dataSM("scroll-arrows",$([$('')[0],$('')[0]]).on({mouseenter:function(){t.dataSM("scroll").up=$(this).hasClass("scroll-up"),x.menuScroll(t)},mouseleave:function(e){x.menuScrollStop(t),x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(t){t.preventDefault()}}).insertAfter(t));var A=".smartmenus_scroll";if(t.dataSM("scroll",{y:this.cssTransforms3d?0:i-m,step:1,itemH:m,subH:h,arrowDownH:this.getHeight(t.dataSM("scroll-arrows").eq(1))}).on(getEventsNS({mouseover:function(e){x.menuScrollOver(t,e)},mouseout:function(e){x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(e){x.menuScrollMousewheel(t,e)}},A)).dataSM("scroll-arrows").css({top:"auto",left:"0",marginLeft:e+(parseInt(t.css("border-left-width"))||0),width:r-(parseInt(t.css("border-left-width"))||0)-(parseInt(t.css("border-right-width"))||0),zIndex:t.css("z-index")}).eq(g&&this.opts.bottomToTopSubMenus?0:1).show(),this.isFixed()){var C={};C[touchEvents?"touchstart touchmove touchend":"pointerdown pointermove pointerup MSPointerDown MSPointerMove MSPointerUp"]=function(e){x.menuScrollTouch(t,e)},t.css({"touch-action":"none","-ms-touch-action":"none"}).on(getEventsNS(C,A))}}}t.css({top:"auto",left:"0",marginLeft:e,marginTop:i-m})},menuScroll:function(t,e,i){var s,o=t.dataSM("scroll"),a=t.dataSM("scroll-arrows"),n=o.up?o.upEnd:o.downEnd;if(!e&&o.momentum){if(o.momentum*=.92,s=o.momentum,.5>s)return this.menuScrollStop(t),void 0}else s=i||(e||!this.opts.scrollAccelerate?this.opts.scrollStep:Math.floor(o.step));var r=t.dataSM("level");if(this.activatedItems[r-1]&&this.activatedItems[r-1].dataSM("sub")&&this.activatedItems[r-1].dataSM("sub").is(":visible")&&this.menuHideSubMenus(r-1),o.y=o.up&&o.y>=n||!o.up&&n>=o.y?o.y:Math.abs(n-o.y)>s?o.y+(o.up?s:-s):n,t.css(this.cssTransforms3d?{"-webkit-transform":"translate3d(0, "+o.y+"px, 0)",transform:"translate3d(0, "+o.y+"px, 0)"}:{marginTop:o.y}),mouse&&(o.up&&o.y>o.downEnd||!o.up&&o.y0;t.dataSM("scroll-arrows").eq(i?0:1).is(":visible")&&(t.dataSM("scroll").up=i,this.menuScroll(t,!0))}e.preventDefault()},menuScrollOut:function(t,e){mouse&&(/^scroll-(up|down)/.test((e.relatedTarget||"").className)||(t[0]==e.relatedTarget||$.contains(t[0],e.relatedTarget))&&this.getClosestMenu(e.relatedTarget)==t[0]||t.dataSM("scroll-arrows").css("visibility","hidden"))},menuScrollOver:function(t,e){if(mouse&&!/^scroll-(up|down)/.test(e.target.className)&&this.getClosestMenu(e.target)==t[0]){this.menuScrollRefreshData(t);var i=t.dataSM("scroll"),s=$(window).scrollTop()-t.dataSM("parent-a").offset().top-i.itemH;t.dataSM("scroll-arrows").eq(0).css("margin-top",s).end().eq(1).css("margin-top",s+this.getViewportHeight()-i.arrowDownH).end().css("visibility","visible")}},menuScrollRefreshData:function(t){var e=t.dataSM("scroll"),i=$(window).scrollTop()-t.dataSM("parent-a").offset().top-e.itemH;this.cssTransforms3d&&(i=-(parseFloat(t.css("margin-top"))-i)),$.extend(e,{upEnd:i,downEnd:i+this.getViewportHeight()-e.subH})},menuScrollStop:function(t){return this.scrollTimeout?(cancelAnimationFrame(this.scrollTimeout),this.scrollTimeout=0,t.dataSM("scroll").step=1,!0):void 0},menuScrollTouch:function(t,e){if(e=e.originalEvent,isTouchEvent(e)){var i=this.getTouchPoint(e);if(this.getClosestMenu(i.target)==t[0]){var s=t.dataSM("scroll");if(/(start|down)$/i.test(e.type))this.menuScrollStop(t)?(e.preventDefault(),this.$touchScrollingSub=t):this.$touchScrollingSub=null,this.menuScrollRefreshData(t),$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp});else if(/move$/i.test(e.type)){var o=void 0!==s.touchY?s.touchY:s.touchStartY;if(void 0!==o&&o!=i.pageY){this.$touchScrollingSub=t;var a=i.pageY>o;void 0!==s.up&&s.up!=a&&$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp}),$.extend(s,{up:a,touchY:i.pageY}),this.menuScroll(t,!0,Math.abs(i.pageY-o))}e.preventDefault()}else void 0!==s.touchY&&((s.momentum=15*Math.pow(Math.abs(i.pageY-s.touchStartY)/(e.timeStamp-s.touchStartTime),2))&&(this.menuScrollStop(t),this.menuScroll(t),e.preventDefault()),delete s.touchY)}}},menuShow:function(t){if((t.dataSM("beforefirstshowfired")||(t.dataSM("beforefirstshowfired",!0),this.$root.triggerHandler("beforefirstshow.smapi",t[0])!==!1))&&this.$root.triggerHandler("beforeshow.smapi",t[0])!==!1&&(t.dataSM("shown-before",!0),canAnimate&&t.stop(!0,!0),!t.is(":visible"))){var e=t.dataSM("parent-a"),i=this.isCollapsible();if((this.opts.keepHighlighted||i)&&e.addClass("highlighted"),i)t.removeClass("sm-nowrap").css({zIndex:"",width:"auto",minWidth:"",maxWidth:"",top:"",left:"",marginLeft:"",marginTop:""});else{if(t.css("z-index",this.zIndexInc=(this.zIndexInc||this.getStartZIndex())+1),(this.opts.subMenusMinWidth||this.opts.subMenusMaxWidth)&&(t.css({width:"auto",minWidth:"",maxWidth:""}).addClass("sm-nowrap"),this.opts.subMenusMinWidth&&t.css("min-width",this.opts.subMenusMinWidth),this.opts.subMenusMaxWidth)){var s=this.getWidth(t);t.css("max-width",this.opts.subMenusMaxWidth),s>this.getWidth(t)&&t.removeClass("sm-nowrap").css("width",this.opts.subMenusMaxWidth)}this.menuPosition(t)}var o=function(){t.css("overflow","")};i?canAnimate&&this.opts.collapsibleShowFunction?this.opts.collapsibleShowFunction.call(this,t,o):t.show(this.opts.collapsibleShowDuration,o):canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,t,o):t.show(this.opts.showDuration,o),e.attr("aria-expanded","true"),t.attr({"aria-expanded":"true","aria-hidden":"false"}),this.visibleSubMenus.push(t),this.$root.triggerHandler("show.smapi",t[0])}},popupHide:function(t){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},t?1:this.opts.hideTimeout)},popupShow:function(t,e){if(!this.opts.isPopup)return alert('SmartMenus jQuery Error:\n\nIf you want to show this menu via the "popupShow" method, set the isPopup:true option.'),void 0;if(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),this.$root.dataSM("shown-before",!0),canAnimate&&this.$root.stop(!0,!0),!this.$root.is(":visible")){this.$root.css({left:t,top:e});var i=this,s=function(){i.$root.css("overflow","")};canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,this.$root,s):this.$root.show(this.opts.showDuration,s),this.visibleSubMenus[0]=this.$root}},refresh:function(){this.destroy(!0),this.init(!0)},rootKeyDown:function(t){if(this.handleEvents())switch(t.keyCode){case 27:var e=this.activatedItems[0];if(e){this.menuHideAll(),e[0].focus();var i=e.dataSM("sub");i&&this.menuHide(i)}break;case 32:var s=$(t.target);if(s.is("a")&&this.handleItemEvents(s)){var i=s.dataSM("sub");i&&!i.is(":visible")&&(this.itemClick({currentTarget:t.target}),t.preventDefault())}}},rootOut:function(t){if(this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),!this.opts.showOnClick||!this.opts.hideOnClick)){var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},this.opts.hideTimeout)}},rootOver:function(t){this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0)},winResize:function(t){if(this.handleEvents()){if(!("onorientationchange"in window)||"orientationchange"==t.type){var e=this.isCollapsible();this.wasCollapsible&&e||(this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0].blur(),this.menuHideAll()),this.wasCollapsible=e}}else if(this.$disableOverlay){var i=this.$root.offset();this.$disableOverlay.css({top:i.top,left:i.left,width:this.$root.outerWidth(),height:this.$root.outerHeight()})}}}}),$.fn.dataSM=function(t,e){return e?this.data(t+"_smartmenus",e):this.data(t+"_smartmenus")},$.fn.removeDataSM=function(t){return this.removeData(t+"_smartmenus")},$.fn.smartmenus=function(options){if("string"==typeof options){var args=arguments,method=options;return Array.prototype.shift.call(args),this.each(function(){var t=$(this).data("smartmenus");t&&t[method]&&t[method].apply(t,args)})}return this.each(function(){var dataOpts=$(this).data("sm-options")||null;if(dataOpts)try{dataOpts=eval("("+dataOpts+")")}catch(e){dataOpts=null,alert('ERROR\n\nSmartMenus jQuery init:\nInvalid "data-sm-options" attribute value syntax.')}new $.SmartMenus(this,$.extend({},$.fn.smartmenus.defaults,options,dataOpts))})},$.fn.smartmenus.defaults={isPopup:!1,mainMenuSubOffsetX:0,mainMenuSubOffsetY:0,subMenusSubOffsetX:0,subMenusSubOffsetY:0,subMenusMinWidth:"10em",subMenusMaxWidth:"20em",subIndicators:!0,subIndicatorsPos:"append",subIndicatorsText:"",scrollStep:30,scrollAccelerate:!0,showTimeout:250,hideTimeout:500,showDuration:0,showFunction:null,hideDuration:0,hideFunction:function(t,e){t.fadeOut(200,e)},collapsibleShowDuration:0,collapsibleShowFunction:function(t,e){t.slideDown(200,e)},collapsibleHideDuration:0,collapsibleHideFunction:function(t,e){t.slideUp(200,e)},showOnClick:!1,hideOnClick:!0,noMouseOver:!1,keepInViewport:!0,keepHighlighted:!0,markCurrentItem:!1,markCurrentTree:!0,rightToLeftSubMenus:!1,bottomToTopSubMenus:!1,collapsibleBehavior:"default"},$}); \ No newline at end of file diff --git a/docs/html/linked-list_8h.html b/docs/html/linked-list_8h.html deleted file mode 100644 index 905c741..0000000 --- a/docs/html/linked-list_8h.html +++ /dev/null @@ -1,493 +0,0 @@ - - - - - - - -µEvLoop: include/uevloop/utils/linked-list.h File Reference - - - - - - - - - -
-
- - - - - - -
-
µEvLoop -
-
A fast and lightweight event loop aimed at embedded platforms in C99.
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
linked-list.h File Reference
-
-
- -

Defines a simple implementation of linked lists and functions to manipulate it. -More...

-
-Include dependency graph for linked-list.h:
-
-
- - - - -
-
-This graph shows which files directly or indirectly include this file:
-
-
- - - - - - - - - - - - -
-
-

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...
 
-

Detailed Description

-

Defines a simple implementation of linked lists and functions to manipulate it.

-

Function Documentation

- -

◆ uel_llist_init()

- -
-
- - - - - - - - -
void uel_llist_init (uel_llist_t * list)
-
- -

Initialised a linked list.

-
Parameters
- - -
listThe list to be initialised. It will be empty after initialisation.
-
-
- -
-
- -

◆ uel_llist_insert_at()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
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.

-
Parameters
- - - - -
listThe list to insert the node at
nodeThe node to be inserted
should_insertA 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_peek_head()

- -
-
- - - - - - - - -
uel_llist_node_t* uel_llist_peek_head (uel_llist_t * list)
-
- -

Peeks the element at the head of the list.

-
Parameters
- - -
listThe list from where the node will be peeked
-
-
-
Returns
node A pointer to the peeked node if it exists. Otherwise, NULL.
- -
-
- -

◆ uel_llist_peek_tail()

- -
-
- - - - - - - - -
uel_llist_node_t* uel_llist_peek_tail (uel_llist_t * list)
-
- -

Peeks the element at the tail of the list.

-
Parameters
- - -
listThe list from where the node will be peeked
-
-
-
Returns
node A pointer to the peeked node if it exists. Otherwise, NULL.
- -
-
- -

◆ uel_llist_pop_head()

- -
-
- - - - - - - - -
uel_llist_node_t* uel_llist_pop_head (uel_llist_t * list)
-
- -

Pops a node from the head of the list.

-
Parameters
- - -
listThe list from where the node will be popped
-
-
-
Returns
node A pointer to the popped node if it exists. Otherwise, NULL.
- -
-
- -

◆ uel_llist_pop_tail()

- -
-
- - - - - - - - -
uel_llist_node_t* uel_llist_pop_tail (uel_llist_t * list)
-
- -

Pops a node from the tail of the list.

-
Parameters
- - -
listThe list from where the node will be popped
-
-
-
Returns
node A pointer to the popped node if it exists. Otherwise, NULL.
- -
-
- -

◆ uel_llist_push_head()

- -
-
- - - - - - - - - - - - - - - - - - -
void uel_llist_push_head (uel_llist_t * list,
uel_llist_node_t * node 
)
-
- -

Pushes a node to the head of the list.

-
Parameters
- - - -
listThe list into which to insert the node
nodeThe node to be inserted.
-
-
- -
-
- -

◆ uel_llist_push_tail()

- -
-
- - - - - - - - - - - - - - - - - - -
void uel_llist_push_tail (uel_llist_t * list,
uel_llist_node_t * node 
)
-
- -

Pushes a node to the tail of the list.

-
Parameters
- - - -
listThe list into which to insert the node
nodeThe node to be inserted.
-
-
- -
-
- -

◆ uel_llist_remove()

- -
-
- - - - - - - - - - - - - - - - - - -
bool uel_llist_remove (uel_llist_t * list,
uel_llist_node_t * node 
)
-
- -

Removes a node from the queue.

-
Parameters
- - - -
listThe list from where the node will be removed
nodeAddress of the node being removed
-
-
-
Returns
Whether the node was found and removed
- -
-
- -

◆ uel_llist_remove_while()

- -
-
- - - - - - - - - - - - - - - - - - -
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.

-
Parameters
- - - -
listThe list from where to pop nodes
should_removeA 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.
-
-
-
Returns
A new list containing the removed nodes, in their original order.
- -
-
-
- - - - diff --git a/docs/html/linked-list_8h__dep__incl.map b/docs/html/linked-list_8h__dep__incl.map deleted file mode 100644 index a2880b2..0000000 --- a/docs/html/linked-list_8h__dep__incl.map +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - diff --git a/docs/html/linked-list_8h__dep__incl.md5 b/docs/html/linked-list_8h__dep__incl.md5 deleted file mode 100644 index 5ce843b..0000000 --- a/docs/html/linked-list_8h__dep__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -f1d246f913f5566cd4f095d688e50341 \ No newline at end of file diff --git a/docs/html/linked-list_8h__dep__incl.png b/docs/html/linked-list_8h__dep__incl.png deleted file mode 100644 index 601e777..0000000 Binary files a/docs/html/linked-list_8h__dep__incl.png and /dev/null differ diff --git a/docs/html/linked-list_8h__incl.map b/docs/html/linked-list_8h__incl.map deleted file mode 100644 index 7c882b7..0000000 --- a/docs/html/linked-list_8h__incl.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/docs/html/linked-list_8h__incl.md5 b/docs/html/linked-list_8h__incl.md5 deleted file mode 100644 index 05047fc..0000000 --- a/docs/html/linked-list_8h__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -1a1bdd1d4007500996ee0b05309c73dd \ No newline at end of file diff --git a/docs/html/linked-list_8h__incl.png b/docs/html/linked-list_8h__incl.png deleted file mode 100644 index 2177760..0000000 Binary files a/docs/html/linked-list_8h__incl.png and /dev/null differ diff --git a/docs/html/linked-list_8h_source.html b/docs/html/linked-list_8h_source.html deleted file mode 100644 index df83f9c..0000000 --- a/docs/html/linked-list_8h_source.html +++ /dev/null @@ -1,142 +0,0 @@ - - - - - - - -µEvLoop: include/uevloop/utils/linked-list.h Source File - - - - - - - - - -
-
- - - - - - -
-
µEvLoop -
-
A fast and lightweight event loop aimed at embedded platforms in C99.
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
linked-list.h
-
-
-Go to the documentation of this file.
1 
-
6 #ifndef UEL_LINKED_LIST_H
-
7 #define UEL_LINKED_LIST_H
-
8 
-
10 #include <stdint.h>
-
11 #include <stdbool.h>
-
13 
-
14 #include "uevloop/utils/closure.h"
-
15 
-
17 typedef struct uel_llist_node uel_llist_node_t;
- -
20  void *value;
-
22  uel_llist_node_t *next;
-
23 };
-
24 
-
28 typedef struct uel_llist uel_llist_t;
-
29 struct uel_llist{
-
31  uel_llist_node_t *head;
-
33  uel_llist_node_t *tail;
-
35  uintptr_t count;
-
36 };
-
37 
-
42 void uel_llist_init(uel_llist_t *list);
-
43 
-
49 void uel_llist_push_head(uel_llist_t *list, uel_llist_node_t *node);
-
50 
-
56 void uel_llist_push_tail(uel_llist_t *list, uel_llist_node_t *node);
-
57 
-
63 uel_llist_node_t *uel_llist_pop_head(uel_llist_t *list);
-
64 
-
70 uel_llist_node_t *uel_llist_pop_tail(uel_llist_t *list);
-
71 
-
77 uel_llist_node_t *uel_llist_peek_head(uel_llist_t *list);
-
78 
-
84 uel_llist_node_t *uel_llist_peek_tail(uel_llist_t *list);
-
85 
-
92 bool uel_llist_remove(uel_llist_t *list, uel_llist_node_t *node);
-
93 
-
106 uel_llist_t uel_llist_remove_while(uel_llist_t *list, uel_closure_t *should_remove);
-
107 
-
123 void uel_llist_insert_at(uel_llist_t *list, uel_llist_node_t *node, uel_closure_t *should_insert);
-
124 
-
125 #endif /* UEL_LINKED_LIST_H */
-
-
uel_llist_node_t * uel_llist_pop_head(uel_llist_t *list)
Pops a node from the head of the list.
-
bool uel_llist_remove(uel_llist_t *list, uel_llist_node_t *node)
Removes a node from the queue.
-
void uel_llist_push_tail(uel_llist_t *list, uel_llist_node_t *node)
Pushes a node to the tail of the list.
-
uel_llist_node_t * next
The next node in the list.
Definition: linked-list.h:22
-
uel_llist_node_t * tail
A pointer to the tail of the list. Is NULL when the list is empty.
Definition: linked-list.h:33
-
Defines closures, objects that bind functions to creating and calling contexts.
-
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.
-
uel_llist_node_t * uel_llist_peek_head(uel_llist_t *list)
Peeks the element at the head of the list.
-
uel_llist_node_t * head
A pointer to the head of the list. Is NULL when the list is empty.
Definition: linked-list.h:31
-
uel_llist_node_t * uel_llist_pop_tail(uel_llist_t *list)
Pops a node from the tail of the list.
-
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.
-
void * value
The value of the node, as a void pointer.
Definition: linked-list.h:20
-
void uel_llist_init(uel_llist_t *list)
Initialised a linked list.
-
uel_llist_node_t * uel_llist_peek_tail(uel_llist_t *list)
Peeks the element at the tail of the list.
-
Defines a linked list. If it is empty, head == tail == NULL. Pushing or popping from both the head or...
Definition: linked-list.h:29
-
void uel_llist_push_head(uel_llist_t *list, uel_llist_node_t *node)
Pushes a node to the head of the list.
-
uintptr_t count
The count of enqueued nodes.
Definition: linked-list.h:35
-
Defines a node of the linked list. Holds a void pointer.
Definition: linked-list.h:18
- - - - diff --git a/docs/html/menu.js b/docs/html/menu.js deleted file mode 100644 index 433c15b..0000000 --- a/docs/html/menu.js +++ /dev/null @@ -1,50 +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 initMenu(relPath,searchEnabled,serverSide,searchPage,search) { - function makeTree(data,relPath) { - var result=''; - if ('children' in data) { - result+=''; - } - return result; - } - - $('#main-nav').append(makeTree(menudata,relPath)); - $('#main-nav').children(':first').addClass('sm sm-dox').attr('id','main-menu'); - if (searchEnabled) { - if (serverSide) { - $('#main-menu').append('
  • '); - } else { - $('#main-menu').append('
  • '); - } - } - $('#main-menu').smartmenus(); -} -/* @license-end */ diff --git a/docs/html/menudata.js b/docs/html/menudata.js deleted file mode 100644 index 5d6348f..0000000 --- a/docs/html/menudata.js +++ /dev/null @@ -1,81 +0,0 @@ -/* -@licstart The following is the entire license notice for the -JavaScript code in this file. - -Copyright (C) 1997-2019 by Dimitri van Heesch - -This program is free software; you can redistribute it and/or modify -it under the terms of version 2 of the GNU General Public License as published by -the Free Software Foundation - -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 -*/ -var menudata={children:[ -{text:"Main Page",url:"index.html"}, -{text:"Data Structures",url:"annotated.html",children:[ -{text:"Data Structures",url:"annotated.html"}, -{text:"Data Structure Index",url:"classes.html"}, -{text:"Data Fields",url:"functions.html",children:[ -{text:"All",url:"functions.html",children:[ -{text:"a",url:"functions.html#index_a"}, -{text:"b",url:"functions.html#index_b"}, -{text:"c",url:"functions.html#index_c"}, -{text:"d",url:"functions.html#index_d"}, -{text:"e",url:"functions.html#index_e"}, -{text:"f",url:"functions.html#index_f"}, -{text:"h",url:"functions.html#index_h"}, -{text:"i",url:"functions.html#index_i"}, -{text:"l",url:"functions.html#index_l"}, -{text:"m",url:"functions.html#index_m"}, -{text:"n",url:"functions.html#index_n"}, -{text:"o",url:"functions.html#index_o"}, -{text:"p",url:"functions.html#index_p"}, -{text:"q",url:"functions.html#index_q"}, -{text:"r",url:"functions.html#index_r"}, -{text:"s",url:"functions.html#index_s"}, -{text:"t",url:"functions.html#index_t"}, -{text:"u",url:"functions.html#index_u"}, -{text:"v",url:"functions.html#index_v"}, -{text:"w",url:"functions.html#index_w"}]}, -{text:"Variables",url:"functions_vars.html",children:[ -{text:"a",url:"functions_vars.html#index_a"}, -{text:"b",url:"functions_vars.html#index_b"}, -{text:"c",url:"functions_vars.html#index_c"}, -{text:"d",url:"functions_vars.html#index_d"}, -{text:"e",url:"functions_vars.html#index_e"}, -{text:"f",url:"functions_vars.html#index_f"}, -{text:"h",url:"functions_vars.html#index_h"}, -{text:"i",url:"functions_vars.html#index_i"}, -{text:"l",url:"functions_vars.html#index_l"}, -{text:"m",url:"functions_vars.html#index_m"}, -{text:"n",url:"functions_vars.html#index_n"}, -{text:"o",url:"functions_vars.html#index_o"}, -{text:"p",url:"functions_vars.html#index_p"}, -{text:"q",url:"functions_vars.html#index_q"}, -{text:"r",url:"functions_vars.html#index_r"}, -{text:"s",url:"functions_vars.html#index_s"}, -{text:"t",url:"functions_vars.html#index_t"}, -{text:"u",url:"functions_vars.html#index_u"}, -{text:"v",url:"functions_vars.html#index_v"}, -{text:"w",url:"functions_vars.html#index_w"}]}]}]}, -{text:"Files",url:"files.html",children:[ -{text:"File List",url:"files.html"}, -{text:"Globals",url:"globals.html",children:[ -{text:"All",url:"globals.html",children:[ -{text:"u",url:"globals.html#index_u"}]}, -{text:"Functions",url:"globals_func.html",children:[ -{text:"u",url:"globals_func.html#index_u"}]}, -{text:"Typedefs",url:"globals_type.html"}, -{text:"Enumerations",url:"globals_enum.html"}, -{text:"Enumerator",url:"globals_eval.html"}, -{text:"Macros",url:"globals_defs.html"}]}]}]} diff --git a/docs/html/module_8h.html b/docs/html/module_8h.html deleted file mode 100644 index ea4855a..0000000 --- a/docs/html/module_8h.html +++ /dev/null @@ -1,228 +0,0 @@ - - - - - - - -µEvLoop: include/uevloop/utils/module.h File Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    µEvLoop -
    -
    A fast and lightweight event loop aimed at embedded platforms in C99.
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    - -
    -
    module.h File Reference
    -
    -
    -
    -This graph shows which files directly or indirectly include this file:
    -
    -
    - - - - -
    -
    -

    Go to the source code of this file.

    - - - - - -

    -Data Structures

    struct  uel_module_t
     A module is an isolated unit of behaviour with lifecycle hooks. More...
     
    - - - - -

    -Typedefs

    -typedef void(* uel_module_hook_t) (struct uel_module *)
     Defines a module hook to be called during the module lifecycle.
     
    - - - - - - - - - - -

    -Functions

    void uel_module_init (uel_module_t *module, uel_module_hook_t config, uel_module_hook_t launch, struct uel_application *app)
     Initialised a module. More...
     
    void uel_module_config (uel_module_t *module)
     Calls the configuration hook of a module. More...
     
    void uel_module_launch (uel_module_t *module)
     Calls the launch hook of a module. More...
     
    -

    Detailed Description

    -

    Defines modules, isolated units of behaviour with lifecycle hooks.

    -

    Function Documentation

    - -

    ◆ uel_module_config()

    - -
    -
    - - - - - - - - -
    void uel_module_config (uel_module_t * module)
    -
    - -

    Calls the configuration hook of a module.

    -
    Parameters
    - - -
    moduleThe modules to config
    -
    -
    - -
    -
    - -

    ◆ uel_module_init()

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    void uel_module_init (uel_module_t * module,
    uel_module_hook_t config,
    uel_module_hook_t launch,
    struct uel_applicationapp 
    )
    -
    - -

    Initialised a module.

    -
    Parameters
    - - - - - -
    moduleThe module to be initialised
    configA module hook to be invoked during the configuration phase
    launchA module hook to be invoked during the launching phase
    appThe application instante onto which this module will be loaded
    -
    -
    - -
    -
    - -

    ◆ uel_module_launch()

    - -
    -
    - - - - - - - - -
    void uel_module_launch (uel_module_t * module)
    -
    - -

    Calls the launch hook of a module.

    -
    Parameters
    - - -
    moduleThe modules to launch
    -
    -
    - -
    -
    -
    - - - - diff --git a/docs/html/module_8h__dep__incl.map b/docs/html/module_8h__dep__incl.map deleted file mode 100644 index e17cb17..0000000 --- a/docs/html/module_8h__dep__incl.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/docs/html/module_8h__dep__incl.md5 b/docs/html/module_8h__dep__incl.md5 deleted file mode 100644 index 0966591..0000000 --- a/docs/html/module_8h__dep__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -af60f43600ef0d7d39b399ddf1ff0d54 \ No newline at end of file diff --git a/docs/html/module_8h__dep__incl.png b/docs/html/module_8h__dep__incl.png deleted file mode 100644 index 5b404f5..0000000 Binary files a/docs/html/module_8h__dep__incl.png and /dev/null differ diff --git a/docs/html/module_8h_source.html b/docs/html/module_8h_source.html deleted file mode 100644 index cdbada0..0000000 --- a/docs/html/module_8h_source.html +++ /dev/null @@ -1,118 +0,0 @@ - - - - - - - -µEvLoop: include/uevloop/utils/module.h Source File - - - - - - - - - -
    -
    - - - - - - -
    -
    µEvLoop -
    -
    A fast and lightweight event loop aimed at embedded platforms in C99.
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    -
    -
    module.h
    -
    -
    -Go to the documentation of this file.
    1 
    -
    4 #ifndef UEL_MODULE_H
    -
    5 #define UEL_MODULE_H
    -
    6 
    -
    7 struct uel_application;
    -
    8 struct uel_module;
    -
    9 
    -
    12 typedef void (*uel_module_hook_t)(struct uel_module *);
    -
    13 
    -
    26 typedef struct uel_module uel_module_t;
    -
    27 struct uel_module {
    - - - -
    40 };
    -
    41 
    -
    49 void uel_module_init(
    -
    50  uel_module_t *module,
    -
    51  uel_module_hook_t config,
    -
    52  uel_module_hook_t launch,
    -
    53  struct uel_application *app
    -
    54 );
    -
    55 
    -
    60 void uel_module_config(uel_module_t *module);
    -
    61 
    -
    66 void uel_module_launch(uel_module_t *module);
    -
    67 
    -
    68 #endif /* end of include guard: UEL_MODULE_H */
    -
    -
    void(* uel_module_hook_t)(struct uel_module *)
    Defines a module hook to be called during the module lifecycle.
    Definition: module.h:12
    -
    void uel_module_config(uel_module_t *module)
    Calls the configuration hook of a module.
    -
    uel_module_hook_t launch
    Definition: module.h:37
    -
    uel_module_hook_t config
    Definition: module.h:32
    -
    void uel_module_launch(uel_module_t *module)
    Calls the launch hook of a module.
    -
    A module is an isolated unit of behaviour with lifecycle hooks.
    Definition: module.h:27
    -
    void uel_module_init(uel_module_t *module, uel_module_hook_t config, uel_module_hook_t launch, struct uel_application *app)
    Initialised a module.
    -
    Top-level container for µEvLoop'd application.
    Definition: application.h:39
    -
    struct uel_application * app
    Keeps a reference to the application onto which the module is loaded.
    Definition: module.h:39
    - - - - diff --git a/docs/html/nav_f.png b/docs/html/nav_f.png deleted file mode 100644 index 72a58a5..0000000 Binary files a/docs/html/nav_f.png and /dev/null differ diff --git a/docs/html/nav_g.png b/docs/html/nav_g.png deleted file mode 100644 index 2093a23..0000000 Binary files a/docs/html/nav_g.png and /dev/null differ diff --git a/docs/html/nav_h.png b/docs/html/nav_h.png deleted file mode 100644 index 33389b1..0000000 Binary files a/docs/html/nav_h.png and /dev/null differ diff --git a/docs/html/object-pool_8h.html b/docs/html/object-pool_8h.html deleted file mode 100644 index 91d84be..0000000 --- a/docs/html/object-pool_8h.html +++ /dev/null @@ -1,456 +0,0 @@ - - - - - - - -µEvLoop: include/uevloop/utils/object-pool.h File Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    µEvLoop -
    -
    A fast and lightweight event loop aimed at embedded platforms in C99.
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    - -
    -
    object-pool.h File Reference
    -
    -
    - -

    Defines object pools, arrays of pre-allocated objects for dynamic use. -More...

    -
    -Include dependency graph for object-pool.h:
    -
    -
    - - - - -
    -
    -This graph shows which files directly or indirectly include this file:
    -
    -
    - - - - - - - - - - -
    -
    -

    Go to the source code of this file.

    - - - - - -

    -Data Structures

    struct  uel_objpool_t
     Pre-allocated memory bound to speciffic types suitable for providing dynamic object management in the stack. More...
     
    - - - - - - - - - - - - - -

    -Macros

    #define UEL_DECLARE_OBJPOOL_BUFFERS(type, size_log2n, id)
     Declares the necessary buffers to back an object pool, so the programmer doesn't have to reason much about it. More...
     
    #define UEL_OBJPOOL_BUFFERS(id)   (uint8_t *)&id##_pool_buffer, id##_pool_queue_buffer
     Refers to a previously declared buffer set. More...
     
    #define UEL_OBJPOOL_BUFFERS_IN(id, obj)   (uint8_t *)&obj.id##_pool_buffer, obj.id##_pool_queue_buffer
     Refers to a previously declared buffer set. More...
     
    #define UEL_OBJPOOL_BUFFERS_AT(id, obj)   (uint8_t *)&obj->id##_pool_buffer, obj->id##_pool_queue_buffer
     Refers to a previously declared buffer set. More...
     
    - - - - - - - - - - - - - -

    -Functions

    void uel_objpool_init (uel_objpool_t *pool, size_t size_log2n, size_t item_size, uint8_t *buffer, void **queue_buffer)
     Initialises an object pool. More...
     
    void * uel_objpool_acquire (uel_objpool_t *pool)
     Acquires an object from the pool. More...
     
    bool uel_objpool_release (uel_objpool_t *pool, void *element)
     Releases an object to the pool. More...
     
    bool uel_objpool_is_empty (uel_objpool_t *pool)
     Checks if a pool is depleted. More...
     
    -

    Detailed Description

    -

    Defines object pools, arrays of pre-allocated objects for dynamic use.

    -

    Macro Definition Documentation

    - -

    ◆ UEL_DECLARE_OBJPOOL_BUFFERS

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    #define UEL_DECLARE_OBJPOOL_BUFFERS( type,
     size_log2n,
     id 
    )
    -
    -Value:
    type id##_pool_buffer[(1<<size_log2n)]; \
    -
    void *id##_pool_queue_buffer[1<<size_log2n]
    -
    -

    Declares the necessary buffers to back an object 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 object pool. This will declare two buffers in the calling scope.

    -
    Parameters
    - - - - -
    typeThe type of the objects the pool will contain
    size_log2nThe number of elements the pool will contain in log2 form
    idA valid identifier for the pools.
    -
    -
    - -
    -
    - -

    ◆ UEL_OBJPOOL_BUFFERS

    - -
    -
    - - - - - - - - -
    #define UEL_OBJPOOL_BUFFERS( id)   (uint8_t *)&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_OBJPOOL_BUFFERS to the uel_objpool_init function.

    -
    Parameters
    - - -
    idThe identifier used to declare the pool buffers
    -
    -
    - -
    -
    - -

    ◆ UEL_OBJPOOL_BUFFERS_AT

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    #define UEL_OBJPOOL_BUFFERS_AT( id,
     obj 
    )   (uint8_t *)&obj->id##_pool_buffer, obj->id##_pool_queue_buffer
    -
    - -

    Refers to a previously declared buffer set.

    -

    This is a convenience macro to supply the buffers generated by UEL_DECLARE_OBJPOOL_BUFFERS to the uel_objpool_init function. Use this if the buffers were defined inside an object whose address is accessible in the current scope

    -
    Parameters
    - - - -
    idThe identifier used to declare the pool buffers
    objThe address of the object storing the pool buffers
    -
    -
    - -
    -
    - -

    ◆ UEL_OBJPOOL_BUFFERS_IN

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    #define UEL_OBJPOOL_BUFFERS_IN( id,
     obj 
    )   (uint8_t *)&obj.id##_pool_buffer, obj.id##_pool_queue_buffer
    -
    - -

    Refers to a previously declared buffer set.

    -

    This is a convenience macro to supply the buffers generated by UEL_DECLARE_OBJPOOL_BUFFERS to the uel_objpool_init function. Use this if the buffers were defined inside a local object, accessible in the current scope.

    -
    Parameters
    - - - -
    idThe identifier used to declare the pool buffers
    objThe object storing the pool buffers
    -
    -
    - -
    -
    -

    Function Documentation

    - -

    ◆ uel_objpool_acquire()

    - -
    -
    - - - - - - - - -
    void* uel_objpool_acquire (uel_objpool_t * pool)
    -
    - -

    Acquires an object from the pool.

    -
    Parameters
    - - -
    poolThe pool from where to acquire the object
    -
    -
    -
    Returns
    A pointer to the acquired object or NULL if the pool is depleted
    - -
    -
    - -

    ◆ uel_objpool_init()

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    void uel_objpool_init (uel_objpool_t * pool,
    size_t size_log2n,
    size_t item_size,
    uint8_t * buffer,
    void ** queue_buffer 
    )
    -
    - -

    Initialises an object pool.

    -
    Parameters
    - - - - - - -
    poolThe pool to be initialised
    size_log2nThe number of objects in the pool in its log2 form
    item_sizeThe size of each object in the pool. If special alignment is required, it must be included in this value.
    bufferThe buffer that contains each object in the pool. Must be 2**size_log2n * item_size long.
    queue_bufferA void pointer array that will be used as the buffer to the object pointer queue. Must be 2**size_log2n long.
    -
    -
    - -
    -
    - -

    ◆ uel_objpool_is_empty()

    - -
    -
    - - - - - - - - -
    bool uel_objpool_is_empty (uel_objpool_t * pool)
    -
    - -

    Checks if a pool is depleted.

    -
    Parameters
    - - -
    poolThe pool to be verified
    -
    -
    -
    Returns
    Whether the pool is empty (i.e.: All addresses have been given out)
    - -
    -
    - -

    ◆ uel_objpool_release()

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    bool uel_objpool_release (uel_objpool_t * pool,
    void * element 
    )
    -
    - -

    Releases an object to the pool.

    -
    Parameters
    - - - -
    poolThe pool where the object will be released to
    elementThe element to be returned to the pool
    -
    -
    -
    Returns
    Whether the object could be released
    - -
    -
    -
    - - - - diff --git a/docs/html/object-pool_8h__dep__incl.map b/docs/html/object-pool_8h__dep__incl.map deleted file mode 100644 index 71ba2ac..0000000 --- a/docs/html/object-pool_8h__dep__incl.map +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/docs/html/object-pool_8h__dep__incl.md5 b/docs/html/object-pool_8h__dep__incl.md5 deleted file mode 100644 index 9aad823..0000000 --- a/docs/html/object-pool_8h__dep__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -50ceb4f6751a9a62ae0e924b409f0aac \ No newline at end of file diff --git a/docs/html/object-pool_8h__dep__incl.png b/docs/html/object-pool_8h__dep__incl.png deleted file mode 100644 index ac9eb2a..0000000 Binary files a/docs/html/object-pool_8h__dep__incl.png and /dev/null differ diff --git a/docs/html/object-pool_8h__incl.map b/docs/html/object-pool_8h__incl.map deleted file mode 100644 index ab978d4..0000000 --- a/docs/html/object-pool_8h__incl.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/docs/html/object-pool_8h__incl.md5 b/docs/html/object-pool_8h__incl.md5 deleted file mode 100644 index d305a86..0000000 --- a/docs/html/object-pool_8h__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -03d2009b46606b7f38a9e77f8bcb4b7e \ No newline at end of file diff --git a/docs/html/object-pool_8h__incl.png b/docs/html/object-pool_8h__incl.png deleted file mode 100644 index dee660e..0000000 Binary files a/docs/html/object-pool_8h__incl.png and /dev/null differ diff --git a/docs/html/object-pool_8h_source.html b/docs/html/object-pool_8h_source.html deleted file mode 100644 index eacec63..0000000 --- a/docs/html/object-pool_8h_source.html +++ /dev/null @@ -1,132 +0,0 @@ - - - - - - - -µEvLoop: include/uevloop/utils/object-pool.h Source File - - - - - - - - - -
    -
    - - - - - - -
    -
    µEvLoop -
    -
    A fast and lightweight event loop aimed at embedded platforms in C99.
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    -
    -
    object-pool.h
    -
    -
    -Go to the documentation of this file.
    1 
    -
    6 #ifndef UEL_OBJECT_POOL_H
    -
    7 #define UEL_OBJECT_POOL_H
    -
    8 
    - -
    10 
    -
    12 #include <stdint.h>
    -
    13 #include <stdlib.h>
    -
    15 
    -
    26 typedef struct uel_objpool uel_objpool_t;
    -
    27 struct uel_objpool {
    -
    29  uint8_t *buffer;
    -
    31  uel_cqueue_t queue;
    -
    32 };
    -
    33 
    -
    45 void uel_objpool_init(
    -
    46  uel_objpool_t *pool,
    -
    47  size_t size_log2n,
    -
    48  size_t item_size,
    -
    49  uint8_t *buffer,
    -
    50  void **queue_buffer
    -
    51 );
    -
    52 
    -
    58 void *uel_objpool_acquire(uel_objpool_t *pool);
    -
    59 
    -
    66 bool uel_objpool_release(uel_objpool_t *pool, void *element);
    -
    67 
    -
    73 bool uel_objpool_is_empty(uel_objpool_t *pool);
    -
    74 
    -
    85 #define UEL_DECLARE_OBJPOOL_BUFFERS(type, size_log2n, id) \
    -
    86  type id##_pool_buffer[(1<<size_log2n)]; \
    -
    87  void *id##_pool_queue_buffer[1<<size_log2n]
    -
    88 
    -
    96 #define UEL_OBJPOOL_BUFFERS(id) \
    -
    97  (uint8_t *)&id##_pool_buffer, id##_pool_queue_buffer
    -
    98 
    -
    109 #define UEL_OBJPOOL_BUFFERS_IN(id, obj) \
    -
    110  (uint8_t *)&obj.id##_pool_buffer, obj.id##_pool_queue_buffer
    -
    111 
    -
    122 #define UEL_OBJPOOL_BUFFERS_AT(id, obj) \
    -
    123  (uint8_t *)&obj->id##_pool_buffer, obj->id##_pool_queue_buffer
    -
    124 
    -
    125 #endif /* UEL_OBJECT_POOL_H */
    -
    -
    bool uel_objpool_is_empty(uel_objpool_t *pool)
    Checks if a pool is depleted.
    -
    uint8_t * buffer
    The buffer that contains each object managed by this pool.
    Definition: object-pool.h:29
    -
    void * uel_objpool_acquire(uel_objpool_t *pool)
    Acquires an object from the pool.
    -
    bool uel_objpool_release(uel_objpool_t *pool, void *element)
    Releases an object to the pool.
    -
    Defines circular queues, fast and efficient FIFO data structures.
    -
    uel_cqueue_t queue
    The queue containing the addresses for each object in the pool.
    Definition: object-pool.h:31
    -
    Pre-allocated memory bound to speciffic types suitable for providing dynamic object management in the...
    Definition: object-pool.h:27
    -
    void uel_objpool_init(uel_objpool_t *pool, size_t size_log2n, size_t item_size, uint8_t *buffer, void **queue_buffer)
    Initialises an object pool.
    - - - - diff --git a/docs/html/open.png b/docs/html/open.png deleted file mode 100644 index 30f75c7..0000000 Binary files a/docs/html/open.png and /dev/null differ diff --git a/docs/html/pipeline_8h.html b/docs/html/pipeline_8h.html deleted file mode 100644 index 1480ca6..0000000 --- a/docs/html/pipeline_8h.html +++ /dev/null @@ -1,263 +0,0 @@ - - - - - - - -µEvLoop: include/uevloop/utils/pipeline.h File Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    µEvLoop -
    -
    A fast and lightweight event loop aimed at embedded platforms in C99.
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    - -
    -
    pipeline.h File Reference
    -
    -
    - -

    Defines pipelines, structures to hold many closures and functions to invoke them sequentially, composing their functionality. -More...

    -
    -Include dependency graph for pipeline.h:
    -
    -
    - - - - -
    -
    -This graph shows which files directly or indirectly include this file:
    -
    -
    - - - - -
    -
    -

    Go to the source code of this file.

    - - - - - -

    -Data Structures

    struct  uel_pipeline_t
     A pipeline is an ordered closure list to be run in sequence. More...
     
    - - - - -

    -Macros

    #define UEL_PIPELINE_DECLARE(id, ...)
     Helper macro to create a pipeline and its required data structures. More...
     
    - - - - - - - -

    -Functions

    void uel_pipeline_init (uel_pipeline_t *pipeline, uel_closure_t *closures, size_t count)
     Initialises a new pipeline. More...
     
    void * uel_pipeline_apply (uel_pipeline_t *pipeline, void *params)
     Applies a pipeline to some input. More...
     
    -

    Detailed Description

    -

    Defines pipelines, structures to hold many closures and functions to invoke them sequentially, composing their functionality.

    -

    Macro Definition Documentation

    - -

    ◆ UEL_PIPELINE_DECLARE

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    #define UEL_PIPELINE_DECLARE( id,
     ... 
    )
    -
    -Value:
    uel_closure_t id##_pipeline_closures[] = {__VA_ARGS__}; \
    -
    uel_pipeline_t id##_pipeline; \
    -
    uel_pipeline_init(&id##_pipeline, id##_pipeline_closures, \
    -
    sizeof(id##_pipeline_closures) / sizeof(uel_closure_t));
    -
    -

    Helper macro to create a pipeline and its required data structures.

    -

    This macro, based on the input identifier, declares:

      -
    • a closure array with any supplied closures ([id]_pipeline_closures)
    • -
    • a pipeline object wrapping the closure array ([id]_pipeline)
    • -
    -
    Parameters
    - - - -
    idThe identifier on which to base declared variables' names.
    ...The closures to be pipelined.
    -
    -
    - -
    -
    -

    Function Documentation

    - -

    ◆ uel_pipeline_apply()

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    void* uel_pipeline_apply (uel_pipeline_t * pipeline,
    void * params 
    )
    -
    - -

    Applies a pipeline to some input.

    -

    This function takes some input and passes it to the first closure in the pipeline. The value returned from this first closure will be passed to the second one and so on.

    -
    Parameters
    - - - -
    pipelineThe pipeline to be applied
    paramsThe initial parameters that will be passed to the first closure
    -
    -
    -
    Returns
    Whatever was returned by the last closure invoked
    - -
    -
    - -

    ◆ uel_pipeline_init()

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void uel_pipeline_init (uel_pipeline_t * pipeline,
    uel_closure_t * closures,
    size_t count 
    )
    -
    - -

    Initialises a new pipeline.

    -
    Parameters
    - - - - -
    pipelineThe pipeline to be initialised
    closuresThe closures that should be run in sequence, in an array.
    countThe number of closures to be piped.
    -
    -
    - -
    -
    -
    - - - - diff --git a/docs/html/pipeline_8h__dep__incl.map b/docs/html/pipeline_8h__dep__incl.map deleted file mode 100644 index 2332f3e..0000000 --- a/docs/html/pipeline_8h__dep__incl.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/docs/html/pipeline_8h__dep__incl.md5 b/docs/html/pipeline_8h__dep__incl.md5 deleted file mode 100644 index 5c827ec..0000000 --- a/docs/html/pipeline_8h__dep__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -1e9ecc8ead6b0a9d7bf07d131e1bc03b \ No newline at end of file diff --git a/docs/html/pipeline_8h__dep__incl.png b/docs/html/pipeline_8h__dep__incl.png deleted file mode 100644 index 9257610..0000000 Binary files a/docs/html/pipeline_8h__dep__incl.png and /dev/null differ diff --git a/docs/html/pipeline_8h__incl.map b/docs/html/pipeline_8h__incl.map deleted file mode 100644 index f234291..0000000 --- a/docs/html/pipeline_8h__incl.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/docs/html/pipeline_8h__incl.md5 b/docs/html/pipeline_8h__incl.md5 deleted file mode 100644 index 7e24513..0000000 --- a/docs/html/pipeline_8h__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -9d213d876bc874a9add1787a88dde080 \ No newline at end of file diff --git a/docs/html/pipeline_8h__incl.png b/docs/html/pipeline_8h__incl.png deleted file mode 100644 index f2dde27..0000000 Binary files a/docs/html/pipeline_8h__incl.png and /dev/null differ diff --git a/docs/html/pipeline_8h_source.html b/docs/html/pipeline_8h_source.html deleted file mode 100644 index 13598c7..0000000 --- a/docs/html/pipeline_8h_source.html +++ /dev/null @@ -1,112 +0,0 @@ - - - - - - - -µEvLoop: include/uevloop/utils/pipeline.h Source File - - - - - - - - - -
    -
    - - - - - - -
    -
    µEvLoop -
    -
    A fast and lightweight event loop aimed at embedded platforms in C99.
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    -
    -
    pipeline.h
    -
    -
    -Go to the documentation of this file.
    1 
    -
    7 #ifndef UEL_PIPELINE_H
    -
    8 #define UEL_PIPELINE_H
    -
    9 
    -
    11 #include <stdlib.h>
    -
    13 
    -
    14 #include "uevloop/utils/closure.h"
    -
    15 
    -
    22 typedef struct uel_pipeline uel_pipeline_t;
    -
    23 struct uel_pipeline{
    -
    25  uel_closure_t *closures;
    -
    27  size_t count;
    -
    28 };
    -
    29 
    -
    36 void uel_pipeline_init(uel_pipeline_t *pipeline, uel_closure_t *closures, size_t count);
    -
    37 
    -
    48 void *uel_pipeline_apply(uel_pipeline_t *pipeline, void *params);
    -
    49 
    -
    59 #define UEL_PIPELINE_DECLARE(id, ...) \
    -
    60  uel_closure_t id##_pipeline_closures[] = {__VA_ARGS__}; \
    -
    61  uel_pipeline_t id##_pipeline; \
    -
    62  uel_pipeline_init(&id##_pipeline, id##_pipeline_closures, \
    -
    63  sizeof(id##_pipeline_closures) / sizeof(uel_closure_t));
    -
    64 
    -
    65 #endif /* end of include guard: UEL_PIPELINE_H */
    -
    -
    A pipeline is an ordered closure list to be run in sequence.
    Definition: pipeline.h:23
    -
    Defines closures, objects that bind functions to creating and calling contexts.
    -
    size_t count
    The number of closures in the array.
    Definition: pipeline.h:27
    -
    void uel_pipeline_init(uel_pipeline_t *pipeline, uel_closure_t *closures, size_t count)
    Initialises a new pipeline.
    -
    uel_closure_t * closures
    A reference to an array of closures to be run.
    Definition: pipeline.h:25
    -
    void * uel_pipeline_apply(uel_pipeline_t *pipeline, void *params)
    Applies a pipeline to some input.
    - - - - diff --git a/docs/html/promise_8h.html b/docs/html/promise_8h.html deleted file mode 100644 index d1c41b8..0000000 --- a/docs/html/promise_8h.html +++ /dev/null @@ -1,675 +0,0 @@ - - - - - - - -µEvLoop: include/uevloop/utils/promise.h File Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    µEvLoop -
    -
    A fast and lightweight event loop aimed at embedded platforms in C99.
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    - -
    -
    promise.h File Reference
    -
    -
    - -

    Contains definitions for promise stores, promises and functions to manipulate them. -More...

    -
    -Include dependency graph for promise.h:
    -
    -
    - - - - - - - -
    -
    -This graph shows which files directly or indirectly include this file:
    -
    -
    - - - - - -
    -
    -

    Go to the source code of this file.

    - - - - - - - - - - - -

    -Data Structures

    struct  uel_promise_segment_t
     Defines a single synchronous operation to be invoked when the promise is either resolved or rejected. More...
     
    struct  uel_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. More...
     
    struct  uel_promise_store_t
     An issuer of promises. Contains references to pools for promises and segments. More...
     
    - - - - -

    -Typedefs

    -typedef enum uel_promise_state uel_promise_state_t
     Alias to the uel_promise_state enum.
     
    - - - - -

    -Enumerations

    enum  uel_promise_state { UEL_PROMISE_PENDING, -UEL_PROMISE_RESOLVED, -UEL_PROMISE_REJECTED - }
     Defines the possible states for a prommise. More...
     
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Functions

    uel_promise_store_t uel_promise_store_create (uel_objpool_t *promise_pool, uel_objpool_t *segment_pool)
     Creates a new promise store from the promise and segment pools. More...
     
    uel_promise_t * uel_promise_create (uel_promise_store_t *store, uel_closure_t closure)
     Acquires a new promise from the supplied store and binds it to the asynchronous operation started by the supplied closure. The closure is invoked immediately. More...
     
    void uel_promise_destroy (uel_promise_t *promise)
     Destroys a promise and all of its segments. Settling this promise afterwards yields undefined behaviour. More...
     
    void uel_promise_then (uel_promise_t *promise, uel_closure_t resolve)
     Adds a new synchronous segment to the promise. It will be invoked upon promise resolution. In case of rejection, this segment will be ignored. More...
     
    void uel_promise_catch (uel_promise_t *promise, uel_closure_t reject)
     Adds a new synchronous segment to the promise. It will be invoked upon promise rejection. In case of resolution, this segment will be ignored. More...
     
    void uel_promise_always (uel_promise_t *promise, uel_closure_t always)
     Adds a new synchronous segment to the promise. The same closure will be invoked on promise settling regardless of the settled state. More...
     
    void uel_promise_after (uel_promise_t *promise, uel_closure_t resolve, uel_closure_t reject)
     Adds a new synchronous segment to the promise. Either of its closures will be invoked, depending on the settled state of the promise. More...
     
    void uel_promise_resolve (uel_promise_t *promise, void *value)
     Settles a promise as resolved and, synchronously, invokes the resolve closures of each segment in the order they were registered. More...
     
    void uel_promise_reject (uel_promise_t *promise, void *value)
     Settles a promise as rejected and, synchronously, invokes the reject closures of each segment in the order they were registered. More...
     
    void uel_promise_resettle (uel_promise_t *promise, uel_promise_state_t state, void *value)
     Resettles a promise as the supplied state. Unlike uel_promise_resolve() and uel_promise_reject(), does not invoke the synchronous segments. More...
     
    uel_closure_t uel_promise_resolver (uel_promise_t *promise)
     Creates a closure bound to a promise. When the closure is invoked with some parameter, the promise is resolved with this parameter as value. More...
     
    uel_closure_t uel_promise_rejecter (uel_promise_t *promise)
     Creates a closure bound to a promise. When the closure is invoked with some parameter, the promise is rejected with this parameter as error. More...
     
    uel_closure_t uel_promise_destroyer (uel_promise_t *promise)
     Creates a closure bound to a promise. When the closure is invoked, the promise is destroyed. Any parameters passed to the closure are ignored. More...
     
    -

    Detailed Description

    -

    Contains definitions for promise stores, promises and functions to manipulate them.

    -

    Promises are structures that associate asynchronous operations to synchronous processing of the values produces by them, allowing async data pipelines to be built.

    -

    Enumeration Type Documentation

    - -

    ◆ uel_promise_state

    - -
    -
    - - - - -
    enum uel_promise_state
    -
    - -

    Defines the possible states for a prommise.

    - - - - -
    Enumerator
    UEL_PROMISE_PENDING 

    A promise that has not been resolved nor rejected.

    -
    UEL_PROMISE_RESOLVED 

    A promise that has been resolved with some value.

    -
    UEL_PROMISE_REJECTED 

    A promise that has been rejected with some error.

    -
    - -
    -
    -

    Function Documentation

    - -

    ◆ uel_promise_after()

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void uel_promise_after (uel_promise_t * promise,
    uel_closure_t resolve,
    uel_closure_t reject 
    )
    -
    - -

    Adds a new synchronous segment to the promise. Either of its closures will be invoked, depending on the settled state of the promise.

    -
    Parameters
    - - - - -
    promiseThe promise to attach the segment to
    resolveThe closure to be invoked when the promise is resolved
    rejectThe closure to be invoked when the promise is rejected
    -
    -
    - -
    -
    - -

    ◆ uel_promise_always()

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    void uel_promise_always (uel_promise_t * promise,
    uel_closure_t always 
    )
    -
    - -

    Adds a new synchronous segment to the promise. The same closure will be invoked on promise settling regardless of the settled state.

    -
    Parameters
    - - - -
    promiseThe promise to attach the segment to
    alwaysThe closure to be invoked when the promise is settled
    -
    -
    - -
    -
    - -

    ◆ uel_promise_catch()

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    void uel_promise_catch (uel_promise_t * promise,
    uel_closure_t reject 
    )
    -
    - -

    Adds a new synchronous segment to the promise. It will be invoked upon promise rejection. In case of resolution, this segment will be ignored.

    -
    Parameters
    - - - -
    promiseThe promise to attach the segment to
    rejectThe closure to be invoked when the promise is rejected
    -
    -
    - -
    -
    - -

    ◆ uel_promise_create()

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    uel_promise_t* uel_promise_create (uel_promise_store_t * store,
    uel_closure_t closure 
    )
    -
    - -

    Acquires a new promise from the supplied store and binds it to the asynchronous operation started by the supplied closure. The closure is invoked immediately.

    -
    Parameters
    - - - -
    storeThe store from where to acquire promises and segments
    closureThe closure that initiates the asynchronous operation
    -
    -
    -
    Returns
    A pointer to the promise
    - -
    -
    - -

    ◆ uel_promise_destroy()

    - -
    -
    - - - - - - - - -
    void uel_promise_destroy (uel_promise_t * promise)
    -
    - -

    Destroys a promise and all of its segments. Settling this promise afterwards yields undefined behaviour.

    -
    Parameters
    - - -
    promiseThe promise to be destroyed
    -
    -
    - -
    -
    - -

    ◆ uel_promise_destroyer()

    - -
    -
    - - - - - - - - -
    uel_closure_t uel_promise_destroyer (uel_promise_t * promise)
    -
    - -

    Creates a closure bound to a promise. When the closure is invoked, the promise is destroyed. Any parameters passed to the closure are ignored.

    -
    Parameters
    - - -
    promiseThe promise to be destroyed
    -
    -
    -
    Returns
    A closure that destroyes the promise when invoked
    - -
    -
    - -

    ◆ uel_promise_reject()

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    void uel_promise_reject (uel_promise_t * promise,
    void * value 
    )
    -
    - -

    Settles a promise as rejected and, synchronously, invokes the reject closures of each segment in the order they were registered.

    -

    If a segment returns a non-NULL pointer, it is cast to a promise pointer and the original promise awaits until the returned promise is settled.

    -
    Parameters
    - - - -
    promiseThe promise to be rejected
    valueThe value to reject the promise with
    -
    -
    - -
    -
    - -

    ◆ uel_promise_rejecter()

    - -
    -
    - - - - - - - - -
    uel_closure_t uel_promise_rejecter (uel_promise_t * promise)
    -
    - -

    Creates a closure bound to a promise. When the closure is invoked with some parameter, the promise is rejected with this parameter as error.

    -
    Parameters
    - - -
    promiseThe promise to be rejected
    -
    -
    -
    Returns
    A closure that resolves the promise when invoked
    - -
    -
    - -

    ◆ uel_promise_resettle()

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void uel_promise_resettle (uel_promise_t * promise,
    uel_promise_state_t state,
    void * value 
    )
    -
    - -

    Resettles a promise as the supplied state. Unlike uel_promise_resolve() and uel_promise_reject(), does not invoke the synchronous segments.

    -

    This function should be used to switch execution paths during synchronous processing of segments as to signal that an error was raised or rescued by a particular segment. If the promise is settled as pending, the synchronous processing phase is interrupted.

    -
    Parameters
    - - - - -
    promiseThe promise to be resettled
    stateThe new promise state
    valueThe new promise value
    -
    -
    - -
    -
    - -

    ◆ uel_promise_resolve()

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    void uel_promise_resolve (uel_promise_t * promise,
    void * value 
    )
    -
    - -

    Settles a promise as resolved and, synchronously, invokes the resolve closures of each segment in the order they were registered.

    -

    If a segment returns a non-NULL pointer, it is cast to a promise pointer and the original promise awaits until the returned promise is settled.

    -
    Parameters
    - - - -
    promiseThe promise to be resolved
    valueThe value to resolve the promise with
    -
    -
    - -
    -
    - -

    ◆ uel_promise_resolver()

    - -
    -
    - - - - - - - - -
    uel_closure_t uel_promise_resolver (uel_promise_t * promise)
    -
    - -

    Creates a closure bound to a promise. When the closure is invoked with some parameter, the promise is resolved with this parameter as value.

    -
    Parameters
    - - -
    promiseThe promise to be resolved
    -
    -
    -
    Returns
    A closure that resolves the promise when invoked
    - -
    -
    - -

    ◆ uel_promise_store_create()

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    uel_promise_store_t uel_promise_store_create (uel_objpool_t * promise_pool,
    uel_objpool_t * segment_pool 
    )
    -
    - -

    Creates a new promise store from the promise and segment pools.

    -
    Parameters
    - - - -
    promise_poolThe uel_objpool_t that holds promises
    segment_poolThe uel_objpool_t that holds segments
    -
    -
    -
    Returns
    A new promise store bound to the object pools provided
    - -
    -
    - -

    ◆ uel_promise_then()

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    void uel_promise_then (uel_promise_t * promise,
    uel_closure_t resolve 
    )
    -
    - -

    Adds a new synchronous segment to the promise. It will be invoked upon promise resolution. In case of rejection, this segment will be ignored.

    -
    Parameters
    - - - -
    promiseThe promise to attach the segment to
    resolveThe closure to be invoked when the promise is resolved
    -
    -
    - -
    -
    -
    - - - - diff --git a/docs/html/promise_8h__dep__incl.map b/docs/html/promise_8h__dep__incl.map deleted file mode 100644 index 87670cc..0000000 --- a/docs/html/promise_8h__dep__incl.map +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/docs/html/promise_8h__dep__incl.md5 b/docs/html/promise_8h__dep__incl.md5 deleted file mode 100644 index dc5ebd4..0000000 --- a/docs/html/promise_8h__dep__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -83c72b3ad3daea9d190447292bb2c34d \ No newline at end of file diff --git a/docs/html/promise_8h__dep__incl.png b/docs/html/promise_8h__dep__incl.png deleted file mode 100644 index 6ea8a11..0000000 Binary files a/docs/html/promise_8h__dep__incl.png and /dev/null differ diff --git a/docs/html/promise_8h__incl.map b/docs/html/promise_8h__incl.map deleted file mode 100644 index 8c09182..0000000 --- a/docs/html/promise_8h__incl.map +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/docs/html/promise_8h__incl.md5 b/docs/html/promise_8h__incl.md5 deleted file mode 100644 index 945a4a0..0000000 --- a/docs/html/promise_8h__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -834f68ead18af34286a97a93509f6657 \ No newline at end of file diff --git a/docs/html/promise_8h__incl.png b/docs/html/promise_8h__incl.png deleted file mode 100644 index d6c0c9f..0000000 Binary files a/docs/html/promise_8h__incl.png and /dev/null differ diff --git a/docs/html/promise_8h_source.html b/docs/html/promise_8h_source.html deleted file mode 100644 index 2e7b710..0000000 --- a/docs/html/promise_8h_source.html +++ /dev/null @@ -1,202 +0,0 @@ - - - - - - - -µEvLoop: include/uevloop/utils/promise.h Source File - - - - - - - - - -
    -
    - - - - - - -
    -
    µEvLoop -
    -
    A fast and lightweight event loop aimed at embedded platforms in C99.
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    -
    -
    promise.h
    -
    -
    -Go to the documentation of this file.
    1 
    -
    10 #ifndef UEL_PROMISE_H
    -
    11 #define UEL_PROMISE_H
    -
    12 
    -
    13 #include "uevloop/config.h"
    -
    14 #include "uevloop/utils/closure.h"
    - -
    16 
    - - - - -
    23 };
    - -
    26 
    -
    40 typedef struct uel_promise_segment uel_promise_segment_t;
    - -
    43  uel_closure_t resolve;
    -
    45  uel_closure_t reject;
    -
    47  uel_promise_segment_t *next;
    -
    48 };
    -
    49 
    -
    51 struct uel_promise_store;
    -
    52 
    -
    72 typedef struct uel_promise uel_promise_t;
    -
    73 struct uel_promise {
    - - -
    79  void *value;
    -
    81  uel_promise_segment_t *first_segment;
    -
    83  uel_promise_segment_t *last_segment;
    -
    84 };
    -
    85 
    -
    89 typedef struct uel_promise_store uel_promise_store_t;
    - -
    92  uel_objpool_t *promise_pool;
    -
    94  uel_objpool_t *segment_pool;
    -
    95 };
    -
    96 
    -
    103 uel_promise_store_t uel_promise_store_create(
    -
    104  uel_objpool_t *promise_pool,
    -
    105  uel_objpool_t *segment_pool
    -
    106 );
    -
    107 
    -
    116 uel_promise_t *uel_promise_create(uel_promise_store_t *store, uel_closure_t closure);
    -
    117 
    -
    123 void uel_promise_destroy(uel_promise_t *promise);
    -
    124 
    -
    131 void uel_promise_then(uel_promise_t *promise, uel_closure_t resolve);
    -
    132 
    -
    139 void uel_promise_catch(uel_promise_t *promise, uel_closure_t reject);
    -
    140 
    -
    147 void uel_promise_always(uel_promise_t *promise, uel_closure_t always);
    -
    148 
    -
    156 void uel_promise_after(
    -
    157  uel_promise_t *promise,
    -
    158  uel_closure_t resolve,
    -
    159  uel_closure_t reject
    -
    160 );
    -
    161 
    -
    171 void uel_promise_resolve(uel_promise_t *promise, void *value);
    -
    172 
    -
    182 void uel_promise_reject(uel_promise_t *promise, void *value);
    -
    183 
    - -
    197  uel_promise_t *promise,
    -
    198  uel_promise_state_t state,
    -
    199  void *value
    -
    200 );
    -
    201 
    -
    208 uel_closure_t uel_promise_resolver(uel_promise_t *promise);
    -
    209 
    -
    216 uel_closure_t uel_promise_rejecter(uel_promise_t *promise);
    -
    217 
    -
    224 uel_closure_t uel_promise_destroyer(uel_promise_t *promise);
    -
    225 
    -
    226 #ifdef UEL_PROMISE_SHORTCUTS
    -
    227 
    -
    228 #define THEN uel_promise_then
    -
    229 #define CATCH uel_promise_catch
    -
    230 #define AFTER uel_promise_after
    -
    231 #define ALWAYS uel_promise_always
    -
    232 
    -
    233 
    -
    234 #endif /* UEL_PROMISE_SHORTCUTS */
    -
    235 
    -
    236 #endif /* end of include guard: UEL_PROMISE_H */
    -
    -
    An issuer of promises. Contains references to pools for promises and segments.
    Definition: promise.h:90
    -
    void uel_promise_resettle(uel_promise_t *promise, uel_promise_state_t state, void *value)
    Resettles a promise as the supplied state. Unlike uel_promise_resolve() and uel_promise_reject(),...
    -
    uel_objpool_t * promise_pool
    A reference to the promise pool.
    Definition: promise.h:92
    -
    uel_promise_t * uel_promise_create(uel_promise_store_t *store, uel_closure_t closure)
    Acquires a new promise from the supplied store and binds it to the asynchronous operation started by ...
    -
    @ UEL_PROMISE_RESOLVED
    A promise that has been resolved with some value.
    Definition: promise.h:21
    -
    void * value
    The value this promise holds. Only meaningful if already settled.
    Definition: promise.h:79
    -
    uel_objpool_t * segment_pool
    A reference to the segment pool.
    Definition: promise.h:94
    -
    Defines closures, objects that bind functions to creating and calling contexts.
    -
    uel_promise_segment_t * last_segment
    The last segment to be processed when this promise settles.
    Definition: promise.h:83
    -
    void uel_promise_after(uel_promise_t *promise, uel_closure_t resolve, uel_closure_t reject)
    Adds a new synchronous segment to the promise. Either of its closures will be invoked,...
    -
    uel_closure_t uel_promise_destroyer(uel_promise_t *promise)
    Creates a closure bound to a promise. When the closure is invoked, the promise is destroyed....
    -
    uel_promise_state_t state
    The current state of this promise.
    Definition: promise.h:77
    -
    uel_promise_segment_t * next
    The next synchronous segment to be processed.
    Definition: promise.h:47
    -
    void uel_promise_then(uel_promise_t *promise, uel_closure_t resolve)
    Adds a new synchronous segment to the promise. It will be invoked upon promise resolution....
    -
    @ UEL_PROMISE_REJECTED
    A promise that has been rejected with some error.
    Definition: promise.h:22
    -
    Defines object pools, arrays of pre-allocated objects for dynamic use.
    -
    uel_promise_segment_t * first_segment
    The first segment to be processed when this promise settles.
    Definition: promise.h:81
    -
    void uel_promise_always(uel_promise_t *promise, uel_closure_t always)
    Adds a new synchronous segment to the promise. The same closure will be invoked on promise settling r...
    -
    struct uel_promise_store * source
    The promise store from where this promise was issued.
    Definition: promise.h:75
    -
    @ UEL_PROMISE_PENDING
    A promise that has not been resolved nor rejected.
    Definition: promise.h:20
    -
    uel_closure_t resolve
    The closure to be invoked when the promise is resolved.
    Definition: promise.h:43
    -
    uel_promise_store_t uel_promise_store_create(uel_objpool_t *promise_pool, uel_objpool_t *segment_pool)
    Creates a new promise store from the promise and segment pools.
    -
    enum uel_promise_state uel_promise_state_t
    Alias to the uel_promise_state enum.
    Definition: promise.h:25
    -
    void uel_promise_reject(uel_promise_t *promise, void *value)
    Settles a promise as rejected and, synchronously, invokes the reject closures of each segment in the ...
    -
    uel_promise_state
    Defines the possible states for a prommise.
    Definition: promise.h:19
    -
    uel_closure_t uel_promise_rejecter(uel_promise_t *promise)
    Creates a closure bound to a promise. When the closure is invoked with some parameter,...
    -
    A promise is association of an asynchronous operation to the possible execution paths that follow its...
    Definition: promise.h:73
    -
    uel_closure_t reject
    The closure to be invoked when the promise is rejected.
    Definition: promise.h:45
    -
    uel_closure_t uel_promise_resolver(uel_promise_t *promise)
    Creates a closure bound to a promise. When the closure is invoked with some parameter,...
    -
    Defines a single synchronous operation to be invoked when the promise is either resolved or rejected.
    Definition: promise.h:41
    -
    void uel_promise_destroy(uel_promise_t *promise)
    Destroys a promise and all of its segments. Settling this promise afterwards yields undefined behavio...
    -
    void uel_promise_catch(uel_promise_t *promise, uel_closure_t reject)
    Adds a new synchronous segment to the promise. It will be invoked upon promise rejection....
    -
    Central repository of system configuration. This is meant to be edited by the programmer as needed.
    -
    void uel_promise_resolve(uel_promise_t *promise, void *value)
    Settles a promise as resolved and, synchronously, invokes the resolve closures of each segment in the...
    - - - - diff --git a/docs/html/scheduler_8h.html b/docs/html/scheduler_8h.html deleted file mode 100644 index b9273ee..0000000 --- a/docs/html/scheduler_8h.html +++ /dev/null @@ -1,365 +0,0 @@ - - - - - - - -µEvLoop: include/uevloop/system/scheduler.h File Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    µEvLoop -
    -
    A fast and lightweight event loop aimed at embedded platforms in C99.
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    - -
    -
    scheduler.h File Reference
    -
    -
    - -

    Module responsible for keeping track of time and tasks to be run in the future. -More...

    -
    -Include dependency graph for scheduler.h:
    -
    -
    - - - - - - - - - - - -
    -
    -This graph shows which files directly or indirectly include this file:
    -
    -
    - - - - -
    -
    -

    Go to the source code of this file.

    - - - - - -

    -Data Structures

    struct  uel_scheduer_t
     The scheduler object. More...
     
    - - - - - - - - - - - - - - - - -

    -Functions

    void uel_sch_init (uel_scheduer_t *scheduler, uel_syspools_t *pools, uel_sysqueues_t *queues)
     Initialises a scheduler object. More...
     
    uel_event_t * uel_sch_run_later (uel_scheduer_t *scheduler, uint16_t timeout_in_ms, uel_closure_t closure, void *value)
     Enqueues a closure for later execution. More...
     
    uel_event_t * uel_sch_run_at_intervals (uel_scheduer_t *scheduler, uint16_t interval_in_ms, bool immediate, uel_closure_t closure, void *value)
     Enqueues a closure for execution at intervals. More...
     
    void uel_sch_manage_timers (uel_scheduer_t *scheduler)
     Enqueue timers that are due to be processed in the event queue. More...
     
    void uel_sch_update_timer (uel_scheduer_t *scheduler, uint32_t timer)
     Updates the internal time counter. More...
     
    -

    Detailed Description

    -

    Module responsible for keeping track of time and tasks to be run in the future.

    -

    Function Documentation

    - -

    ◆ uel_sch_init()

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void uel_sch_init (uel_scheduer_t * scheduler,
    uel_syspools_t * pools,
    uel_sysqueues_t * queues 
    )
    -
    - -

    Initialises a scheduler object.

    -
    Parameters
    - - - - -
    schedulerThe uel_scheduer_t instance to be initialised
    poolsThe system's internal pools
    queuesThe system's internal queues
    -
    -
    - -
    -
    - -

    ◆ uel_sch_manage_timers()

    - -
    -
    - - - - - - - - -
    void uel_sch_manage_timers (uel_scheduer_t * scheduler)
    -
    - -

    Enqueue timers that are due to be processed in the event queue.

    -

    Checks, based on the current time counter, what timers should be enqueued for execution. Afterwards, enqueue them.

    -
    Parameters
    - - -
    schedulerThe uel_scheduer_t to manage
    -
    -
    - -
    -
    - -

    ◆ uel_sch_run_at_intervals()

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    uel_event_t* uel_sch_run_at_intervals (uel_scheduer_t * scheduler,
    uint16_t interval_in_ms,
    bool immediate,
    uel_closure_t closure,
    void * value 
    )
    -
    - -

    Enqueues a closure for execution at intervals.

    -
    Parameters
    - - - - - - -
    schedulerThe uel_scheduer_t into which the event will be registered
    interval_in_msThe delay in milliseconds two executions of the closure
    immediateIf this flag is set, the the event will be created with a due time to the current time.
    closureThe closure to be invoked when the due time is reached
    valueThe value to invoked the closure with
    -
    -
    -
    Returns
    The scheduled event
    - -
    -
    - -

    ◆ uel_sch_run_later()

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    uel_event_t* uel_sch_run_later (uel_scheduer_t * scheduler,
    uint16_t timeout_in_ms,
    uel_closure_t closure,
    void * value 
    )
    -
    - -

    Enqueues a closure for later execution.

    -
    Parameters
    - - - - - -
    schedulerThe uel_scheduer_t into which the event will be registered
    timeout_in_msThe delay in milliseconds until the closure is run
    closureThe closure to be invoked when the due time is reached
    valueThe value to invoked the closure with
    -
    -
    -
    Returns
    The scheduled event
    - -
    -
    - -

    ◆ uel_sch_update_timer()

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    void uel_sch_update_timer (uel_scheduer_t * scheduler,
    uint32_t timer 
    )
    -
    - -

    Updates the internal time counter.

    -
    Parameters
    - - - -
    schedulerThe scheduler whose time coounter should be updated
    timerThe new counter value to be acknowledged.
    -
    -
    - -
    -
    -
    - - - - diff --git a/docs/html/scheduler_8h__dep__incl.map b/docs/html/scheduler_8h__dep__incl.map deleted file mode 100644 index d475202..0000000 --- a/docs/html/scheduler_8h__dep__incl.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/docs/html/scheduler_8h__dep__incl.md5 b/docs/html/scheduler_8h__dep__incl.md5 deleted file mode 100644 index f2c900e..0000000 --- a/docs/html/scheduler_8h__dep__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -d0d34a02aa097dc13ef389450e75f2a6 \ No newline at end of file diff --git a/docs/html/scheduler_8h__dep__incl.png b/docs/html/scheduler_8h__dep__incl.png deleted file mode 100644 index 3011801..0000000 Binary files a/docs/html/scheduler_8h__dep__incl.png and /dev/null differ diff --git a/docs/html/scheduler_8h__incl.map b/docs/html/scheduler_8h__incl.map deleted file mode 100644 index bcb2ed7..0000000 --- a/docs/html/scheduler_8h__incl.map +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/docs/html/scheduler_8h__incl.md5 b/docs/html/scheduler_8h__incl.md5 deleted file mode 100644 index 304d901..0000000 --- a/docs/html/scheduler_8h__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -4364fb280af1d2730ffa9ac02cb82df9 \ No newline at end of file diff --git a/docs/html/scheduler_8h__incl.png b/docs/html/scheduler_8h__incl.png deleted file mode 100644 index bfc66b7..0000000 Binary files a/docs/html/scheduler_8h__incl.png and /dev/null differ diff --git a/docs/html/scheduler_8h_source.html b/docs/html/scheduler_8h_source.html deleted file mode 100644 index 7af9a80..0000000 --- a/docs/html/scheduler_8h_source.html +++ /dev/null @@ -1,146 +0,0 @@ - - - - - - - -µEvLoop: include/uevloop/system/scheduler.h Source File - - - - - - - - - -
    -
    - - - - - - -
    -
    µEvLoop -
    -
    A fast and lightweight event loop aimed at embedded platforms in C99.
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    -
    -
    scheduler.h
    -
    -
    -Go to the documentation of this file.
    1 
    -
    6 #ifndef UEL_SCHEDULER_H
    -
    7 #define UEL_SCHEDULER_H
    -
    8 
    -
    10 #include <stdint.h>
    -
    12 
    - - - -
    16 #include "uevloop/utils/closure.h"
    -
    17 
    -
    27 typedef struct uel_scheduler uel_scheduer_t;
    - -
    35  uel_llist_t timer_list;
    -
    36 
    -
    44  uel_llist_t pause_list;
    -
    45 
    -
    46  uel_syspools_t *pools;
    -
    47  uel_sysqueues_t *queues;
    -
    48 
    -
    50  volatile uint32_t timer;
    -
    51 };
    -
    52 
    -
    59 void uel_sch_init(
    -
    60  uel_scheduer_t *scheduler,
    -
    61  uel_syspools_t *pools,
    -
    62  uel_sysqueues_t *queues
    -
    63 );
    -
    64 
    -
    73 uel_event_t *uel_sch_run_later(
    -
    74  uel_scheduer_t *scheduler,
    -
    75  uint16_t timeout_in_ms,
    -
    76  uel_closure_t closure,
    -
    77  void *value
    -
    78 );
    -
    79 
    -
    80 
    -
    91 uel_event_t *uel_sch_run_at_intervals(
    -
    92  uel_scheduer_t *scheduler,
    -
    93  uint16_t interval_in_ms,
    -
    94  bool immediate,
    -
    95  uel_closure_t closure,
    -
    96  void *value
    -
    97 );
    -
    98 
    -
    106 void uel_sch_manage_timers(uel_scheduer_t *scheduler);
    -
    107 
    -
    113 void uel_sch_update_timer(uel_scheduer_t *scheduler, uint32_t timer);
    -
    114 
    -
    115 #endif /* UEL_SCHEDULER_H */
    -
    -
    Defines a simple implementation of linked lists and functions to manipulate it.
    -
    uel_syspools_t * pools
    Reference to the system's pools.
    Definition: scheduler.h:46
    -
    Defines closures, objects that bind functions to creating and calling contexts.
    -
    void uel_sch_init(uel_scheduer_t *scheduler, uel_syspools_t *pools, uel_sysqueues_t *queues)
    Initialises a scheduler object.
    -
    uel_llist_t pause_list
    Paused timers linked list.
    Definition: scheduler.h:44
    -
    The scheduler object.
    Definition: scheduler.h:28
    -
    uel_sysqueues_t * queues
    Reference to the system's queues.
    Definition: scheduler.h:47
    -
    uel_event_t * uel_sch_run_later(uel_scheduer_t *scheduler, uint16_t timeout_in_ms, uel_closure_t closure, void *value)
    Enqueues a closure for later execution.
    -
    volatile uint32_t timer
    Internal timer. Must be updated via uel_sch_update_timer()
    Definition: scheduler.h:50
    -
    uel_event_t * uel_sch_run_at_intervals(uel_scheduer_t *scheduler, uint16_t interval_in_ms, bool immediate, uel_closure_t closure, void *value)
    Enqueues a closure for execution at intervals.
    -
    void uel_sch_update_timer(uel_scheduer_t *scheduler, uint32_t timer)
    Updates the internal time counter.
    -
    uel_llist_t timer_list
    Scheduled timers linked list.
    Definition: scheduler.h:35
    -
    A container for the system's internal queues.
    -
    A container for the system's internal pools.
    -
    void uel_sch_manage_timers(uel_scheduer_t *scheduler)
    Enqueue timers that are due to be processed in the event queue.
    - - - - diff --git a/docs/html/search/all_0.html b/docs/html/search/all_0.html deleted file mode 100644 index 26dd244..0000000 --- a/docs/html/search/all_0.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/all_0.js b/docs/html/search/all_0.js deleted file mode 100644 index ea4cfb9..0000000 --- a/docs/html/search/all_0.js +++ /dev/null @@ -1,7 +0,0 @@ -var searchData= -[ - ['app_0',['app',['../structuel__module.html#a05f6845722afabe30337e1d294fb0a9e',1,'uel_module']]], - ['application_2eh_1',['application.h',['../application_8h.html',1,'']]], - ['automatic_2dpool_2eh_2',['automatic-pool.h',['../automatic-pool_8h.html',1,'']]], - ['autoptr_5fpool_3',['autoptr_pool',['../structuel__autopool.html#aa0f1f8622a0ba1f1d2d15d94eb5cbc71',1,'uel_autopool']]] -]; diff --git a/docs/html/search/all_1.html b/docs/html/search/all_1.html deleted file mode 100644 index 8eb215b..0000000 --- a/docs/html/search/all_1.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/all_1.js b/docs/html/search/all_1.js deleted file mode 100644 index d864035..0000000 --- a/docs/html/search/all_1.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['base_4',['base',['../structuel__iterator__array.html#ace993eaa734f8fd100b086c2539afad9',1,'uel_iterator_array']]], - ['buffer_5',['buffer',['../structuel__cqueue.html#a5a87f38cf8b46556a71b286c8623a54d',1,'uel_cqueue::buffer()'],['../structuel__objpool.html#a69cf1db520005f386293899cdb9e07ca',1,'uel_objpool::buffer()']]] -]; diff --git a/docs/html/search/all_10.html b/docs/html/search/all_10.html deleted file mode 100644 index 6fd3a4a..0000000 --- a/docs/html/search/all_10.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/all_10.js b/docs/html/search/all_10.js deleted file mode 100644 index befcf7a..0000000 --- a/docs/html/search/all_10.js +++ /dev/null @@ -1,9 +0,0 @@ -var searchData= -[ - ['tail_91',['tail',['../structuel__cqueue.html#aa4fa1f34111ddf307825c9a6b06c4b4e',1,'uel_cqueue::tail()'],['../structuel__llist.html#a8d93e6bd35f15f0ee438088ebf814671',1,'uel_llist::tail()']]], - ['test_92',['test',['../structuel__conditional.html#a8d83f18dd90afbc47881b9617087c4a1',1,'uel_conditional']]], - ['timeout_93',['timeout',['../structevent_1_1uel__event__detail_1_1uel__event__timer.html#a9a6b966db9c39c3302c2a1cb8e813cad',1,'event::uel_event_detail::uel_event_timer']]], - ['timer_94',['timer',['../unionevent_1_1uel__event__detail.html#a5d602dc38887276027f2dac93afcb81d',1,'event::uel_event_detail::timer()'],['../structuel__scheduler.html#a46642fc80fb6d917ed35f3ab61d1c7eb',1,'uel_scheduler::timer()']]], - ['timer_5flist_95',['timer_list',['../structuel__scheduler.html#a9c71f717e4ca6878742aad2e147e9dd6',1,'uel_scheduler']]], - ['type_96',['type',['../structevent.html#a22c24ebb438dfad40f977484a1fa7a35',1,'event']]] -]; diff --git a/docs/html/search/all_11.html b/docs/html/search/all_11.html deleted file mode 100644 index f78343b..0000000 --- a/docs/html/search/all_11.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/all_11.js b/docs/html/search/all_11.js deleted file mode 100644 index 6e030ce..0000000 --- a/docs/html/search/all_11.js +++ /dev/null @@ -1,188 +0,0 @@ -var searchData= -[ - ['uel_5fapp_5fenqueue_5fclosure_97',['uel_app_enqueue_closure',['../application_8h.html#a0ccd5d564ff573bcf157a0b21f58cca7',1,'application.h']]], - ['uel_5fapp_5fevent_98',['uel_app_event',['../application_8h.html#a335ab53567298b8918257c2970b388f2',1,'application.h']]], - ['uel_5fapp_5fevent_5ft_99',['uel_app_event_t',['../application_8h.html#a138e72d6aced8d43e9a2d0c63c830080',1,'application.h']]], - ['uel_5fapp_5finit_100',['uel_app_init',['../application_8h.html#ab221d8fc71af4fbf92525a7691b039ae',1,'application.h']]], - ['uel_5fapp_5fload_101',['uel_app_load',['../application_8h.html#aed8a446de669fcab5bc591fb28d3b5f6',1,'application.h']]], - ['uel_5fapp_5fobserve_102',['uel_app_observe',['../application_8h.html#ab581cf79189c8c2bdbb6b476ee91c761',1,'application.h']]], - ['uel_5fapp_5frequire_103',['uel_app_require',['../application_8h.html#a66ccab648cf052380fd7459748316e29',1,'application.h']]], - ['uel_5fapp_5frun_5fat_5fintervals_104',['uel_app_run_at_intervals',['../application_8h.html#a5f9d6a430845dc9bc6150346f8bb00ef',1,'application.h']]], - ['uel_5fapp_5frun_5flater_105',['uel_app_run_later',['../application_8h.html#a662ad4bd4836fe3790eefe21fd38ba0e',1,'application.h']]], - ['uel_5fapp_5ftick_106',['uel_app_tick',['../application_8h.html#adbbe5a9f65d8b1168d00c270cff52085',1,'application.h']]], - ['uel_5fapp_5fupdate_5ftimer_107',['uel_app_update_timer',['../application_8h.html#aac33288da9d190eda72d9598b877b7f7',1,'application.h']]], - ['uel_5fapplication_108',['uel_application',['../structuel__application.html',1,'']]], - ['uel_5fautopool_109',['uel_autopool',['../structuel__autopool.html',1,'']]], - ['uel_5fautopool_5falloc_110',['uel_autopool_alloc',['../automatic-pool_8h.html#aa4824c8fb0acb2059ee3c1ebf327712f',1,'automatic-pool.h']]], - ['uel_5fautopool_5fbuffers_111',['UEL_AUTOPOOL_BUFFERS',['../automatic-pool_8h.html#a956766ef0a875886ce9cee1751fed842',1,'automatic-pool.h']]], - ['uel_5fautopool_5fbuffers_5fat_112',['UEL_AUTOPOOL_BUFFERS_AT',['../automatic-pool_8h.html#a06ddb8294f2f7ff72a458684df783479',1,'automatic-pool.h']]], - ['uel_5fautopool_5fbuffers_5fin_113',['UEL_AUTOPOOL_BUFFERS_IN',['../automatic-pool_8h.html#aed55c3bfece785d4bc440359c4a84697',1,'automatic-pool.h']]], - ['uel_5fautopool_5finit_114',['uel_autopool_init',['../automatic-pool_8h.html#a32b26c65f4e2c7dfc733e14a0c06b746',1,'automatic-pool.h']]], - ['uel_5fautopool_5fis_5fempty_115',['uel_autopool_is_empty',['../automatic-pool_8h.html#aa94c4ff64e887bff5dfc5c8ef3fcd380',1,'automatic-pool.h']]], - ['uel_5fautopool_5fset_5fconstructor_116',['uel_autopool_set_constructor',['../automatic-pool_8h.html#ab00201d7a847f7844ba6a1aebe38384d',1,'automatic-pool.h']]], - ['uel_5fautopool_5fset_5fdestructor_117',['uel_autopool_set_destructor',['../automatic-pool_8h.html#a7f57eb19fffa1865c2a8b69aa61acc2b',1,'automatic-pool.h']]], - ['uel_5fautoptr_118',['uel_autoptr',['../structuel__autoptr.html',1,'']]], - ['uel_5fautoptr_5fdealloc_119',['uel_autoptr_dealloc',['../automatic-pool_8h.html#affb23d5f2209456cfcb4228ae258f409',1,'automatic-pool.h']]], - ['uel_5fautoptr_5ft_120',['uel_autoptr_t',['../automatic-pool_8h.html#a83a2aef2df919bea22dd489c0a5403fd',1,'automatic-pool.h']]], - ['uel_5fclosure_121',['uel_closure',['../structuel__closure.html',1,'']]], - ['uel_5fclosure_5fcreate_122',['uel_closure_create',['../closure_8h.html#adbc9cc1a9562693b06bfacd82d8ac978',1,'closure.h']]], - ['uel_5fclosure_5ffunction_5ft_123',['uel_closure_function_t',['../closure_8h.html#a04cc5d51a9c86aeedcd6641b43dd8564',1,'closure.h']]], - ['uel_5fclosure_5finvoke_124',['uel_closure_invoke',['../closure_8h.html#adcd44820dd3715e206fdf71800e8926c',1,'closure.h']]], - ['uel_5fconditional_125',['uel_conditional',['../structuel__conditional.html',1,'']]], - ['uel_5fconditional_5fapply_126',['uel_conditional_apply',['../conditional_8h.html#a09ded07bf4d8645615a25557a87c996d',1,'conditional.h']]], - ['uel_5fconditional_5finit_127',['uel_conditional_init',['../conditional_8h.html#acb6e7aa5cd25863e7a628d233a967412',1,'conditional.h']]], - ['uel_5fcqueue_128',['uel_cqueue',['../structuel__cqueue.html',1,'']]], - ['uel_5fcqueue_5fclear_129',['uel_cqueue_clear',['../circular-queue_8h.html#a8df6047e956a849653bc6fe980706a07',1,'circular-queue.h']]], - ['uel_5fcqueue_5fcount_130',['uel_cqueue_count',['../circular-queue_8h.html#ad5efb7d3f6579abf94ae15c83cbcde40',1,'circular-queue.h']]], - ['uel_5fcqueue_5finit_131',['uel_cqueue_init',['../circular-queue_8h.html#acf451cae31642c456faada2501a4977e',1,'circular-queue.h']]], - ['uel_5fcqueue_5fis_5fempty_132',['uel_cqueue_is_empty',['../circular-queue_8h.html#abcd173ac88be8796deacdff15aa0e964',1,'circular-queue.h']]], - ['uel_5fcqueue_5fis_5ffull_133',['uel_cqueue_is_full',['../circular-queue_8h.html#a8ab1a212bf38b1578f9df769b65437e3',1,'circular-queue.h']]], - ['uel_5fcqueue_5fpeek_5fhead_134',['uel_cqueue_peek_head',['../circular-queue_8h.html#a8d23ce639b076f853247a62670cfae30',1,'circular-queue.h']]], - ['uel_5fcqueue_5fpeek_5ftail_135',['uel_cqueue_peek_tail',['../circular-queue_8h.html#aaf2d52fbe078fc80ef8e6119d12155ff',1,'circular-queue.h']]], - ['uel_5fcqueue_5fpop_136',['uel_cqueue_pop',['../circular-queue_8h.html#a818331aa6bf56e977f7a95d996e9009d',1,'circular-queue.h']]], - ['uel_5fcqueue_5fpush_137',['uel_cqueue_push',['../circular-queue_8h.html#ae65acd13845cdd8e2492201538c2e968',1,'circular-queue.h']]], - ['uel_5fcritical_5fenter_138',['UEL_CRITICAL_ENTER',['../critical-section_8h.html#a7c0f97308e835939cf0404b167cc188a',1,'critical-section.h']]], - ['uel_5fcritical_5fexit_139',['UEL_CRITICAL_EXIT',['../critical-section_8h.html#aebdb2b9597df1dac79b2fd88d58d6539',1,'critical-section.h']]], - ['uel_5fdeclare_5fautopool_5fbuffers_140',['UEL_DECLARE_AUTOPOOL_BUFFERS',['../automatic-pool_8h.html#a59c59798394f60a6e567954997cc8176',1,'automatic-pool.h']]], - ['uel_5fdeclare_5fobjpool_5fbuffers_141',['UEL_DECLARE_OBJPOOL_BUFFERS',['../object-pool_8h.html#a6f94946d39d323f7ea0f409962c59f1e',1,'object-pool.h']]], - ['uel_5fevent_5fconfig_5fclosure_142',['uel_event_config_closure',['../event_8h.html#a39a1530d0b0a93a8d810d0e37fe03160',1,'event.h']]], - ['uel_5fevent_5fconfig_5fobserver_143',['uel_event_config_observer',['../event_8h.html#afc174dfecb1d892499c2edd5a1f5f879',1,'event.h']]], - ['uel_5fevent_5fconfig_5fsignal_144',['uel_event_config_signal',['../event_8h.html#a2345bf8b0ddb2f59b4d5f35f0442d3cf',1,'event.h']]], - ['uel_5fevent_5fconfig_5fsignal_5flistener_145',['uel_event_config_signal_listener',['../event_8h.html#a4f2472662aa1378f437ac46dd85088e8',1,'event.h']]], - ['uel_5fevent_5fconfig_5ftimer_146',['uel_event_config_timer',['../event_8h.html#ac5daec069fa7e1e98044307c06e7bc85',1,'event.h']]], - ['uel_5fevent_5fdetail_147',['uel_event_detail',['../unionevent_1_1uel__event__detail.html',1,'event']]], - ['uel_5fevent_5flistener_148',['uel_event_listener',['../structevent_1_1uel__event__detail_1_1uel__event__listener.html',1,'event::uel_event_detail']]], - ['uel_5fevent_5fobserver_149',['uel_event_observer',['../structevent_1_1uel__event__detail_1_1uel__event__observer.html',1,'event::uel_event_detail']]], - ['uel_5fevent_5fobserver_5fcancel_150',['uel_event_observer_cancel',['../event_8h.html#ad3ebbe62dc7e5749c447b28238499af6',1,'event.h']]], - ['uel_5fevent_5fsignal_151',['uel_event_signal',['../structevent_1_1uel__event__detail_1_1uel__event__signal.html',1,'event::uel_event_detail']]], - ['uel_5fevent_5ftimer_152',['uel_event_timer',['../structevent_1_1uel__event__detail_1_1uel__event__timer.html',1,'event::uel_event_detail']]], - ['uel_5fevent_5ftimer_5fcancel_153',['uel_event_timer_cancel',['../event_8h.html#a306a18151beee2907b06895f86f8837d',1,'event.h']]], - ['uel_5fevent_5ftimer_5fpause_154',['uel_event_timer_pause',['../event_8h.html#af7fa468eacdeaf628daa64808721dabd',1,'event.h']]], - ['uel_5fevent_5ftimer_5fresume_155',['uel_event_timer_resume',['../event_8h.html#ae876c8b387f90c2a05a78a922ed8c9fb',1,'event.h']]], - ['uel_5fevent_5ftimer_5fstatus_156',['uel_event_timer_status',['../event_8h.html#ae586ca82fed67108457450a49661a4aa',1,'event.h']]], - ['uel_5fevent_5ftimer_5fstatus_5ft_157',['uel_event_timer_status_t',['../event_8h.html#ada757ae763328a1774f87efe179e0d0d',1,'event.h']]], - ['uel_5fevent_5ftype_158',['uel_event_type',['../event_8h.html#a0a3805dfccf139ba6521d57e0b79fb60',1,'event.h']]], - ['uel_5fevent_5ftype_5ft_159',['uel_event_type_t',['../event_8h.html#a04647f8821482fc8f635924fc2f1539b',1,'event.h']]], - ['uel_5fevloop_160',['uel_evloop',['../structuel__evloop.html',1,'']]], - ['uel_5fevloop_5fenqueue_5fclosure_161',['uel_evloop_enqueue_closure',['../event-loop_8h.html#a1d3464894f0281c7b1f4c9c18dddcaf4',1,'event-loop.h']]], - ['uel_5fevloop_5finit_162',['uel_evloop_init',['../event-loop_8h.html#abb6102256fd588588045a5743f07247d',1,'event-loop.h']]], - ['uel_5fevloop_5fobserve_163',['uel_evloop_observe',['../event-loop_8h.html#af08a755b11d666cdfa0b35446d007d13',1,'event-loop.h']]], - ['uel_5fevloop_5fobserve_5fonce_164',['uel_evloop_observe_once',['../event-loop_8h.html#a67264e6232817d1f23288856dbd1a3bb',1,'event-loop.h']]], - ['uel_5fevloop_5frun_165',['uel_evloop_run',['../event-loop_8h.html#ad5371df9faa7072e1fd11470448de901',1,'event-loop.h']]], - ['uel_5ffunc_5fall_166',['uel_func_all',['../functional_8h.html#a27004669ef5f883bdf911b6d3ec28995',1,'functional.h']]], - ['uel_5ffunc_5fany_167',['uel_func_any',['../functional_8h.html#ab04a6190af8139356acde68fbfa36d19',1,'functional.h']]], - ['uel_5ffunc_5fconditional_168',['uel_func_conditional',['../functional_8h.html#a97c901138cf1de87f9c5675d525d9842',1,'functional.h']]], - ['uel_5ffunc_5fcount_169',['uel_func_count',['../functional_8h.html#a8c8014f63f6b20972697e867734034d4',1,'functional.h']]], - ['uel_5ffunc_5ffind_170',['uel_func_find',['../functional_8h.html#ac70b7b1e40d33fc05249d800361d4303',1,'functional.h']]], - ['uel_5ffunc_5fforeach_171',['uel_func_foreach',['../functional_8h.html#abe102286c62fd56e5f16014282144467',1,'functional.h']]], - ['uel_5ffunc_5fmap_172',['uel_func_map',['../functional_8h.html#a03c3cc3260a99348d50c6f8de16248ba',1,'functional.h']]], - ['uel_5ffunc_5fmapper_173',['uel_func_mapper',['../structuel__func__mapper.html',1,'']]], - ['uel_5ffunc_5fmapper_5finit_174',['uel_func_mapper_init',['../functional_8h.html#a6623a1b2cdf37983fd6bebf2fd3570c4',1,'functional.h']]], - ['uel_5ffunc_5fnone_175',['uel_func_none',['../functional_8h.html#a0f10f9a3f9d0131952d3ffc6ff6cdac0',1,'functional.h']]], - ['uel_5ffunc_5fpipeline_176',['uel_func_pipeline',['../functional_8h.html#a59ef21c6c45d7f95955f2b49f7ebc241',1,'functional.h']]], - ['uel_5fiterator_177',['uel_iterator',['../structuel__iterator.html',1,'']]], - ['uel_5fiterator_5fall_178',['uel_iterator_all',['../iterator_8h.html#add9308f85bc2ecf781bca558c3e0ce50',1,'iterator.h']]], - ['uel_5fiterator_5fany_179',['uel_iterator_any',['../iterator_8h.html#a354f1f9b00d7033338dd2e5bd078da19',1,'iterator.h']]], - ['uel_5fiterator_5farray_180',['uel_iterator_array',['../structuel__iterator__array.html',1,'']]], - ['uel_5fiterator_5farray_5fcreate_181',['uel_iterator_array_create',['../iterator_8h.html#a0acc2751d0a555963f923fca73c0200a',1,'iterator.h']]], - ['uel_5fiterator_5farray_5fnext_182',['uel_iterator_array_next',['../iterator_8h.html#ae527f0990ab89f4f2e5ad26fd6fd90b6',1,'iterator.h']]], - ['uel_5fiterator_5fcount_183',['uel_iterator_count',['../iterator_8h.html#ae415aaa0c760c504717fcacfca3b294d',1,'iterator.h']]], - ['uel_5fiterator_5ffind_184',['uel_iterator_find',['../iterator_8h.html#ae77e788e5eae4d1ef812005ccc6d83e9',1,'iterator.h']]], - ['uel_5fiterator_5fforeach_185',['uel_iterator_foreach',['../iterator_8h.html#a590b4d91255d67d8878675503ec235f0',1,'iterator.h']]], - ['uel_5fiterator_5fllist_5fcreate_186',['uel_iterator_llist_create',['../iterator_8h.html#ae6d556c0d69311f1ea8deb05ddb722a4',1,'iterator.h']]], - ['uel_5fiterator_5fllist_5fnext_187',['uel_iterator_llist_next',['../iterator_8h.html#a52d44b593487736766981844ab9c381f',1,'iterator.h']]], - ['uel_5fiterator_5fllist_5ft_188',['uel_iterator_llist_t',['../iterator_8h.html#a0646f93de558b7d6c5c312c010cf7254',1,'iterator.h']]], - ['uel_5fiterator_5fmap_189',['uel_iterator_map',['../iterator_8h.html#a6ca0083f388164973c9d6f9518799b03',1,'iterator.h']]], - ['uel_5fiterator_5fmap_5fboundless_190',['UEL_ITERATOR_MAP_BOUNDLESS',['../iterator_8h.html#a6f1cacb4e55d7a7e1b7d1a4ae9f8c2bb',1,'iterator.h']]], - ['uel_5fiterator_5fnone_191',['uel_iterator_none',['../iterator_8h.html#a51d3573756956d42f7b67b5b9acc27a3',1,'iterator.h']]], - ['uel_5fllist_192',['uel_llist',['../structuel__llist.html',1,'']]], - ['uel_5fllist_5finit_193',['uel_llist_init',['../linked-list_8h.html#a636d9d433df7fd53fc3138b6c77df75a',1,'linked-list.h']]], - ['uel_5fllist_5finsert_5fat_194',['uel_llist_insert_at',['../linked-list_8h.html#a2486cc91fa52a2fac1f0b0e7dc9a4562',1,'linked-list.h']]], - ['uel_5fllist_5fnode_195',['uel_llist_node',['../structuel__llist__node.html',1,'']]], - ['uel_5fllist_5fpeek_5fhead_196',['uel_llist_peek_head',['../linked-list_8h.html#ab663ff1457ec2ddbcba9a8f1c7399163',1,'linked-list.h']]], - ['uel_5fllist_5fpeek_5ftail_197',['uel_llist_peek_tail',['../linked-list_8h.html#a33fca34e728f3524f6ebd328b96a1c80',1,'linked-list.h']]], - ['uel_5fllist_5fpop_5fhead_198',['uel_llist_pop_head',['../linked-list_8h.html#aeb330b9c1971e23248fc39d918979503',1,'linked-list.h']]], - ['uel_5fllist_5fpop_5ftail_199',['uel_llist_pop_tail',['../linked-list_8h.html#ac4f27f948e355936eede9ef5ef808d43',1,'linked-list.h']]], - ['uel_5fllist_5fpush_5fhead_200',['uel_llist_push_head',['../linked-list_8h.html#a0a98f53f55f86adb45e4f0f357d748a8',1,'linked-list.h']]], - ['uel_5fllist_5fpush_5ftail_201',['uel_llist_push_tail',['../linked-list_8h.html#a2ab3add326e3c3a382386786fa5bbf63',1,'linked-list.h']]], - ['uel_5fllist_5fremove_202',['uel_llist_remove',['../linked-list_8h.html#acdb87dcd0d23db28be24297a7f7db7b0',1,'linked-list.h']]], - ['uel_5fllist_5fremove_5fwhile_203',['uel_llist_remove_while',['../linked-list_8h.html#a55def6b7dd819e8e9798787f781d00b7',1,'linked-list.h']]], - ['uel_5fmodule_204',['uel_module',['../structuel__module.html',1,'']]], - ['uel_5fmodule_5fconfig_205',['uel_module_config',['../module_8h.html#aa20d61157d25ebdb6abd2d774e2035d9',1,'module.h']]], - ['uel_5fmodule_5fhook_5ft_206',['uel_module_hook_t',['../module_8h.html#ad589448a7bcdb1d7cce57f42346a1657',1,'module.h']]], - ['uel_5fmodule_5finit_207',['uel_module_init',['../module_8h.html#a3a1d7dc04cf2b7c5c84a61cfd5056772',1,'module.h']]], - ['uel_5fmodule_5flaunch_208',['uel_module_launch',['../module_8h.html#a144a21cefd8d58d672b02b21def8c627',1,'module.h']]], - ['uel_5fnop_209',['uel_nop',['../closure_8h.html#a1f88fc773dbcea710594c7175d3a4ac3',1,'closure.h']]], - ['uel_5fobjpool_210',['uel_objpool',['../structuel__objpool.html',1,'']]], - ['uel_5fobjpool_5facquire_211',['uel_objpool_acquire',['../object-pool_8h.html#a54248e0810ccb791a8ff82d3de8fc6c5',1,'object-pool.h']]], - ['uel_5fobjpool_5fbuffers_212',['UEL_OBJPOOL_BUFFERS',['../object-pool_8h.html#a623ea70a0df4cc76d0e65a99bc5c26c9',1,'object-pool.h']]], - ['uel_5fobjpool_5fbuffers_5fat_213',['UEL_OBJPOOL_BUFFERS_AT',['../object-pool_8h.html#aa3a5c0e14ab186fffed61c2b3d67405e',1,'object-pool.h']]], - ['uel_5fobjpool_5fbuffers_5fin_214',['UEL_OBJPOOL_BUFFERS_IN',['../object-pool_8h.html#ae25ae5d897163fb9104f4295f6fdf84b',1,'object-pool.h']]], - ['uel_5fobjpool_5finit_215',['uel_objpool_init',['../object-pool_8h.html#ab49dd047b6e4fcc0939dfd651e3b3666',1,'object-pool.h']]], - ['uel_5fobjpool_5fis_5fempty_216',['uel_objpool_is_empty',['../object-pool_8h.html#ae116db7f19b0971e6781e375361265ce',1,'object-pool.h']]], - ['uel_5fobjpool_5frelease_217',['uel_objpool_release',['../object-pool_8h.html#af4370a164b82e436749fbc9f8af9a114',1,'object-pool.h']]], - ['uel_5fpipeline_218',['uel_pipeline',['../structuel__pipeline.html',1,'']]], - ['uel_5fpipeline_5fapply_219',['uel_pipeline_apply',['../pipeline_8h.html#a54df79756518430d753961735c93d270',1,'pipeline.h']]], - ['uel_5fpipeline_5fdeclare_220',['UEL_PIPELINE_DECLARE',['../pipeline_8h.html#a64c47a347b70a55627e1a66a9972890c',1,'pipeline.h']]], - ['uel_5fpipeline_5finit_221',['uel_pipeline_init',['../pipeline_8h.html#ad7cfa65777a90f537ab031b6d8dac028',1,'pipeline.h']]], - ['uel_5fpromise_222',['uel_promise',['../structuel__promise.html',1,'']]], - ['uel_5fpromise_5fafter_223',['uel_promise_after',['../promise_8h.html#a4b1b8ee1101104f1beaa782ef630767f',1,'promise.h']]], - ['uel_5fpromise_5falways_224',['uel_promise_always',['../promise_8h.html#a6a932817fcd43d5eaa2723b8c34132ff',1,'promise.h']]], - ['uel_5fpromise_5fcatch_225',['uel_promise_catch',['../promise_8h.html#a550561c65f5abb38bc5c3b25083dd468',1,'promise.h']]], - ['uel_5fpromise_5fcreate_226',['uel_promise_create',['../promise_8h.html#a5c0cdf2e971bf738362af1761c729bd4',1,'promise.h']]], - ['uel_5fpromise_5fdestroy_227',['uel_promise_destroy',['../promise_8h.html#ac43ce3e3316581da32cf3e21c15901f0',1,'promise.h']]], - ['uel_5fpromise_5fdestroyer_228',['uel_promise_destroyer',['../promise_8h.html#a9b68547bf7ac1a5860b165a4638bcc51',1,'promise.h']]], - ['uel_5fpromise_5fpending_229',['UEL_PROMISE_PENDING',['../promise_8h.html#ac0201d84b1e362087d83bdb57a8e8856ae619a3bfec8234d4302fbec8c2dfe6d2',1,'promise.h']]], - ['uel_5fpromise_5freject_230',['uel_promise_reject',['../promise_8h.html#a2e904cfb182cb5619b0a31790fca697e',1,'promise.h']]], - ['uel_5fpromise_5frejected_231',['UEL_PROMISE_REJECTED',['../promise_8h.html#ac0201d84b1e362087d83bdb57a8e8856ae137a12a3c564815d59e2548e304ab39',1,'promise.h']]], - ['uel_5fpromise_5frejecter_232',['uel_promise_rejecter',['../promise_8h.html#a09b820cf5093f6979da34cbe6faa1787',1,'promise.h']]], - ['uel_5fpromise_5fresettle_233',['uel_promise_resettle',['../promise_8h.html#a2d226c4ed1a94964db50dbb5a7f958df',1,'promise.h']]], - ['uel_5fpromise_5fresolve_234',['uel_promise_resolve',['../promise_8h.html#abe5aae85467a9af06b580df74aeedb8c',1,'promise.h']]], - ['uel_5fpromise_5fresolved_235',['UEL_PROMISE_RESOLVED',['../promise_8h.html#ac0201d84b1e362087d83bdb57a8e8856a5ef1eb9b1cdf442f77a5844d9cca3ce0',1,'promise.h']]], - ['uel_5fpromise_5fresolver_236',['uel_promise_resolver',['../promise_8h.html#acffa84389150a36442905a6f89cb827b',1,'promise.h']]], - ['uel_5fpromise_5fsegment_237',['uel_promise_segment',['../structuel__promise__segment.html',1,'']]], - ['uel_5fpromise_5fshortcuts_238',['UEL_PROMISE_SHORTCUTS',['../config_8h.html#a815cda45b611ac94d7b7b56bbeb12e1c',1,'config.h']]], - ['uel_5fpromise_5fstate_239',['uel_promise_state',['../promise_8h.html#ac0201d84b1e362087d83bdb57a8e8856',1,'promise.h']]], - ['uel_5fpromise_5fstate_5ft_240',['uel_promise_state_t',['../promise_8h.html#a95fdddb2c4ccf80657feebb0d4c9adfb',1,'promise.h']]], - ['uel_5fpromise_5fstore_241',['uel_promise_store',['../structuel__promise__store.html',1,'']]], - ['uel_5fpromise_5fstore_5fcreate_242',['uel_promise_store_create',['../promise_8h.html#a4e3a7f9f0d154d4a2fa1c17520bd5561',1,'promise.h']]], - ['uel_5fpromise_5fthen_243',['uel_promise_then',['../promise_8h.html#abb34042cccffccafefb813a902ec8389',1,'promise.h']]], - ['uel_5fsch_5finit_244',['uel_sch_init',['../scheduler_8h.html#a7f4ae225987bb741ca824c83a96ce138',1,'scheduler.h']]], - ['uel_5fsch_5fmanage_5ftimers_245',['uel_sch_manage_timers',['../scheduler_8h.html#a2666a61c55a518fd602cee03a014ed10',1,'scheduler.h']]], - ['uel_5fsch_5frun_5fat_5fintervals_246',['uel_sch_run_at_intervals',['../scheduler_8h.html#a6a993056042a7649e1e7375eb2bb588d',1,'scheduler.h']]], - ['uel_5fsch_5frun_5flater_247',['uel_sch_run_later',['../scheduler_8h.html#ad5909fddc1856cc1b980a0445602c67c',1,'scheduler.h']]], - ['uel_5fsch_5fupdate_5ftimer_248',['uel_sch_update_timer',['../scheduler_8h.html#a0a5a89adf45a470aed0e39925a256ea2',1,'scheduler.h']]], - ['uel_5fscheduler_249',['uel_scheduler',['../structuel__scheduler.html',1,'']]], - ['uel_5fsignal_5femit_250',['uel_signal_emit',['../signal_8h.html#af849f4effe2577efe439387d3a8a710a',1,'signal.h']]], - ['uel_5fsignal_5flisten_251',['uel_signal_listen',['../signal_8h.html#ac11a6acd9237d30551bc0dc8ba406189',1,'signal.h']]], - ['uel_5fsignal_5flisten_5fonce_252',['uel_signal_listen_once',['../signal_8h.html#a6d59d4a7b4c0c5f6b1d271ed6e8a8212',1,'signal.h']]], - ['uel_5fsignal_5flistener_5ft_253',['uel_signal_listener_t',['../signal_8h.html#acf4ce9806bae5489706f0409f0a58067',1,'signal.h']]], - ['uel_5fsignal_5fmax_5flisteners_254',['UEL_SIGNAL_MAX_LISTENERS',['../config_8h.html#a7dec29ef683393c228642729b534fbf5',1,'config.h']]], - ['uel_5fsignal_5freject_5fpromise_255',['uel_signal_reject_promise',['../signal_8h.html#a9dafdd735ff9f06ddc2b0c80862e8af6',1,'signal.h']]], - ['uel_5fsignal_5frelay_256',['uel_signal_relay',['../structuel__signal__relay.html',1,'']]], - ['uel_5fsignal_5frelay_5finit_257',['uel_signal_relay_init',['../signal_8h.html#a8eaa68abe3e288c96eb0ae88d244364f',1,'signal.h']]], - ['uel_5fsignal_5fresolve_5fpromise_258',['uel_signal_resolve_promise',['../signal_8h.html#a1b208dd90b74c52c2775518c242f7c8a',1,'signal.h']]], - ['uel_5fsignal_5ft_259',['uel_signal_t',['../signal_8h.html#a4321d8b0f2c6bc3c0cc143e1bb1d1a2b',1,'signal.h']]], - ['uel_5fsignal_5funlisten_260',['uel_signal_unlisten',['../signal_8h.html#a3fb31014f6cec7acf29e7de4b66fe531',1,'signal.h']]], - ['uel_5fsyspools_5facquire_5fevent_261',['uel_syspools_acquire_event',['../system-pools_8h.html#afa790328d17062994bc3f958b9e96ea4',1,'system-pools.h']]], - ['uel_5fsyspools_5facquire_5fllist_5fnode_262',['uel_syspools_acquire_llist_node',['../system-pools_8h.html#a11d44d4872dd5110c3573e0dd8cfc9d3',1,'system-pools.h']]], - ['uel_5fsyspools_5fevent_5fpool_5fsize_263',['UEL_SYSPOOLS_EVENT_POOL_SIZE',['../system-pools_8h.html#a338ddcefe15ac9790e2c246817b2bd86',1,'system-pools.h']]], - ['uel_5fsyspools_5fevent_5fpool_5fsize_5flog2n_264',['UEL_SYSPOOLS_EVENT_POOL_SIZE_LOG2N',['../config_8h.html#aacb6827b910a09fe40f49dfc22bc3a9b',1,'config.h']]], - ['uel_5fsyspools_5finit_265',['uel_syspools_init',['../system-pools_8h.html#a737df9d7ca7c587711dc8c59d9f1c277',1,'system-pools.h']]], - ['uel_5fsyspools_5fllist_5fnode_5fpool_5fsize_266',['UEL_SYSPOOLS_LLIST_NODE_POOL_SIZE',['../system-pools_8h.html#a5015b8b98a72b1642be11223dfd4b400',1,'system-pools.h']]], - ['uel_5fsyspools_5fllist_5fnode_5fpool_5fsize_5flog2n_267',['UEL_SYSPOOLS_LLIST_NODE_POOL_SIZE_LOG2N',['../config_8h.html#ab3932a51e5254319c1d0feb178a5b164',1,'config.h']]], - ['uel_5fsyspools_5frelease_5fevent_268',['uel_syspools_release_event',['../system-pools_8h.html#a52991a37f5e0da28ecc6161ed8932911',1,'system-pools.h']]], - ['uel_5fsyspools_5frelease_5fllist_5fnode_269',['uel_syspools_release_llist_node',['../system-pools_8h.html#ae392a6e20954e33629d67a5729c9de02',1,'system-pools.h']]], - ['uel_5fsysqueues_5fcount_5fenqueued_5fevents_270',['uel_sysqueues_count_enqueued_events',['../system-queues_8h.html#a7caa3edc1266d927d334b6b85af5ec95',1,'system-queues.h']]], - ['uel_5fsysqueues_5fcount_5fscheduled_5fevents_271',['uel_sysqueues_count_scheduled_events',['../system-queues_8h.html#a50a5ee20919b0362d640b3816a2ed191',1,'system-queues.h']]], - ['uel_5fsysqueues_5fenqueue_5fevent_272',['uel_sysqueues_enqueue_event',['../system-queues_8h.html#ac58c61b4b8d432898a6c5b2a47b7d197',1,'system-queues.h']]], - ['uel_5fsysqueues_5fevent_5fqueue_5fsize_273',['UEL_SYSQUEUES_EVENT_QUEUE_SIZE',['../system-queues_8h.html#a1d616ec92aac7c521870c1ddfbfecba9',1,'system-queues.h']]], - ['uel_5fsysqueues_5fevent_5fqueue_5fsize_5flog2n_274',['UEL_SYSQUEUES_EVENT_QUEUE_SIZE_LOG2N',['../config_8h.html#a89c8fac6285ec1a2ad001ee55d131e90',1,'config.h']]], - ['uel_5fsysqueues_5fget_5fenqueued_5fevent_275',['uel_sysqueues_get_enqueued_event',['../system-queues_8h.html#a897b9899eefbe90ac11e651b5117bfd3',1,'system-queues.h']]], - ['uel_5fsysqueues_5fget_5fscheduled_5fevent_276',['uel_sysqueues_get_scheduled_event',['../system-queues_8h.html#a1730d1f7a7e86a3a79df40938fa9d735',1,'system-queues.h']]], - ['uel_5fsysqueues_5finit_277',['uel_sysqueues_init',['../system-queues_8h.html#aa988e6daddfd00129d56c1db350edc5a',1,'system-queues.h']]], - ['uel_5fsysqueues_5fschedule_5fevent_278',['uel_sysqueues_schedule_event',['../system-queues_8h.html#ac14ac33abf67b93d8904e5ebb1218028',1,'system-queues.h']]], - ['uel_5fsysqueues_5fschedule_5fqueue_5fsize_279',['UEL_SYSQUEUES_SCHEDULE_QUEUE_SIZE',['../system-queues_8h.html#a0a913dc860f0136e0633381c33d1821e',1,'system-queues.h']]], - ['uel_5fsysqueues_5fschedule_5fqueue_5fsize_5flog2n_280',['UEL_SYSQUEUES_SCHEDULE_QUEUE_SIZE_LOG2N',['../config_8h.html#af83cc01ed7c71a81a08be6340bff7f4b',1,'config.h']]], - ['unlistened_281',['unlistened',['../structevent_1_1uel__event__detail_1_1uel__event__listener.html#a7c68240052221e1ebbab4a9c1c096512',1,'event::uel_event_detail::uel_event_listener']]] -]; diff --git a/docs/html/search/all_12.html b/docs/html/search/all_12.html deleted file mode 100644 index dd9ff1d..0000000 --- a/docs/html/search/all_12.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/all_12.js b/docs/html/search/all_12.js deleted file mode 100644 index 96b375f..0000000 --- a/docs/html/search/all_12.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['value_282',['value',['../structevent.html#af86fbbe00fa2851d24d29ba9b39f3ee2',1,'event::value()'],['../structevent_1_1uel__event__detail_1_1uel__event__signal.html#a74bcb07d316f77b7a2ec6efc3a62fe31',1,'event::uel_event_detail::uel_event_signal::value()'],['../structuel__llist__node.html#a1be7a63ce1a37b1bbb18bef46b8eae58',1,'uel_llist_node::value()'],['../structuel__promise.html#afca1c89f5e4903aa9df56416e0ae0f98',1,'uel_promise::value()']]] -]; diff --git a/docs/html/search/all_13.html b/docs/html/search/all_13.html deleted file mode 100644 index 2611a10..0000000 --- a/docs/html/search/all_13.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/all_13.js b/docs/html/search/all_13.js deleted file mode 100644 index 0bb0da1..0000000 --- a/docs/html/search/all_13.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['width_283',['width',['../structuel__signal__relay.html#aedd6f0d0fee789b65472d7fa3981322b',1,'uel_signal_relay']]] -]; diff --git a/docs/html/search/all_14.html b/docs/html/search/all_14.html deleted file mode 100644 index 72d12e9..0000000 --- a/docs/html/search/all_14.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/all_14.js b/docs/html/search/all_14.js deleted file mode 100644 index 2f2b1fe..0000000 --- a/docs/html/search/all_14.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['µevloop_20_3cimg_20src_3d_22https_3a_2f_2fgithub_2ecom_2fandsmedeiros_2fuevloop_2fworkflows_2fc_2fc_2b_2b_2520ci_2fbadge_2esvg_3fevent_3dpush_22_20alt_3d_22c_2fc_2b_2b_20ci_22_2f_3e_284',['µEvLoop <img src="https://github.com/andsmedeiros/uevloop/workflows/C/C++%20CI/badge.svg?event=push" alt="C/C++ CI"/>',['../index.html',1,'']]] -]; diff --git a/docs/html/search/all_2.html b/docs/html/search/all_2.html deleted file mode 100644 index b26d916..0000000 --- a/docs/html/search/all_2.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/all_2.js b/docs/html/search/all_2.js deleted file mode 100644 index 7d9f365..0000000 --- a/docs/html/search/all_2.js +++ /dev/null @@ -1,17 +0,0 @@ -var searchData= -[ - ['cancelled_6',['cancelled',['../structevent_1_1uel__event__detail_1_1uel__event__observer.html#a1bd55787112aae874e8b4c906a37614e',1,'event::uel_event_detail::uel_event_observer']]], - ['circular_2dqueue_2eh_7',['circular-queue.h',['../circular-queue_8h.html',1,'']]], - ['closure_8',['closure',['../structevent.html#aac834e055b38447126d27c0dec51498c',1,'event']]], - ['closure_2eh_9',['closure.h',['../closure_8h.html',1,'']]], - ['closures_10',['closures',['../structuel__pipeline.html#a5dafb55ed93d4b7a6e8c7a9cfc50af4c',1,'uel_pipeline']]], - ['collection_11',['collection',['../structuel__iterator.html#a37bae427d28c271a3e9fbdc0c3a70b8d',1,'uel_iterator']]], - ['condition_5fvar_12',['condition_var',['../structevent_1_1uel__event__detail_1_1uel__event__observer.html#ac17e9951df24dfb12fa6a7824f65c311',1,'event::uel_event_detail::uel_event_observer']]], - ['conditional_2eh_13',['conditional.h',['../conditional_8h.html',1,'']]], - ['config_14',['config',['../structuel__module.html#a9b066ffb62e47bf3fac7e0d70623eb15',1,'uel_module']]], - ['config_2eh_15',['config.h',['../config_8h.html',1,'']]], - ['constructor_16',['constructor',['../structuel__autopool.html#a7890d66a262f1c057598b5cf281df2c2',1,'uel_autopool']]], - ['context_17',['context',['../structuel__closure.html#ae22a9c4275f31ab9741ef42479ce59cf',1,'uel_closure']]], - ['count_18',['count',['../structuel__cqueue.html#a0ef8883068b2d0b6d37e03cd33c46628',1,'uel_cqueue::count()'],['../structuel__llist.html#abd8b53084233e30e2dd36e1e2e7538f0',1,'uel_llist::count()'],['../structuel__pipeline.html#a6b52ff1fecb520e604f0b167e9c85a46',1,'uel_pipeline::count()']]], - ['critical_2dsection_2eh_19',['critical-section.h',['../critical-section_8h.html',1,'']]] -]; diff --git a/docs/html/search/all_3.html b/docs/html/search/all_3.html deleted file mode 100644 index b61b96f..0000000 --- a/docs/html/search/all_3.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/all_3.js b/docs/html/search/all_3.js deleted file mode 100644 index cb25f51..0000000 --- a/docs/html/search/all_3.js +++ /dev/null @@ -1,7 +0,0 @@ -var searchData= -[ - ['destination_20',['destination',['../structuel__func__mapper.html#a847f834606bbc994068aaa93ed705e3c',1,'uel_func_mapper']]], - ['destructor_21',['destructor',['../structuel__autopool.html#a34dff758685ceefd0227aaf98eb66318',1,'uel_autopool']]], - ['detail_22',['detail',['../structevent.html#abcda7218789a4eac49e099cd895b042a',1,'event']]], - ['due_5ftime_23',['due_time',['../structevent_1_1uel__event__detail_1_1uel__event__timer.html#aded9e4913a031f9a4cc62ae362406b11',1,'event::uel_event_detail::uel_event_timer']]] -]; diff --git a/docs/html/search/all_4.html b/docs/html/search/all_4.html deleted file mode 100644 index 06de155..0000000 --- a/docs/html/search/all_4.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/all_4.js b/docs/html/search/all_4.js deleted file mode 100644 index 116d9b1..0000000 --- a/docs/html/search/all_4.js +++ /dev/null @@ -1,12 +0,0 @@ -var searchData= -[ - ['event_24',['event',['../structevent.html',1,'']]], - ['event_2dloop_2eh_25',['event-loop.h',['../event-loop_8h.html',1,'']]], - ['event_2eh_26',['event.h',['../event_8h.html',1,'']]], - ['event_5floop_27',['event_loop',['../structuel__application.html#a206cef9bc1164781d91a883a38b0f0d9',1,'uel_application']]], - ['event_5fpool_28',['event_pool',['../structsyspools.html#ade1008e5647b9da5d4497d1d3dceadf1',1,'syspools']]], - ['event_5fpool_5fbuffer_29',['event_pool_buffer',['../structsyspools.html#a1a9c8bec00f4b19a1cea2d220860b89c',1,'syspools']]], - ['event_5fpool_5fqueue_5fbuffer_30',['event_pool_queue_buffer',['../structsyspools.html#ab54b76b022a0bff944791ca2ed3e157a',1,'syspools']]], - ['event_5fqueue_31',['event_queue',['../structsysqueues.html#a8ee3a87dc51095191300b5e90658d690',1,'sysqueues']]], - ['event_5fqueue_5fbuffer_32',['event_queue_buffer',['../structsysqueues.html#ae98fcac9a2822f2b2394a4c044f148a9',1,'sysqueues']]] -]; diff --git a/docs/html/search/all_5.html b/docs/html/search/all_5.html deleted file mode 100644 index 2544c4e..0000000 --- a/docs/html/search/all_5.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/all_5.js b/docs/html/search/all_5.js deleted file mode 100644 index ccd2e74..0000000 --- a/docs/html/search/all_5.js +++ /dev/null @@ -1,6 +0,0 @@ -var searchData= -[ - ['first_5fsegment_33',['first_segment',['../structuel__promise.html#a6f892488ff6d7f0a6b90b128306c8498',1,'uel_promise']]], - ['function_34',['function',['../structuel__closure.html#a53af2a72baa02fe3d0b18e20aff59a66',1,'uel_closure']]], - ['functional_2eh_35',['functional.h',['../functional_8h.html',1,'']]] -]; diff --git a/docs/html/search/all_6.html b/docs/html/search/all_6.html deleted file mode 100644 index 43f14ea..0000000 --- a/docs/html/search/all_6.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/all_6.js b/docs/html/search/all_6.js deleted file mode 100644 index a5a5ae3..0000000 --- a/docs/html/search/all_6.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['head_36',['head',['../structuel__llist.html#ab2e05ae8e0b0d0193011f8e5a4f903b6',1,'uel_llist']]] -]; diff --git a/docs/html/search/all_7.html b/docs/html/search/all_7.html deleted file mode 100644 index af52f82..0000000 --- a/docs/html/search/all_7.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/all_7.js b/docs/html/search/all_7.js deleted file mode 100644 index adeeee8..0000000 --- a/docs/html/search/all_7.js +++ /dev/null @@ -1,9 +0,0 @@ -var searchData= -[ - ['if_5ffalse_37',['if_false',['../structuel__conditional.html#adb02d4c97ad9486edfb43dcb44ca2577',1,'uel_conditional']]], - ['if_5ftrue_38',['if_true',['../structuel__conditional.html#a49681bebb19750fea3e0ddcdc2e41ea9',1,'uel_conditional']]], - ['item_5fcount_39',['item_count',['../structuel__iterator__array.html#a514d0828182e9649d6285caddfb650c8',1,'uel_iterator_array']]], - ['item_5fsize_40',['item_size',['../structuel__iterator__array.html#a65622bdc18897601b6bc5da70ea44f09',1,'uel_iterator_array']]], - ['iterator_41',['iterator',['../structuel__func__mapper.html#a435db29ac7596f5b8c3f5c5735a2517f',1,'uel_func_mapper']]], - ['iterator_2eh_42',['iterator.h',['../iterator_8h.html',1,'']]] -]; diff --git a/docs/html/search/all_8.html b/docs/html/search/all_8.html deleted file mode 100644 index cf2b5df..0000000 --- a/docs/html/search/all_8.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/all_8.js b/docs/html/search/all_8.js deleted file mode 100644 index c487e47..0000000 --- a/docs/html/search/all_8.js +++ /dev/null @@ -1,13 +0,0 @@ -var searchData= -[ - ['last_5fsegment_43',['last_segment',['../structuel__promise.html#a18d4ef955a1110e9182d7fea5779a147',1,'uel_promise']]], - ['last_5fvalue_44',['last_value',['../structevent_1_1uel__event__detail_1_1uel__event__observer.html#a79d55d944dc3a1b83c8b09bb88ebb7ce',1,'event::uel_event_detail::uel_event_observer']]], - ['launch_45',['launch',['../structuel__module.html#a5a45b6478c665841c477f57386785cd4',1,'uel_module']]], - ['limit_46',['limit',['../structuel__func__mapper.html#abfb2f5ced405ae371069abfd131a1895',1,'uel_func_mapper']]], - ['linked_2dlist_2eh_47',['linked-list.h',['../linked-list_8h.html',1,'']]], - ['listener_48',['listener',['../unionevent_1_1uel__event__detail.html#a0be1ff74c4b46a39fb4a6dd320a9eb89',1,'event::uel_event_detail']]], - ['listeners_49',['listeners',['../structevent_1_1uel__event__detail_1_1uel__event__signal.html#ab003ff58199d9d50fa51b17532d75895',1,'event::uel_event_detail::uel_event_signal']]], - ['llist_5fnode_5fpool_50',['llist_node_pool',['../structsyspools.html#a8a333444479f17163fe541f84f88d8ce',1,'syspools']]], - ['llist_5fnode_5fpool_5fbuffer_51',['llist_node_pool_buffer',['../structsyspools.html#ab4b8e76d74b86c933227779f6dac2779',1,'syspools']]], - ['llist_5fnode_5fpool_5fqueue_5fbuffer_52',['llist_node_pool_queue_buffer',['../structsyspools.html#ae6d43157b64e89395ddf2ca93150c2de',1,'syspools']]] -]; diff --git a/docs/html/search/all_9.html b/docs/html/search/all_9.html deleted file mode 100644 index 690785a..0000000 --- a/docs/html/search/all_9.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/all_9.js b/docs/html/search/all_9.js deleted file mode 100644 index 78be922..0000000 --- a/docs/html/search/all_9.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['mask_53',['mask',['../structuel__cqueue.html#a3f0a994df09bb73f3545024a857dca78',1,'uel_cqueue']]], - ['module_2eh_54',['module.h',['../module_8h.html',1,'']]] -]; diff --git a/docs/html/search/all_a.html b/docs/html/search/all_a.html deleted file mode 100644 index f2f3d3a..0000000 --- a/docs/html/search/all_a.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/all_a.js b/docs/html/search/all_a.js deleted file mode 100644 index 526feba..0000000 --- a/docs/html/search/all_a.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['next_55',['next',['../structuel__iterator.html#a034411056043f9316d2b7458c2bcfdc3',1,'uel_iterator::next()'],['../structuel__llist__node.html#a7976a89a4700768e540bf5b164f2dc68',1,'uel_llist_node::next()'],['../structuel__promise__segment.html#aa2c791377649da1fa8bcfb73beff2b48',1,'uel_promise_segment::next()']]] -]; diff --git a/docs/html/search/all_b.html b/docs/html/search/all_b.html deleted file mode 100644 index 14f3403..0000000 --- a/docs/html/search/all_b.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/all_b.js b/docs/html/search/all_b.js deleted file mode 100644 index 0b6fe9a..0000000 --- a/docs/html/search/all_b.js +++ /dev/null @@ -1,7 +0,0 @@ -var searchData= -[ - ['object_56',['object',['../structuel__autoptr.html#a215d58b3f6c7b953b0c60e8963252535',1,'uel_autoptr']]], - ['object_2dpool_2eh_57',['object-pool.h',['../object-pool_8h.html',1,'']]], - ['observer_58',['observer',['../unionevent_1_1uel__event__detail.html#a072f8eee18648e4fb7fc180043b65eac',1,'event::uel_event_detail']]], - ['observers_59',['observers',['../structuel__evloop.html#ac91617cd57a61785f2feb0748039836c',1,'uel_evloop']]] -]; diff --git a/docs/html/search/all_c.html b/docs/html/search/all_c.html deleted file mode 100644 index da60ab8..0000000 --- a/docs/html/search/all_c.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/all_c.js b/docs/html/search/all_c.js deleted file mode 100644 index ff9a4ef..0000000 --- a/docs/html/search/all_c.js +++ /dev/null @@ -1,8 +0,0 @@ -var searchData= -[ - ['pause_5flist_60',['pause_list',['../structuel__scheduler.html#abcdd34ae1b4f2889ce0e301bc1f52826',1,'uel_scheduler']]], - ['pipeline_2eh_61',['pipeline.h',['../pipeline_8h.html',1,'']]], - ['pools_62',['pools',['../structuel__application.html#af74c95c7a5b2c751e83a3bb6a5404e99',1,'uel_application::pools()'],['../structuel__evloop.html#a47a9ebe4361677bce4f550f3d08b74bb',1,'uel_evloop::pools()'],['../structuel__scheduler.html#a599ff398356901589bed5930a77523c3',1,'uel_scheduler::pools()'],['../structuel__signal__relay.html#af0cc9622120868903e43eda29518433b',1,'uel_signal_relay::pools()']]], - ['promise_2eh_63',['promise.h',['../promise_8h.html',1,'']]], - ['promise_5fpool_64',['promise_pool',['../structuel__promise__store.html#acde6648fc7bed2bbbdac7df5fa0059f7',1,'uel_promise_store']]] -]; diff --git a/docs/html/search/all_d.html b/docs/html/search/all_d.html deleted file mode 100644 index bc376fe..0000000 --- a/docs/html/search/all_d.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/all_d.js b/docs/html/search/all_d.js deleted file mode 100644 index 1dbd263..0000000 --- a/docs/html/search/all_d.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['queue_65',['queue',['../structuel__objpool.html#a36c2a4bcb0eda229680daa4a03960506',1,'uel_objpool']]], - ['queues_66',['queues',['../structuel__application.html#a461dd6893eb70ee86bac7c43a9a86578',1,'uel_application::queues()'],['../structuel__evloop.html#aec967394710dd0b4b5184a8fd02d61a5',1,'uel_evloop::queues()'],['../structuel__scheduler.html#a962da3ed7102999d7379d2d26599160d',1,'uel_scheduler::queues()'],['../structuel__signal__relay.html#ae9438f0506aa721cbf56e917f58e0390',1,'uel_signal_relay::queues()']]] -]; diff --git a/docs/html/search/all_e.html b/docs/html/search/all_e.html deleted file mode 100644 index 2e3c74d..0000000 --- a/docs/html/search/all_e.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/all_e.js b/docs/html/search/all_e.js deleted file mode 100644 index b42820e..0000000 --- a/docs/html/search/all_e.js +++ /dev/null @@ -1,11 +0,0 @@ -var searchData= -[ - ['registry_67',['registry',['../structuel__application.html#aa02469024d8619255c81f6aace13e36e',1,'uel_application']]], - ['registry_5fsize_68',['registry_size',['../structuel__application.html#a5f7f83e74289e75c9e54b26e67bae14d',1,'uel_application']]], - ['reject_69',['reject',['../structuel__promise__segment.html#af38e4bf5f784ba283e91657b7b483c22',1,'uel_promise_segment']]], - ['relay_70',['relay',['../structuel__application.html#a5f1ffb5e716efc10ffd63968098ce2eb',1,'uel_application']]], - ['relay_5fbuffer_71',['relay_buffer',['../structuel__application.html#a4dc1aab92e88e5776d1013b4eb35ec5e',1,'uel_application']]], - ['repeating_72',['repeating',['../structevent.html#a67fa1b9a469d09599d2931769862d07b',1,'event']]], - ['resolve_73',['resolve',['../structuel__promise__segment.html#acd843866b15e8f0b035189404d002044',1,'uel_promise_segment']]], - ['run_5fscheduler_74',['run_scheduler',['../structuel__application.html#ad66b5adaa8603cec1f8072d43cc582f5',1,'uel_application']]] -]; diff --git a/docs/html/search/all_f.html b/docs/html/search/all_f.html deleted file mode 100644 index 246f8ab..0000000 --- a/docs/html/search/all_f.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/all_f.js b/docs/html/search/all_f.js deleted file mode 100644 index 3b45b70..0000000 --- a/docs/html/search/all_f.js +++ /dev/null @@ -1,19 +0,0 @@ -var searchData= -[ - ['schedule_5fqueue_75',['schedule_queue',['../structsysqueues.html#a92e5df8975b6c6b1aa7f79df54da8565',1,'sysqueues']]], - ['schedule_5fqueue_5fbuffer_76',['schedule_queue_buffer',['../structsysqueues.html#a3f90eebf85af0e239358c276ea741917',1,'sysqueues']]], - ['scheduler_77',['scheduler',['../structuel__application.html#a977b88c48d61a8688773b062f74fc78c',1,'uel_application']]], - ['scheduler_2eh_78',['scheduler.h',['../scheduler_8h.html',1,'']]], - ['segment_5fpool_79',['segment_pool',['../structuel__promise__store.html#ae08a8b8b4a72f9e1d8cfb4d1c344317d',1,'uel_promise_store']]], - ['signal_80',['signal',['../unionevent_1_1uel__event__detail.html#a82ba97ed6ebbb9a86cecde4d0c48e4fc',1,'event::uel_event_detail']]], - ['signal_2eh_81',['signal.h',['../signal_8h.html',1,'']]], - ['signal_5fvector_82',['signal_vector',['../structuel__signal__relay.html#a264ee9199e913c30ec6487d258093324',1,'uel_signal_relay']]], - ['size_83',['size',['../structuel__cqueue.html#ad424eefbf635da1957a7c25a6b390a57',1,'uel_cqueue']]], - ['source_84',['source',['../structuel__autoptr.html#a32f472b4cef00ebc64db35493ac269d9',1,'uel_autoptr::source()'],['../structuel__promise.html#a2f753bbc2fcd30adcafac5de640143f5',1,'uel_promise::source()']]], - ['state_85',['state',['../structuel__promise.html#a678870a0975db700de0bbcb5d102aa4e',1,'uel_promise']]], - ['status_86',['status',['../structevent_1_1uel__event__detail_1_1uel__event__timer.html#a38f12f5dce7b8ef363fd5c8a786d3390',1,'event::uel_event_detail::uel_event_timer']]], - ['syspools_87',['syspools',['../structsyspools.html',1,'']]], - ['sysqueues_88',['sysqueues',['../structsysqueues.html',1,'']]], - ['system_2dpools_2eh_89',['system-pools.h',['../system-pools_8h.html',1,'']]], - ['system_2dqueues_2eh_90',['system-queues.h',['../system-queues_8h.html',1,'']]] -]; diff --git a/docs/html/search/classes_0.html b/docs/html/search/classes_0.html deleted file mode 100644 index f7e4c14..0000000 --- a/docs/html/search/classes_0.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/classes_0.js b/docs/html/search/classes_0.js deleted file mode 100644 index d970c40..0000000 --- a/docs/html/search/classes_0.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['event_285',['event',['../structevent.html',1,'']]] -]; diff --git a/docs/html/search/classes_1.html b/docs/html/search/classes_1.html deleted file mode 100644 index c7ff4b3..0000000 --- a/docs/html/search/classes_1.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/classes_1.js b/docs/html/search/classes_1.js deleted file mode 100644 index 4b773ad..0000000 --- a/docs/html/search/classes_1.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['syspools_286',['syspools',['../structsyspools.html',1,'']]], - ['sysqueues_287',['sysqueues',['../structsysqueues.html',1,'']]] -]; diff --git a/docs/html/search/classes_2.html b/docs/html/search/classes_2.html deleted file mode 100644 index 0d1e8a0..0000000 --- a/docs/html/search/classes_2.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/classes_2.js b/docs/html/search/classes_2.js deleted file mode 100644 index d2e3dca..0000000 --- a/docs/html/search/classes_2.js +++ /dev/null @@ -1,28 +0,0 @@ -var searchData= -[ - ['uel_5fapplication_288',['uel_application',['../structuel__application.html',1,'']]], - ['uel_5fautopool_289',['uel_autopool',['../structuel__autopool.html',1,'']]], - ['uel_5fautoptr_290',['uel_autoptr',['../structuel__autoptr.html',1,'']]], - ['uel_5fclosure_291',['uel_closure',['../structuel__closure.html',1,'']]], - ['uel_5fconditional_292',['uel_conditional',['../structuel__conditional.html',1,'']]], - ['uel_5fcqueue_293',['uel_cqueue',['../structuel__cqueue.html',1,'']]], - ['uel_5fevent_5fdetail_294',['uel_event_detail',['../unionevent_1_1uel__event__detail.html',1,'event']]], - ['uel_5fevent_5flistener_295',['uel_event_listener',['../structevent_1_1uel__event__detail_1_1uel__event__listener.html',1,'event::uel_event_detail']]], - ['uel_5fevent_5fobserver_296',['uel_event_observer',['../structevent_1_1uel__event__detail_1_1uel__event__observer.html',1,'event::uel_event_detail']]], - ['uel_5fevent_5fsignal_297',['uel_event_signal',['../structevent_1_1uel__event__detail_1_1uel__event__signal.html',1,'event::uel_event_detail']]], - ['uel_5fevent_5ftimer_298',['uel_event_timer',['../structevent_1_1uel__event__detail_1_1uel__event__timer.html',1,'event::uel_event_detail']]], - ['uel_5fevloop_299',['uel_evloop',['../structuel__evloop.html',1,'']]], - ['uel_5ffunc_5fmapper_300',['uel_func_mapper',['../structuel__func__mapper.html',1,'']]], - ['uel_5fiterator_301',['uel_iterator',['../structuel__iterator.html',1,'']]], - ['uel_5fiterator_5farray_302',['uel_iterator_array',['../structuel__iterator__array.html',1,'']]], - ['uel_5fllist_303',['uel_llist',['../structuel__llist.html',1,'']]], - ['uel_5fllist_5fnode_304',['uel_llist_node',['../structuel__llist__node.html',1,'']]], - ['uel_5fmodule_305',['uel_module',['../structuel__module.html',1,'']]], - ['uel_5fobjpool_306',['uel_objpool',['../structuel__objpool.html',1,'']]], - ['uel_5fpipeline_307',['uel_pipeline',['../structuel__pipeline.html',1,'']]], - ['uel_5fpromise_308',['uel_promise',['../structuel__promise.html',1,'']]], - ['uel_5fpromise_5fsegment_309',['uel_promise_segment',['../structuel__promise__segment.html',1,'']]], - ['uel_5fpromise_5fstore_310',['uel_promise_store',['../structuel__promise__store.html',1,'']]], - ['uel_5fscheduler_311',['uel_scheduler',['../structuel__scheduler.html',1,'']]], - ['uel_5fsignal_5frelay_312',['uel_signal_relay',['../structuel__signal__relay.html',1,'']]] -]; diff --git a/docs/html/search/close.png b/docs/html/search/close.png deleted file mode 100644 index 9342d3d..0000000 Binary files a/docs/html/search/close.png and /dev/null differ diff --git a/docs/html/search/defines_0.html b/docs/html/search/defines_0.html deleted file mode 100644 index 2deb369..0000000 --- a/docs/html/search/defines_0.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/defines_0.js b/docs/html/search/defines_0.js deleted file mode 100644 index f75c75c..0000000 --- a/docs/html/search/defines_0.js +++ /dev/null @@ -1,25 +0,0 @@ -var searchData= -[ - ['uel_5fautopool_5fbuffers_547',['UEL_AUTOPOOL_BUFFERS',['../automatic-pool_8h.html#a956766ef0a875886ce9cee1751fed842',1,'automatic-pool.h']]], - ['uel_5fautopool_5fbuffers_5fat_548',['UEL_AUTOPOOL_BUFFERS_AT',['../automatic-pool_8h.html#a06ddb8294f2f7ff72a458684df783479',1,'automatic-pool.h']]], - ['uel_5fautopool_5fbuffers_5fin_549',['UEL_AUTOPOOL_BUFFERS_IN',['../automatic-pool_8h.html#aed55c3bfece785d4bc440359c4a84697',1,'automatic-pool.h']]], - ['uel_5fcritical_5fenter_550',['UEL_CRITICAL_ENTER',['../critical-section_8h.html#a7c0f97308e835939cf0404b167cc188a',1,'critical-section.h']]], - ['uel_5fcritical_5fexit_551',['UEL_CRITICAL_EXIT',['../critical-section_8h.html#aebdb2b9597df1dac79b2fd88d58d6539',1,'critical-section.h']]], - ['uel_5fdeclare_5fautopool_5fbuffers_552',['UEL_DECLARE_AUTOPOOL_BUFFERS',['../automatic-pool_8h.html#a59c59798394f60a6e567954997cc8176',1,'automatic-pool.h']]], - ['uel_5fdeclare_5fobjpool_5fbuffers_553',['UEL_DECLARE_OBJPOOL_BUFFERS',['../object-pool_8h.html#a6f94946d39d323f7ea0f409962c59f1e',1,'object-pool.h']]], - ['uel_5fiterator_5fmap_5fboundless_554',['UEL_ITERATOR_MAP_BOUNDLESS',['../iterator_8h.html#a6f1cacb4e55d7a7e1b7d1a4ae9f8c2bb',1,'iterator.h']]], - ['uel_5fobjpool_5fbuffers_555',['UEL_OBJPOOL_BUFFERS',['../object-pool_8h.html#a623ea70a0df4cc76d0e65a99bc5c26c9',1,'object-pool.h']]], - ['uel_5fobjpool_5fbuffers_5fat_556',['UEL_OBJPOOL_BUFFERS_AT',['../object-pool_8h.html#aa3a5c0e14ab186fffed61c2b3d67405e',1,'object-pool.h']]], - ['uel_5fobjpool_5fbuffers_5fin_557',['UEL_OBJPOOL_BUFFERS_IN',['../object-pool_8h.html#ae25ae5d897163fb9104f4295f6fdf84b',1,'object-pool.h']]], - ['uel_5fpipeline_5fdeclare_558',['UEL_PIPELINE_DECLARE',['../pipeline_8h.html#a64c47a347b70a55627e1a66a9972890c',1,'pipeline.h']]], - ['uel_5fpromise_5fshortcuts_559',['UEL_PROMISE_SHORTCUTS',['../config_8h.html#a815cda45b611ac94d7b7b56bbeb12e1c',1,'config.h']]], - ['uel_5fsignal_5fmax_5flisteners_560',['UEL_SIGNAL_MAX_LISTENERS',['../config_8h.html#a7dec29ef683393c228642729b534fbf5',1,'config.h']]], - ['uel_5fsyspools_5fevent_5fpool_5fsize_561',['UEL_SYSPOOLS_EVENT_POOL_SIZE',['../system-pools_8h.html#a338ddcefe15ac9790e2c246817b2bd86',1,'system-pools.h']]], - ['uel_5fsyspools_5fevent_5fpool_5fsize_5flog2n_562',['UEL_SYSPOOLS_EVENT_POOL_SIZE_LOG2N',['../config_8h.html#aacb6827b910a09fe40f49dfc22bc3a9b',1,'config.h']]], - ['uel_5fsyspools_5fllist_5fnode_5fpool_5fsize_563',['UEL_SYSPOOLS_LLIST_NODE_POOL_SIZE',['../system-pools_8h.html#a5015b8b98a72b1642be11223dfd4b400',1,'system-pools.h']]], - ['uel_5fsyspools_5fllist_5fnode_5fpool_5fsize_5flog2n_564',['UEL_SYSPOOLS_LLIST_NODE_POOL_SIZE_LOG2N',['../config_8h.html#ab3932a51e5254319c1d0feb178a5b164',1,'config.h']]], - ['uel_5fsysqueues_5fevent_5fqueue_5fsize_565',['UEL_SYSQUEUES_EVENT_QUEUE_SIZE',['../system-queues_8h.html#a1d616ec92aac7c521870c1ddfbfecba9',1,'system-queues.h']]], - ['uel_5fsysqueues_5fevent_5fqueue_5fsize_5flog2n_566',['UEL_SYSQUEUES_EVENT_QUEUE_SIZE_LOG2N',['../config_8h.html#a89c8fac6285ec1a2ad001ee55d131e90',1,'config.h']]], - ['uel_5fsysqueues_5fschedule_5fqueue_5fsize_567',['UEL_SYSQUEUES_SCHEDULE_QUEUE_SIZE',['../system-queues_8h.html#a0a913dc860f0136e0633381c33d1821e',1,'system-queues.h']]], - ['uel_5fsysqueues_5fschedule_5fqueue_5fsize_5flog2n_568',['UEL_SYSQUEUES_SCHEDULE_QUEUE_SIZE_LOG2N',['../config_8h.html#af83cc01ed7c71a81a08be6340bff7f4b',1,'config.h']]] -]; diff --git a/docs/html/search/enums_0.html b/docs/html/search/enums_0.html deleted file mode 100644 index 9669700..0000000 --- a/docs/html/search/enums_0.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/enums_0.js b/docs/html/search/enums_0.js deleted file mode 100644 index e62d3b5..0000000 --- a/docs/html/search/enums_0.js +++ /dev/null @@ -1,7 +0,0 @@ -var searchData= -[ - ['uel_5fapp_5fevent_540',['uel_app_event',['../application_8h.html#a335ab53567298b8918257c2970b388f2',1,'application.h']]], - ['uel_5fevent_5ftimer_5fstatus_541',['uel_event_timer_status',['../event_8h.html#ae586ca82fed67108457450a49661a4aa',1,'event.h']]], - ['uel_5fevent_5ftype_542',['uel_event_type',['../event_8h.html#a0a3805dfccf139ba6521d57e0b79fb60',1,'event.h']]], - ['uel_5fpromise_5fstate_543',['uel_promise_state',['../promise_8h.html#ac0201d84b1e362087d83bdb57a8e8856',1,'promise.h']]] -]; diff --git a/docs/html/search/enumvalues_0.html b/docs/html/search/enumvalues_0.html deleted file mode 100644 index 9286248..0000000 --- a/docs/html/search/enumvalues_0.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/enumvalues_0.js b/docs/html/search/enumvalues_0.js deleted file mode 100644 index 0552ad4..0000000 --- a/docs/html/search/enumvalues_0.js +++ /dev/null @@ -1,6 +0,0 @@ -var searchData= -[ - ['uel_5fpromise_5fpending_544',['UEL_PROMISE_PENDING',['../promise_8h.html#ac0201d84b1e362087d83bdb57a8e8856ae619a3bfec8234d4302fbec8c2dfe6d2',1,'promise.h']]], - ['uel_5fpromise_5frejected_545',['UEL_PROMISE_REJECTED',['../promise_8h.html#ac0201d84b1e362087d83bdb57a8e8856ae137a12a3c564815d59e2548e304ab39',1,'promise.h']]], - ['uel_5fpromise_5fresolved_546',['UEL_PROMISE_RESOLVED',['../promise_8h.html#ac0201d84b1e362087d83bdb57a8e8856a5ef1eb9b1cdf442f77a5844d9cca3ce0',1,'promise.h']]] -]; diff --git a/docs/html/search/files_0.html b/docs/html/search/files_0.html deleted file mode 100644 index 737608e..0000000 --- a/docs/html/search/files_0.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/files_0.js b/docs/html/search/files_0.js deleted file mode 100644 index f9b32aa..0000000 --- a/docs/html/search/files_0.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['application_2eh_313',['application.h',['../application_8h.html',1,'']]], - ['automatic_2dpool_2eh_314',['automatic-pool.h',['../automatic-pool_8h.html',1,'']]] -]; diff --git a/docs/html/search/files_1.html b/docs/html/search/files_1.html deleted file mode 100644 index f27a62d..0000000 --- a/docs/html/search/files_1.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/files_1.js b/docs/html/search/files_1.js deleted file mode 100644 index 751bfde..0000000 --- a/docs/html/search/files_1.js +++ /dev/null @@ -1,8 +0,0 @@ -var searchData= -[ - ['circular_2dqueue_2eh_315',['circular-queue.h',['../circular-queue_8h.html',1,'']]], - ['closure_2eh_316',['closure.h',['../closure_8h.html',1,'']]], - ['conditional_2eh_317',['conditional.h',['../conditional_8h.html',1,'']]], - ['config_2eh_318',['config.h',['../config_8h.html',1,'']]], - ['critical_2dsection_2eh_319',['critical-section.h',['../critical-section_8h.html',1,'']]] -]; diff --git a/docs/html/search/files_2.html b/docs/html/search/files_2.html deleted file mode 100644 index a45066e..0000000 --- a/docs/html/search/files_2.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/files_2.js b/docs/html/search/files_2.js deleted file mode 100644 index 7d5d9b1..0000000 --- a/docs/html/search/files_2.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['event_2dloop_2eh_320',['event-loop.h',['../event-loop_8h.html',1,'']]], - ['event_2eh_321',['event.h',['../event_8h.html',1,'']]] -]; diff --git a/docs/html/search/files_3.html b/docs/html/search/files_3.html deleted file mode 100644 index 1076bc5..0000000 --- a/docs/html/search/files_3.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/files_3.js b/docs/html/search/files_3.js deleted file mode 100644 index c641f9f..0000000 --- a/docs/html/search/files_3.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['functional_2eh_322',['functional.h',['../functional_8h.html',1,'']]] -]; diff --git a/docs/html/search/files_4.html b/docs/html/search/files_4.html deleted file mode 100644 index e5cd7f4..0000000 --- a/docs/html/search/files_4.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/files_4.js b/docs/html/search/files_4.js deleted file mode 100644 index c03c89b..0000000 --- a/docs/html/search/files_4.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['iterator_2eh_323',['iterator.h',['../iterator_8h.html',1,'']]] -]; diff --git a/docs/html/search/files_5.html b/docs/html/search/files_5.html deleted file mode 100644 index 2cc480f..0000000 --- a/docs/html/search/files_5.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/files_5.js b/docs/html/search/files_5.js deleted file mode 100644 index 6a0f441..0000000 --- a/docs/html/search/files_5.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['linked_2dlist_2eh_324',['linked-list.h',['../linked-list_8h.html',1,'']]] -]; diff --git a/docs/html/search/files_6.html b/docs/html/search/files_6.html deleted file mode 100644 index 6510245..0000000 --- a/docs/html/search/files_6.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/files_6.js b/docs/html/search/files_6.js deleted file mode 100644 index 2318aec..0000000 --- a/docs/html/search/files_6.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['module_2eh_325',['module.h',['../module_8h.html',1,'']]] -]; diff --git a/docs/html/search/files_7.html b/docs/html/search/files_7.html deleted file mode 100644 index 819f7b8..0000000 --- a/docs/html/search/files_7.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/files_7.js b/docs/html/search/files_7.js deleted file mode 100644 index 611f60d..0000000 --- a/docs/html/search/files_7.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['object_2dpool_2eh_326',['object-pool.h',['../object-pool_8h.html',1,'']]] -]; diff --git a/docs/html/search/files_8.html b/docs/html/search/files_8.html deleted file mode 100644 index fa1a27f..0000000 --- a/docs/html/search/files_8.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/files_8.js b/docs/html/search/files_8.js deleted file mode 100644 index cbc137f..0000000 --- a/docs/html/search/files_8.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['pipeline_2eh_327',['pipeline.h',['../pipeline_8h.html',1,'']]], - ['promise_2eh_328',['promise.h',['../promise_8h.html',1,'']]] -]; diff --git a/docs/html/search/files_9.html b/docs/html/search/files_9.html deleted file mode 100644 index 3af3e47..0000000 --- a/docs/html/search/files_9.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/files_9.js b/docs/html/search/files_9.js deleted file mode 100644 index 27a8e7e..0000000 --- a/docs/html/search/files_9.js +++ /dev/null @@ -1,7 +0,0 @@ -var searchData= -[ - ['scheduler_2eh_329',['scheduler.h',['../scheduler_8h.html',1,'']]], - ['signal_2eh_330',['signal.h',['../signal_8h.html',1,'']]], - ['system_2dpools_2eh_331',['system-pools.h',['../system-pools_8h.html',1,'']]], - ['system_2dqueues_2eh_332',['system-queues.h',['../system-queues_8h.html',1,'']]] -]; diff --git a/docs/html/search/functions_0.html b/docs/html/search/functions_0.html deleted file mode 100644 index e17c711..0000000 --- a/docs/html/search/functions_0.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/functions_0.js b/docs/html/search/functions_0.js deleted file mode 100644 index 31a0bad..0000000 --- a/docs/html/search/functions_0.js +++ /dev/null @@ -1,123 +0,0 @@ -var searchData= -[ - ['uel_5fapp_5fenqueue_5fclosure_333',['uel_app_enqueue_closure',['../application_8h.html#a0ccd5d564ff573bcf157a0b21f58cca7',1,'application.h']]], - ['uel_5fapp_5finit_334',['uel_app_init',['../application_8h.html#ab221d8fc71af4fbf92525a7691b039ae',1,'application.h']]], - ['uel_5fapp_5fload_335',['uel_app_load',['../application_8h.html#aed8a446de669fcab5bc591fb28d3b5f6',1,'application.h']]], - ['uel_5fapp_5fobserve_336',['uel_app_observe',['../application_8h.html#ab581cf79189c8c2bdbb6b476ee91c761',1,'application.h']]], - ['uel_5fapp_5frequire_337',['uel_app_require',['../application_8h.html#a66ccab648cf052380fd7459748316e29',1,'application.h']]], - ['uel_5fapp_5frun_5fat_5fintervals_338',['uel_app_run_at_intervals',['../application_8h.html#a5f9d6a430845dc9bc6150346f8bb00ef',1,'application.h']]], - ['uel_5fapp_5frun_5flater_339',['uel_app_run_later',['../application_8h.html#a662ad4bd4836fe3790eefe21fd38ba0e',1,'application.h']]], - ['uel_5fapp_5ftick_340',['uel_app_tick',['../application_8h.html#adbbe5a9f65d8b1168d00c270cff52085',1,'application.h']]], - ['uel_5fapp_5fupdate_5ftimer_341',['uel_app_update_timer',['../application_8h.html#aac33288da9d190eda72d9598b877b7f7',1,'application.h']]], - ['uel_5fautopool_5falloc_342',['uel_autopool_alloc',['../automatic-pool_8h.html#aa4824c8fb0acb2059ee3c1ebf327712f',1,'automatic-pool.h']]], - ['uel_5fautopool_5finit_343',['uel_autopool_init',['../automatic-pool_8h.html#a32b26c65f4e2c7dfc733e14a0c06b746',1,'automatic-pool.h']]], - ['uel_5fautopool_5fis_5fempty_344',['uel_autopool_is_empty',['../automatic-pool_8h.html#aa94c4ff64e887bff5dfc5c8ef3fcd380',1,'automatic-pool.h']]], - ['uel_5fautopool_5fset_5fconstructor_345',['uel_autopool_set_constructor',['../automatic-pool_8h.html#ab00201d7a847f7844ba6a1aebe38384d',1,'automatic-pool.h']]], - ['uel_5fautopool_5fset_5fdestructor_346',['uel_autopool_set_destructor',['../automatic-pool_8h.html#a7f57eb19fffa1865c2a8b69aa61acc2b',1,'automatic-pool.h']]], - ['uel_5fautoptr_5fdealloc_347',['uel_autoptr_dealloc',['../automatic-pool_8h.html#affb23d5f2209456cfcb4228ae258f409',1,'automatic-pool.h']]], - ['uel_5fclosure_5fcreate_348',['uel_closure_create',['../closure_8h.html#adbc9cc1a9562693b06bfacd82d8ac978',1,'closure.h']]], - ['uel_5fclosure_5finvoke_349',['uel_closure_invoke',['../closure_8h.html#adcd44820dd3715e206fdf71800e8926c',1,'closure.h']]], - ['uel_5fconditional_5fapply_350',['uel_conditional_apply',['../conditional_8h.html#a09ded07bf4d8645615a25557a87c996d',1,'conditional.h']]], - ['uel_5fconditional_5finit_351',['uel_conditional_init',['../conditional_8h.html#acb6e7aa5cd25863e7a628d233a967412',1,'conditional.h']]], - ['uel_5fcqueue_5fclear_352',['uel_cqueue_clear',['../circular-queue_8h.html#a8df6047e956a849653bc6fe980706a07',1,'circular-queue.h']]], - ['uel_5fcqueue_5fcount_353',['uel_cqueue_count',['../circular-queue_8h.html#ad5efb7d3f6579abf94ae15c83cbcde40',1,'circular-queue.h']]], - ['uel_5fcqueue_5finit_354',['uel_cqueue_init',['../circular-queue_8h.html#acf451cae31642c456faada2501a4977e',1,'circular-queue.h']]], - ['uel_5fcqueue_5fis_5fempty_355',['uel_cqueue_is_empty',['../circular-queue_8h.html#abcd173ac88be8796deacdff15aa0e964',1,'circular-queue.h']]], - ['uel_5fcqueue_5fis_5ffull_356',['uel_cqueue_is_full',['../circular-queue_8h.html#a8ab1a212bf38b1578f9df769b65437e3',1,'circular-queue.h']]], - ['uel_5fcqueue_5fpeek_5fhead_357',['uel_cqueue_peek_head',['../circular-queue_8h.html#a8d23ce639b076f853247a62670cfae30',1,'circular-queue.h']]], - ['uel_5fcqueue_5fpeek_5ftail_358',['uel_cqueue_peek_tail',['../circular-queue_8h.html#aaf2d52fbe078fc80ef8e6119d12155ff',1,'circular-queue.h']]], - ['uel_5fcqueue_5fpop_359',['uel_cqueue_pop',['../circular-queue_8h.html#a818331aa6bf56e977f7a95d996e9009d',1,'circular-queue.h']]], - ['uel_5fcqueue_5fpush_360',['uel_cqueue_push',['../circular-queue_8h.html#ae65acd13845cdd8e2492201538c2e968',1,'circular-queue.h']]], - ['uel_5fevent_5fconfig_5fclosure_361',['uel_event_config_closure',['../event_8h.html#a39a1530d0b0a93a8d810d0e37fe03160',1,'event.h']]], - ['uel_5fevent_5fconfig_5fobserver_362',['uel_event_config_observer',['../event_8h.html#afc174dfecb1d892499c2edd5a1f5f879',1,'event.h']]], - ['uel_5fevent_5fconfig_5fsignal_363',['uel_event_config_signal',['../event_8h.html#a2345bf8b0ddb2f59b4d5f35f0442d3cf',1,'event.h']]], - ['uel_5fevent_5fconfig_5fsignal_5flistener_364',['uel_event_config_signal_listener',['../event_8h.html#a4f2472662aa1378f437ac46dd85088e8',1,'event.h']]], - ['uel_5fevent_5fconfig_5ftimer_365',['uel_event_config_timer',['../event_8h.html#ac5daec069fa7e1e98044307c06e7bc85',1,'event.h']]], - ['uel_5fevent_5fobserver_5fcancel_366',['uel_event_observer_cancel',['../event_8h.html#ad3ebbe62dc7e5749c447b28238499af6',1,'event.h']]], - ['uel_5fevent_5ftimer_5fcancel_367',['uel_event_timer_cancel',['../event_8h.html#a306a18151beee2907b06895f86f8837d',1,'event.h']]], - ['uel_5fevent_5ftimer_5fpause_368',['uel_event_timer_pause',['../event_8h.html#af7fa468eacdeaf628daa64808721dabd',1,'event.h']]], - ['uel_5fevent_5ftimer_5fresume_369',['uel_event_timer_resume',['../event_8h.html#ae876c8b387f90c2a05a78a922ed8c9fb',1,'event.h']]], - ['uel_5fevloop_5fenqueue_5fclosure_370',['uel_evloop_enqueue_closure',['../event-loop_8h.html#a1d3464894f0281c7b1f4c9c18dddcaf4',1,'event-loop.h']]], - ['uel_5fevloop_5finit_371',['uel_evloop_init',['../event-loop_8h.html#abb6102256fd588588045a5743f07247d',1,'event-loop.h']]], - ['uel_5fevloop_5fobserve_372',['uel_evloop_observe',['../event-loop_8h.html#af08a755b11d666cdfa0b35446d007d13',1,'event-loop.h']]], - ['uel_5fevloop_5fobserve_5fonce_373',['uel_evloop_observe_once',['../event-loop_8h.html#a67264e6232817d1f23288856dbd1a3bb',1,'event-loop.h']]], - ['uel_5fevloop_5frun_374',['uel_evloop_run',['../event-loop_8h.html#ad5371df9faa7072e1fd11470448de901',1,'event-loop.h']]], - ['uel_5ffunc_5fall_375',['uel_func_all',['../functional_8h.html#a27004669ef5f883bdf911b6d3ec28995',1,'functional.h']]], - ['uel_5ffunc_5fany_376',['uel_func_any',['../functional_8h.html#ab04a6190af8139356acde68fbfa36d19',1,'functional.h']]], - ['uel_5ffunc_5fconditional_377',['uel_func_conditional',['../functional_8h.html#a97c901138cf1de87f9c5675d525d9842',1,'functional.h']]], - ['uel_5ffunc_5fcount_378',['uel_func_count',['../functional_8h.html#a8c8014f63f6b20972697e867734034d4',1,'functional.h']]], - ['uel_5ffunc_5ffind_379',['uel_func_find',['../functional_8h.html#ac70b7b1e40d33fc05249d800361d4303',1,'functional.h']]], - ['uel_5ffunc_5fforeach_380',['uel_func_foreach',['../functional_8h.html#abe102286c62fd56e5f16014282144467',1,'functional.h']]], - ['uel_5ffunc_5fmap_381',['uel_func_map',['../functional_8h.html#a03c3cc3260a99348d50c6f8de16248ba',1,'functional.h']]], - ['uel_5ffunc_5fmapper_5finit_382',['uel_func_mapper_init',['../functional_8h.html#a6623a1b2cdf37983fd6bebf2fd3570c4',1,'functional.h']]], - ['uel_5ffunc_5fnone_383',['uel_func_none',['../functional_8h.html#a0f10f9a3f9d0131952d3ffc6ff6cdac0',1,'functional.h']]], - ['uel_5ffunc_5fpipeline_384',['uel_func_pipeline',['../functional_8h.html#a59ef21c6c45d7f95955f2b49f7ebc241',1,'functional.h']]], - ['uel_5fiterator_5fall_385',['uel_iterator_all',['../iterator_8h.html#add9308f85bc2ecf781bca558c3e0ce50',1,'iterator.h']]], - ['uel_5fiterator_5fany_386',['uel_iterator_any',['../iterator_8h.html#a354f1f9b00d7033338dd2e5bd078da19',1,'iterator.h']]], - ['uel_5fiterator_5farray_5fcreate_387',['uel_iterator_array_create',['../iterator_8h.html#a0acc2751d0a555963f923fca73c0200a',1,'iterator.h']]], - ['uel_5fiterator_5farray_5fnext_388',['uel_iterator_array_next',['../iterator_8h.html#ae527f0990ab89f4f2e5ad26fd6fd90b6',1,'iterator.h']]], - ['uel_5fiterator_5fcount_389',['uel_iterator_count',['../iterator_8h.html#ae415aaa0c760c504717fcacfca3b294d',1,'iterator.h']]], - ['uel_5fiterator_5ffind_390',['uel_iterator_find',['../iterator_8h.html#ae77e788e5eae4d1ef812005ccc6d83e9',1,'iterator.h']]], - ['uel_5fiterator_5fforeach_391',['uel_iterator_foreach',['../iterator_8h.html#a590b4d91255d67d8878675503ec235f0',1,'iterator.h']]], - ['uel_5fiterator_5fllist_5fcreate_392',['uel_iterator_llist_create',['../iterator_8h.html#ae6d556c0d69311f1ea8deb05ddb722a4',1,'iterator.h']]], - ['uel_5fiterator_5fllist_5fnext_393',['uel_iterator_llist_next',['../iterator_8h.html#a52d44b593487736766981844ab9c381f',1,'iterator.h']]], - ['uel_5fiterator_5fmap_394',['uel_iterator_map',['../iterator_8h.html#a6ca0083f388164973c9d6f9518799b03',1,'iterator.h']]], - ['uel_5fiterator_5fnone_395',['uel_iterator_none',['../iterator_8h.html#a51d3573756956d42f7b67b5b9acc27a3',1,'iterator.h']]], - ['uel_5fllist_5finit_396',['uel_llist_init',['../linked-list_8h.html#a636d9d433df7fd53fc3138b6c77df75a',1,'linked-list.h']]], - ['uel_5fllist_5finsert_5fat_397',['uel_llist_insert_at',['../linked-list_8h.html#a2486cc91fa52a2fac1f0b0e7dc9a4562',1,'linked-list.h']]], - ['uel_5fllist_5fpeek_5fhead_398',['uel_llist_peek_head',['../linked-list_8h.html#ab663ff1457ec2ddbcba9a8f1c7399163',1,'linked-list.h']]], - ['uel_5fllist_5fpeek_5ftail_399',['uel_llist_peek_tail',['../linked-list_8h.html#a33fca34e728f3524f6ebd328b96a1c80',1,'linked-list.h']]], - ['uel_5fllist_5fpop_5fhead_400',['uel_llist_pop_head',['../linked-list_8h.html#aeb330b9c1971e23248fc39d918979503',1,'linked-list.h']]], - ['uel_5fllist_5fpop_5ftail_401',['uel_llist_pop_tail',['../linked-list_8h.html#ac4f27f948e355936eede9ef5ef808d43',1,'linked-list.h']]], - ['uel_5fllist_5fpush_5fhead_402',['uel_llist_push_head',['../linked-list_8h.html#a0a98f53f55f86adb45e4f0f357d748a8',1,'linked-list.h']]], - ['uel_5fllist_5fpush_5ftail_403',['uel_llist_push_tail',['../linked-list_8h.html#a2ab3add326e3c3a382386786fa5bbf63',1,'linked-list.h']]], - ['uel_5fllist_5fremove_404',['uel_llist_remove',['../linked-list_8h.html#acdb87dcd0d23db28be24297a7f7db7b0',1,'linked-list.h']]], - ['uel_5fllist_5fremove_5fwhile_405',['uel_llist_remove_while',['../linked-list_8h.html#a55def6b7dd819e8e9798787f781d00b7',1,'linked-list.h']]], - ['uel_5fmodule_5fconfig_406',['uel_module_config',['../module_8h.html#aa20d61157d25ebdb6abd2d774e2035d9',1,'module.h']]], - ['uel_5fmodule_5finit_407',['uel_module_init',['../module_8h.html#a3a1d7dc04cf2b7c5c84a61cfd5056772',1,'module.h']]], - ['uel_5fmodule_5flaunch_408',['uel_module_launch',['../module_8h.html#a144a21cefd8d58d672b02b21def8c627',1,'module.h']]], - ['uel_5fnop_409',['uel_nop',['../closure_8h.html#a1f88fc773dbcea710594c7175d3a4ac3',1,'closure.h']]], - ['uel_5fobjpool_5facquire_410',['uel_objpool_acquire',['../object-pool_8h.html#a54248e0810ccb791a8ff82d3de8fc6c5',1,'object-pool.h']]], - ['uel_5fobjpool_5finit_411',['uel_objpool_init',['../object-pool_8h.html#ab49dd047b6e4fcc0939dfd651e3b3666',1,'object-pool.h']]], - ['uel_5fobjpool_5fis_5fempty_412',['uel_objpool_is_empty',['../object-pool_8h.html#ae116db7f19b0971e6781e375361265ce',1,'object-pool.h']]], - ['uel_5fobjpool_5frelease_413',['uel_objpool_release',['../object-pool_8h.html#af4370a164b82e436749fbc9f8af9a114',1,'object-pool.h']]], - ['uel_5fpipeline_5fapply_414',['uel_pipeline_apply',['../pipeline_8h.html#a54df79756518430d753961735c93d270',1,'pipeline.h']]], - ['uel_5fpipeline_5finit_415',['uel_pipeline_init',['../pipeline_8h.html#ad7cfa65777a90f537ab031b6d8dac028',1,'pipeline.h']]], - ['uel_5fpromise_5fafter_416',['uel_promise_after',['../promise_8h.html#a4b1b8ee1101104f1beaa782ef630767f',1,'promise.h']]], - ['uel_5fpromise_5falways_417',['uel_promise_always',['../promise_8h.html#a6a932817fcd43d5eaa2723b8c34132ff',1,'promise.h']]], - ['uel_5fpromise_5fcatch_418',['uel_promise_catch',['../promise_8h.html#a550561c65f5abb38bc5c3b25083dd468',1,'promise.h']]], - ['uel_5fpromise_5fcreate_419',['uel_promise_create',['../promise_8h.html#a5c0cdf2e971bf738362af1761c729bd4',1,'promise.h']]], - ['uel_5fpromise_5fdestroy_420',['uel_promise_destroy',['../promise_8h.html#ac43ce3e3316581da32cf3e21c15901f0',1,'promise.h']]], - ['uel_5fpromise_5fdestroyer_421',['uel_promise_destroyer',['../promise_8h.html#a9b68547bf7ac1a5860b165a4638bcc51',1,'promise.h']]], - ['uel_5fpromise_5freject_422',['uel_promise_reject',['../promise_8h.html#a2e904cfb182cb5619b0a31790fca697e',1,'promise.h']]], - ['uel_5fpromise_5frejecter_423',['uel_promise_rejecter',['../promise_8h.html#a09b820cf5093f6979da34cbe6faa1787',1,'promise.h']]], - ['uel_5fpromise_5fresettle_424',['uel_promise_resettle',['../promise_8h.html#a2d226c4ed1a94964db50dbb5a7f958df',1,'promise.h']]], - ['uel_5fpromise_5fresolve_425',['uel_promise_resolve',['../promise_8h.html#abe5aae85467a9af06b580df74aeedb8c',1,'promise.h']]], - ['uel_5fpromise_5fresolver_426',['uel_promise_resolver',['../promise_8h.html#acffa84389150a36442905a6f89cb827b',1,'promise.h']]], - ['uel_5fpromise_5fstore_5fcreate_427',['uel_promise_store_create',['../promise_8h.html#a4e3a7f9f0d154d4a2fa1c17520bd5561',1,'promise.h']]], - ['uel_5fpromise_5fthen_428',['uel_promise_then',['../promise_8h.html#abb34042cccffccafefb813a902ec8389',1,'promise.h']]], - ['uel_5fsch_5finit_429',['uel_sch_init',['../scheduler_8h.html#a7f4ae225987bb741ca824c83a96ce138',1,'scheduler.h']]], - ['uel_5fsch_5fmanage_5ftimers_430',['uel_sch_manage_timers',['../scheduler_8h.html#a2666a61c55a518fd602cee03a014ed10',1,'scheduler.h']]], - ['uel_5fsch_5frun_5fat_5fintervals_431',['uel_sch_run_at_intervals',['../scheduler_8h.html#a6a993056042a7649e1e7375eb2bb588d',1,'scheduler.h']]], - ['uel_5fsch_5frun_5flater_432',['uel_sch_run_later',['../scheduler_8h.html#ad5909fddc1856cc1b980a0445602c67c',1,'scheduler.h']]], - ['uel_5fsch_5fupdate_5ftimer_433',['uel_sch_update_timer',['../scheduler_8h.html#a0a5a89adf45a470aed0e39925a256ea2',1,'scheduler.h']]], - ['uel_5fsignal_5femit_434',['uel_signal_emit',['../signal_8h.html#af849f4effe2577efe439387d3a8a710a',1,'signal.h']]], - ['uel_5fsignal_5flisten_435',['uel_signal_listen',['../signal_8h.html#ac11a6acd9237d30551bc0dc8ba406189',1,'signal.h']]], - ['uel_5fsignal_5flisten_5fonce_436',['uel_signal_listen_once',['../signal_8h.html#a6d59d4a7b4c0c5f6b1d271ed6e8a8212',1,'signal.h']]], - ['uel_5fsignal_5freject_5fpromise_437',['uel_signal_reject_promise',['../signal_8h.html#a9dafdd735ff9f06ddc2b0c80862e8af6',1,'signal.h']]], - ['uel_5fsignal_5frelay_5finit_438',['uel_signal_relay_init',['../signal_8h.html#a8eaa68abe3e288c96eb0ae88d244364f',1,'signal.h']]], - ['uel_5fsignal_5fresolve_5fpromise_439',['uel_signal_resolve_promise',['../signal_8h.html#a1b208dd90b74c52c2775518c242f7c8a',1,'signal.h']]], - ['uel_5fsignal_5funlisten_440',['uel_signal_unlisten',['../signal_8h.html#a3fb31014f6cec7acf29e7de4b66fe531',1,'signal.h']]], - ['uel_5fsyspools_5facquire_5fevent_441',['uel_syspools_acquire_event',['../system-pools_8h.html#afa790328d17062994bc3f958b9e96ea4',1,'system-pools.h']]], - ['uel_5fsyspools_5facquire_5fllist_5fnode_442',['uel_syspools_acquire_llist_node',['../system-pools_8h.html#a11d44d4872dd5110c3573e0dd8cfc9d3',1,'system-pools.h']]], - ['uel_5fsyspools_5finit_443',['uel_syspools_init',['../system-pools_8h.html#a737df9d7ca7c587711dc8c59d9f1c277',1,'system-pools.h']]], - ['uel_5fsyspools_5frelease_5fevent_444',['uel_syspools_release_event',['../system-pools_8h.html#a52991a37f5e0da28ecc6161ed8932911',1,'system-pools.h']]], - ['uel_5fsyspools_5frelease_5fllist_5fnode_445',['uel_syspools_release_llist_node',['../system-pools_8h.html#ae392a6e20954e33629d67a5729c9de02',1,'system-pools.h']]], - ['uel_5fsysqueues_5fcount_5fenqueued_5fevents_446',['uel_sysqueues_count_enqueued_events',['../system-queues_8h.html#a7caa3edc1266d927d334b6b85af5ec95',1,'system-queues.h']]], - ['uel_5fsysqueues_5fcount_5fscheduled_5fevents_447',['uel_sysqueues_count_scheduled_events',['../system-queues_8h.html#a50a5ee20919b0362d640b3816a2ed191',1,'system-queues.h']]], - ['uel_5fsysqueues_5fenqueue_5fevent_448',['uel_sysqueues_enqueue_event',['../system-queues_8h.html#ac58c61b4b8d432898a6c5b2a47b7d197',1,'system-queues.h']]], - ['uel_5fsysqueues_5fget_5fenqueued_5fevent_449',['uel_sysqueues_get_enqueued_event',['../system-queues_8h.html#a897b9899eefbe90ac11e651b5117bfd3',1,'system-queues.h']]], - ['uel_5fsysqueues_5fget_5fscheduled_5fevent_450',['uel_sysqueues_get_scheduled_event',['../system-queues_8h.html#a1730d1f7a7e86a3a79df40938fa9d735',1,'system-queues.h']]], - ['uel_5fsysqueues_5finit_451',['uel_sysqueues_init',['../system-queues_8h.html#aa988e6daddfd00129d56c1db350edc5a',1,'system-queues.h']]], - ['uel_5fsysqueues_5fschedule_5fevent_452',['uel_sysqueues_schedule_event',['../system-queues_8h.html#ac14ac33abf67b93d8904e5ebb1218028',1,'system-queues.h']]] -]; diff --git a/docs/html/search/mag_sel.png b/docs/html/search/mag_sel.png deleted file mode 100644 index 39c0ed5..0000000 Binary files a/docs/html/search/mag_sel.png and /dev/null differ diff --git a/docs/html/search/nomatches.html b/docs/html/search/nomatches.html deleted file mode 100644 index 4377320..0000000 --- a/docs/html/search/nomatches.html +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - -
    -
    No Matches
    -
    - - diff --git a/docs/html/search/pages_0.html b/docs/html/search/pages_0.html deleted file mode 100644 index 9a6a29a..0000000 --- a/docs/html/search/pages_0.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/pages_0.js b/docs/html/search/pages_0.js deleted file mode 100644 index 76925d4..0000000 --- a/docs/html/search/pages_0.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['µevloop_20_3cimg_20src_3d_22https_3a_2f_2fgithub_2ecom_2fandsmedeiros_2fuevloop_2fworkflows_2fc_2fc_2b_2b_2520ci_2fbadge_2esvg_3fevent_3dpush_22_20alt_3d_22c_2fc_2b_2b_20ci_22_2f_3e_569',['µEvLoop <img src="https://github.com/andsmedeiros/uevloop/workflows/C/C++%20CI/badge.svg?event=push" alt="C/C++ CI"/>',['../index.html',1,'']]] -]; diff --git a/docs/html/search/search.css b/docs/html/search/search.css deleted file mode 100644 index 3cf9df9..0000000 --- a/docs/html/search/search.css +++ /dev/null @@ -1,271 +0,0 @@ -/*---------------- Search Box */ - -#FSearchBox { - float: left; -} - -#MSearchBox { - white-space : nowrap; - float: none; - margin-top: 8px; - right: 0px; - width: 170px; - height: 24px; - z-index: 102; -} - -#MSearchBox .left -{ - display:block; - position:absolute; - left:10px; - width:20px; - height:19px; - background:url('search_l.png') no-repeat; - background-position:right; -} - -#MSearchSelect { - display:block; - position:absolute; - width:20px; - height:19px; -} - -.left #MSearchSelect { - left:4px; -} - -.right #MSearchSelect { - right:5px; -} - -#MSearchField { - display:block; - position:absolute; - height:19px; - background:url('search_m.png') repeat-x; - border:none; - width:115px; - margin-left:20px; - padding-left:4px; - color: #909090; - outline: none; - font: 9pt Arial, Verdana, sans-serif; - -webkit-border-radius: 0px; -} - -#FSearchBox #MSearchField { - margin-left:15px; -} - -#MSearchBox .right { - display:block; - position:absolute; - right:10px; - top:8px; - width:20px; - height:19px; - background:url('search_r.png') no-repeat; - background-position:left; -} - -#MSearchClose { - display: none; - position: absolute; - top: 4px; - background : none; - border: none; - margin: 0px 4px 0px 0px; - padding: 0px 0px; - outline: none; -} - -.left #MSearchClose { - left: 6px; -} - -.right #MSearchClose { - right: 2px; -} - -.MSearchBoxActive #MSearchField { - color: #000000; -} - -/*---------------- Search filter selection */ - -#MSearchSelectWindow { - display: none; - position: absolute; - left: 0; top: 0; - border: 1px solid #90A5CE; - background-color: #F9FAFC; - z-index: 10001; - padding-top: 4px; - padding-bottom: 4px; - -moz-border-radius: 4px; - -webkit-border-top-left-radius: 4px; - -webkit-border-top-right-radius: 4px; - -webkit-border-bottom-left-radius: 4px; - -webkit-border-bottom-right-radius: 4px; - -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); -} - -.SelectItem { - font: 8pt Arial, Verdana, sans-serif; - padding-left: 2px; - padding-right: 12px; - border: 0px; -} - -span.SelectionMark { - margin-right: 4px; - font-family: monospace; - outline-style: none; - text-decoration: none; -} - -a.SelectItem { - display: block; - outline-style: none; - color: #000000; - text-decoration: none; - padding-left: 6px; - padding-right: 12px; -} - -a.SelectItem:focus, -a.SelectItem:active { - color: #000000; - outline-style: none; - text-decoration: none; -} - -a.SelectItem:hover { - color: #FFFFFF; - background-color: #3D578C; - outline-style: none; - text-decoration: none; - cursor: pointer; - display: block; -} - -/*---------------- Search results window */ - -iframe#MSearchResults { - width: 60ex; - height: 15em; -} - -#MSearchResultsWindow { - display: none; - position: absolute; - left: 0; top: 0; - border: 1px solid #000; - background-color: #EEF1F7; - z-index:10000; -} - -/* ----------------------------------- */ - - -#SRIndex { - clear:both; - padding-bottom: 15px; -} - -.SREntry { - font-size: 10pt; - padding-left: 1ex; -} - -.SRPage .SREntry { - font-size: 8pt; - padding: 1px 5px; -} - -body.SRPage { - margin: 5px 2px; -} - -.SRChildren { - padding-left: 3ex; padding-bottom: .5em -} - -.SRPage .SRChildren { - display: none; -} - -.SRSymbol { - font-weight: bold; - color: #425E97; - font-family: Arial, Verdana, sans-serif; - text-decoration: none; - outline: none; -} - -a.SRScope { - display: block; - color: #425E97; - font-family: Arial, Verdana, sans-serif; - text-decoration: none; - outline: none; -} - -a.SRSymbol:focus, a.SRSymbol:active, -a.SRScope:focus, a.SRScope:active { - text-decoration: underline; -} - -span.SRScope { - padding-left: 4px; -} - -.SRPage .SRStatus { - padding: 2px 5px; - font-size: 8pt; - font-style: italic; -} - -.SRResult { - display: none; -} - -DIV.searchresults { - margin-left: 10px; - margin-right: 10px; -} - -/*---------------- External search page results */ - -.searchresult { - background-color: #F0F3F8; -} - -.pages b { - color: white; - padding: 5px 5px 3px 5px; - background-image: url("../tab_a.png"); - background-repeat: repeat-x; - text-shadow: 0 1px 1px #000000; -} - -.pages { - line-height: 17px; - margin-left: 4px; - text-decoration: none; -} - -.hl { - font-weight: bold; -} - -#searchresults { - margin-bottom: 20px; -} - -.searchpages { - margin-top: 10px; -} - diff --git a/docs/html/search/search.js b/docs/html/search/search.js deleted file mode 100644 index a554ab9..0000000 --- a/docs/html/search/search.js +++ /dev/null @@ -1,814 +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 convertToId(search) -{ - var result = ''; - for (i=0;i do a search - { - this.Search(); - } - } - - this.OnSearchSelectKey = function(evt) - { - var e = (evt) ? evt : window.event; // for IE - if (e.keyCode==40 && this.searchIndex0) // Up - { - this.searchIndex--; - this.OnSelectItem(this.searchIndex); - } - else if (e.keyCode==13 || e.keyCode==27) - { - this.OnSelectItem(this.searchIndex); - this.CloseSelectionWindow(); - this.DOMSearchField().focus(); - } - return false; - } - - // --------- Actions - - // Closes the results window. - this.CloseResultsWindow = function() - { - this.DOMPopupSearchResultsWindow().style.display = 'none'; - this.DOMSearchClose().style.display = 'none'; - this.Activate(false); - } - - this.CloseSelectionWindow = function() - { - this.DOMSearchSelectWindow().style.display = 'none'; - } - - // Performs a search. - this.Search = function() - { - this.keyTimeout = 0; - - // strip leading whitespace - var searchValue = this.DOMSearchField().value.replace(/^ +/, ""); - - var code = searchValue.toLowerCase().charCodeAt(0); - var idxChar = searchValue.substr(0, 1).toLowerCase(); - if ( 0xD800 <= code && code <= 0xDBFF && searchValue > 1) // surrogate pair - { - idxChar = searchValue.substr(0, 2); - } - - var resultsPage; - var resultsPageWithSearch; - var hasResultsPage; - - var idx = indexSectionsWithContent[this.searchIndex].indexOf(idxChar); - if (idx!=-1) - { - var hexCode=idx.toString(16); - resultsPage = this.resultsPath + '/' + indexSectionNames[this.searchIndex] + '_' + hexCode + '.html'; - resultsPageWithSearch = resultsPage+'?'+escape(searchValue); - hasResultsPage = true; - } - else // nothing available for this search term - { - resultsPage = this.resultsPath + '/nomatches.html'; - resultsPageWithSearch = resultsPage; - hasResultsPage = false; - } - - window.frames.MSearchResults.location = resultsPageWithSearch; - var domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow(); - - if (domPopupSearchResultsWindow.style.display!='block') - { - var domSearchBox = this.DOMSearchBox(); - this.DOMSearchClose().style.display = 'inline'; - if (this.insideFrame) - { - var domPopupSearchResults = this.DOMPopupSearchResults(); - domPopupSearchResultsWindow.style.position = 'relative'; - domPopupSearchResultsWindow.style.display = 'block'; - var width = document.body.clientWidth - 8; // the -8 is for IE :-( - domPopupSearchResultsWindow.style.width = width + 'px'; - domPopupSearchResults.style.width = width + 'px'; - } - else - { - var domPopupSearchResults = this.DOMPopupSearchResults(); - var left = getXPos(domSearchBox) + 150; // domSearchBox.offsetWidth; - var top = getYPos(domSearchBox) + 20; // domSearchBox.offsetHeight + 1; - domPopupSearchResultsWindow.style.display = 'block'; - left -= domPopupSearchResults.offsetWidth; - domPopupSearchResultsWindow.style.top = top + 'px'; - domPopupSearchResultsWindow.style.left = left + 'px'; - } - } - - this.lastSearchValue = searchValue; - this.lastResultsPage = resultsPage; - } - - // -------- Activation Functions - - // Activates or deactivates the search panel, resetting things to - // their default values if necessary. - this.Activate = function(isActive) - { - if (isActive || // open it - this.DOMPopupSearchResultsWindow().style.display == 'block' - ) - { - this.DOMSearchBox().className = 'MSearchBoxActive'; - - var searchField = this.DOMSearchField(); - - if (searchField.value == this.searchLabel) // clear "Search" term upon entry - { - searchField.value = ''; - this.searchActive = true; - } - } - else if (!isActive) // directly remove the panel - { - this.DOMSearchBox().className = 'MSearchBoxInactive'; - this.DOMSearchField().value = this.searchLabel; - this.searchActive = false; - this.lastSearchValue = '' - this.lastResultsPage = ''; - } - } -} - -// ----------------------------------------------------------------------- - -// The class that handles everything on the search results page. -function SearchResults(name) -{ - // The number of matches from the last run of . - this.lastMatchCount = 0; - this.lastKey = 0; - this.repeatOn = false; - - // Toggles the visibility of the passed element ID. - this.FindChildElement = function(id) - { - var parentElement = document.getElementById(id); - var element = parentElement.firstChild; - - while (element && element!=parentElement) - { - if (element.nodeName == 'DIV' && element.className == 'SRChildren') - { - return element; - } - - if (element.nodeName == 'DIV' && element.hasChildNodes()) - { - element = element.firstChild; - } - else if (element.nextSibling) - { - element = element.nextSibling; - } - else - { - do - { - element = element.parentNode; - } - while (element && element!=parentElement && !element.nextSibling); - - if (element && element!=parentElement) - { - element = element.nextSibling; - } - } - } - } - - this.Toggle = function(id) - { - var element = this.FindChildElement(id); - if (element) - { - if (element.style.display == 'block') - { - element.style.display = 'none'; - } - else - { - element.style.display = 'block'; - } - } - } - - // Searches for the passed string. If there is no parameter, - // it takes it from the URL query. - // - // Always returns true, since other documents may try to call it - // and that may or may not be possible. - this.Search = function(search) - { - if (!search) // get search word from URL - { - search = window.location.search; - search = search.substring(1); // Remove the leading '?' - search = unescape(search); - } - - search = search.replace(/^ +/, ""); // strip leading spaces - search = search.replace(/ +$/, ""); // strip trailing spaces - search = search.toLowerCase(); - search = convertToId(search); - - var resultRows = document.getElementsByTagName("div"); - var matches = 0; - - var i = 0; - while (i < resultRows.length) - { - var row = resultRows.item(i); - if (row.className == "SRResult") - { - var rowMatchName = row.id.toLowerCase(); - rowMatchName = rowMatchName.replace(/^sr\d*_/, ''); // strip 'sr123_' - - if (search.length<=rowMatchName.length && - rowMatchName.substr(0, search.length)==search) - { - row.style.display = 'block'; - matches++; - } - else - { - row.style.display = 'none'; - } - } - i++; - } - document.getElementById("Searching").style.display='none'; - if (matches == 0) // no results - { - document.getElementById("NoMatches").style.display='block'; - } - else // at least one result - { - document.getElementById("NoMatches").style.display='none'; - } - this.lastMatchCount = matches; - return true; - } - - // return the first item with index index or higher that is visible - this.NavNext = function(index) - { - var focusItem; - while (1) - { - var focusName = 'Item'+index; - focusItem = document.getElementById(focusName); - if (focusItem && focusItem.parentNode.parentNode.style.display=='block') - { - break; - } - else if (!focusItem) // last element - { - break; - } - focusItem=null; - index++; - } - return focusItem; - } - - this.NavPrev = function(index) - { - var focusItem; - while (1) - { - var focusName = 'Item'+index; - focusItem = document.getElementById(focusName); - if (focusItem && focusItem.parentNode.parentNode.style.display=='block') - { - break; - } - else if (!focusItem) // last element - { - break; - } - focusItem=null; - index--; - } - return focusItem; - } - - this.ProcessKeys = function(e) - { - if (e.type == "keydown") - { - this.repeatOn = false; - this.lastKey = e.keyCode; - } - else if (e.type == "keypress") - { - if (!this.repeatOn) - { - if (this.lastKey) this.repeatOn = true; - return false; // ignore first keypress after keydown - } - } - else if (e.type == "keyup") - { - this.lastKey = 0; - this.repeatOn = false; - } - return this.lastKey!=0; - } - - this.Nav = function(evt,itemIndex) - { - var e = (evt) ? evt : window.event; // for IE - if (e.keyCode==13) return true; - if (!this.ProcessKeys(e)) return false; - - if (this.lastKey==38) // Up - { - var newIndex = itemIndex-1; - var focusItem = this.NavPrev(newIndex); - if (focusItem) - { - var child = this.FindChildElement(focusItem.parentNode.parentNode.id); - if (child && child.style.display == 'block') // children visible - { - var n=0; - var tmpElem; - while (1) // search for last child - { - tmpElem = document.getElementById('Item'+newIndex+'_c'+n); - if (tmpElem) - { - focusItem = tmpElem; - } - else // found it! - { - break; - } - n++; - } - } - } - if (focusItem) - { - focusItem.focus(); - } - else // return focus to search field - { - parent.document.getElementById("MSearchField").focus(); - } - } - else if (this.lastKey==40) // Down - { - var newIndex = itemIndex+1; - var focusItem; - var item = document.getElementById('Item'+itemIndex); - var elem = this.FindChildElement(item.parentNode.parentNode.id); - if (elem && elem.style.display == 'block') // children visible - { - focusItem = document.getElementById('Item'+itemIndex+'_c0'); - } - if (!focusItem) focusItem = this.NavNext(newIndex); - if (focusItem) focusItem.focus(); - } - else if (this.lastKey==39) // Right - { - var item = document.getElementById('Item'+itemIndex); - var elem = this.FindChildElement(item.parentNode.parentNode.id); - if (elem) elem.style.display = 'block'; - } - else if (this.lastKey==37) // Left - { - var item = document.getElementById('Item'+itemIndex); - var elem = this.FindChildElement(item.parentNode.parentNode.id); - if (elem) elem.style.display = 'none'; - } - else if (this.lastKey==27) // Escape - { - parent.searchBox.CloseResultsWindow(); - parent.document.getElementById("MSearchField").focus(); - } - else if (this.lastKey==13) // Enter - { - return true; - } - return false; - } - - this.NavChild = function(evt,itemIndex,childIndex) - { - var e = (evt) ? evt : window.event; // for IE - if (e.keyCode==13) return true; - if (!this.ProcessKeys(e)) return false; - - if (this.lastKey==38) // Up - { - if (childIndex>0) - { - var newIndex = childIndex-1; - document.getElementById('Item'+itemIndex+'_c'+newIndex).focus(); - } - else // already at first child, jump to parent - { - document.getElementById('Item'+itemIndex).focus(); - } - } - else if (this.lastKey==40) // Down - { - var newIndex = childIndex+1; - var elem = document.getElementById('Item'+itemIndex+'_c'+newIndex); - if (!elem) // last child, jump to parent next parent - { - elem = this.NavNext(itemIndex+1); - } - if (elem) - { - elem.focus(); - } - } - else if (this.lastKey==27) // Escape - { - parent.searchBox.CloseResultsWindow(); - parent.document.getElementById("MSearchField").focus(); - } - else if (this.lastKey==13) // Enter - { - return true; - } - return false; - } -} - -function setKeyActions(elem,action) -{ - elem.setAttribute('onkeydown',action); - elem.setAttribute('onkeypress',action); - elem.setAttribute('onkeyup',action); -} - -function setClassAttr(elem,attr) -{ - elem.setAttribute('class',attr); - elem.setAttribute('className',attr); -} - -function createResults() -{ - var results = document.getElementById("SRResults"); - for (var e=0; e - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/typedefs_0.js b/docs/html/search/typedefs_0.js deleted file mode 100644 index bef97f8..0000000 --- a/docs/html/search/typedefs_0.js +++ /dev/null @@ -1,13 +0,0 @@ -var searchData= -[ - ['uel_5fapp_5fevent_5ft_530',['uel_app_event_t',['../application_8h.html#a138e72d6aced8d43e9a2d0c63c830080',1,'application.h']]], - ['uel_5fautoptr_5ft_531',['uel_autoptr_t',['../automatic-pool_8h.html#a83a2aef2df919bea22dd489c0a5403fd',1,'automatic-pool.h']]], - ['uel_5fclosure_5ffunction_5ft_532',['uel_closure_function_t',['../closure_8h.html#a04cc5d51a9c86aeedcd6641b43dd8564',1,'closure.h']]], - ['uel_5fevent_5ftimer_5fstatus_5ft_533',['uel_event_timer_status_t',['../event_8h.html#ada757ae763328a1774f87efe179e0d0d',1,'event.h']]], - ['uel_5fevent_5ftype_5ft_534',['uel_event_type_t',['../event_8h.html#a04647f8821482fc8f635924fc2f1539b',1,'event.h']]], - ['uel_5fiterator_5fllist_5ft_535',['uel_iterator_llist_t',['../iterator_8h.html#a0646f93de558b7d6c5c312c010cf7254',1,'iterator.h']]], - ['uel_5fmodule_5fhook_5ft_536',['uel_module_hook_t',['../module_8h.html#ad589448a7bcdb1d7cce57f42346a1657',1,'module.h']]], - ['uel_5fpromise_5fstate_5ft_537',['uel_promise_state_t',['../promise_8h.html#a95fdddb2c4ccf80657feebb0d4c9adfb',1,'promise.h']]], - ['uel_5fsignal_5flistener_5ft_538',['uel_signal_listener_t',['../signal_8h.html#acf4ce9806bae5489706f0409f0a58067',1,'signal.h']]], - ['uel_5fsignal_5ft_539',['uel_signal_t',['../signal_8h.html#a4321d8b0f2c6bc3c0cc143e1bb1d1a2b',1,'signal.h']]] -]; diff --git a/docs/html/search/variables_0.html b/docs/html/search/variables_0.html deleted file mode 100644 index bf3eba5..0000000 --- a/docs/html/search/variables_0.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/variables_0.js b/docs/html/search/variables_0.js deleted file mode 100644 index 8fa2179..0000000 --- a/docs/html/search/variables_0.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['app_453',['app',['../structuel__module.html#a05f6845722afabe30337e1d294fb0a9e',1,'uel_module']]], - ['autoptr_5fpool_454',['autoptr_pool',['../structuel__autopool.html#aa0f1f8622a0ba1f1d2d15d94eb5cbc71',1,'uel_autopool']]] -]; diff --git a/docs/html/search/variables_1.html b/docs/html/search/variables_1.html deleted file mode 100644 index 49fe59a..0000000 --- a/docs/html/search/variables_1.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/variables_1.js b/docs/html/search/variables_1.js deleted file mode 100644 index f6b1c01..0000000 --- a/docs/html/search/variables_1.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['base_455',['base',['../structuel__iterator__array.html#ace993eaa734f8fd100b086c2539afad9',1,'uel_iterator_array']]], - ['buffer_456',['buffer',['../structuel__cqueue.html#a5a87f38cf8b46556a71b286c8623a54d',1,'uel_cqueue::buffer()'],['../structuel__objpool.html#a69cf1db520005f386293899cdb9e07ca',1,'uel_objpool::buffer()']]] -]; diff --git a/docs/html/search/variables_10.html b/docs/html/search/variables_10.html deleted file mode 100644 index 92982ac..0000000 --- a/docs/html/search/variables_10.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/variables_10.js b/docs/html/search/variables_10.js deleted file mode 100644 index 82ae0c6..0000000 --- a/docs/html/search/variables_10.js +++ /dev/null @@ -1,9 +0,0 @@ -var searchData= -[ - ['tail_521',['tail',['../structuel__cqueue.html#aa4fa1f34111ddf307825c9a6b06c4b4e',1,'uel_cqueue::tail()'],['../structuel__llist.html#a8d93e6bd35f15f0ee438088ebf814671',1,'uel_llist::tail()']]], - ['test_522',['test',['../structuel__conditional.html#a8d83f18dd90afbc47881b9617087c4a1',1,'uel_conditional']]], - ['timeout_523',['timeout',['../structevent_1_1uel__event__detail_1_1uel__event__timer.html#a9a6b966db9c39c3302c2a1cb8e813cad',1,'event::uel_event_detail::uel_event_timer']]], - ['timer_524',['timer',['../unionevent_1_1uel__event__detail.html#a5d602dc38887276027f2dac93afcb81d',1,'event::uel_event_detail::timer()'],['../structuel__scheduler.html#a46642fc80fb6d917ed35f3ab61d1c7eb',1,'uel_scheduler::timer()']]], - ['timer_5flist_525',['timer_list',['../structuel__scheduler.html#a9c71f717e4ca6878742aad2e147e9dd6',1,'uel_scheduler']]], - ['type_526',['type',['../structevent.html#a22c24ebb438dfad40f977484a1fa7a35',1,'event']]] -]; diff --git a/docs/html/search/variables_11.html b/docs/html/search/variables_11.html deleted file mode 100644 index 94f1a8c..0000000 --- a/docs/html/search/variables_11.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/variables_11.js b/docs/html/search/variables_11.js deleted file mode 100644 index 1f1ae54..0000000 --- a/docs/html/search/variables_11.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['unlistened_527',['unlistened',['../structevent_1_1uel__event__detail_1_1uel__event__listener.html#a7c68240052221e1ebbab4a9c1c096512',1,'event::uel_event_detail::uel_event_listener']]] -]; diff --git a/docs/html/search/variables_12.html b/docs/html/search/variables_12.html deleted file mode 100644 index 61c013a..0000000 --- a/docs/html/search/variables_12.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/variables_12.js b/docs/html/search/variables_12.js deleted file mode 100644 index 153988c..0000000 --- a/docs/html/search/variables_12.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['value_528',['value',['../structevent.html#af86fbbe00fa2851d24d29ba9b39f3ee2',1,'event::value()'],['../structevent_1_1uel__event__detail_1_1uel__event__signal.html#a74bcb07d316f77b7a2ec6efc3a62fe31',1,'event::uel_event_detail::uel_event_signal::value()'],['../structuel__llist__node.html#a1be7a63ce1a37b1bbb18bef46b8eae58',1,'uel_llist_node::value()'],['../structuel__promise.html#afca1c89f5e4903aa9df56416e0ae0f98',1,'uel_promise::value()']]] -]; diff --git a/docs/html/search/variables_13.html b/docs/html/search/variables_13.html deleted file mode 100644 index 87b7ca6..0000000 --- a/docs/html/search/variables_13.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/variables_13.js b/docs/html/search/variables_13.js deleted file mode 100644 index 5e0b217..0000000 --- a/docs/html/search/variables_13.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['width_529',['width',['../structuel__signal__relay.html#aedd6f0d0fee789b65472d7fa3981322b',1,'uel_signal_relay']]] -]; diff --git a/docs/html/search/variables_2.html b/docs/html/search/variables_2.html deleted file mode 100644 index 0c8a18c..0000000 --- a/docs/html/search/variables_2.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/variables_2.js b/docs/html/search/variables_2.js deleted file mode 100644 index 596f3e9..0000000 --- a/docs/html/search/variables_2.js +++ /dev/null @@ -1,12 +0,0 @@ -var searchData= -[ - ['cancelled_457',['cancelled',['../structevent_1_1uel__event__detail_1_1uel__event__observer.html#a1bd55787112aae874e8b4c906a37614e',1,'event::uel_event_detail::uel_event_observer']]], - ['closure_458',['closure',['../structevent.html#aac834e055b38447126d27c0dec51498c',1,'event']]], - ['closures_459',['closures',['../structuel__pipeline.html#a5dafb55ed93d4b7a6e8c7a9cfc50af4c',1,'uel_pipeline']]], - ['collection_460',['collection',['../structuel__iterator.html#a37bae427d28c271a3e9fbdc0c3a70b8d',1,'uel_iterator']]], - ['condition_5fvar_461',['condition_var',['../structevent_1_1uel__event__detail_1_1uel__event__observer.html#ac17e9951df24dfb12fa6a7824f65c311',1,'event::uel_event_detail::uel_event_observer']]], - ['config_462',['config',['../structuel__module.html#a9b066ffb62e47bf3fac7e0d70623eb15',1,'uel_module']]], - ['constructor_463',['constructor',['../structuel__autopool.html#a7890d66a262f1c057598b5cf281df2c2',1,'uel_autopool']]], - ['context_464',['context',['../structuel__closure.html#ae22a9c4275f31ab9741ef42479ce59cf',1,'uel_closure']]], - ['count_465',['count',['../structuel__cqueue.html#a0ef8883068b2d0b6d37e03cd33c46628',1,'uel_cqueue::count()'],['../structuel__llist.html#abd8b53084233e30e2dd36e1e2e7538f0',1,'uel_llist::count()'],['../structuel__pipeline.html#a6b52ff1fecb520e604f0b167e9c85a46',1,'uel_pipeline::count()']]] -]; diff --git a/docs/html/search/variables_3.html b/docs/html/search/variables_3.html deleted file mode 100644 index 19a31fc..0000000 --- a/docs/html/search/variables_3.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/variables_3.js b/docs/html/search/variables_3.js deleted file mode 100644 index 69f7c03..0000000 --- a/docs/html/search/variables_3.js +++ /dev/null @@ -1,7 +0,0 @@ -var searchData= -[ - ['destination_466',['destination',['../structuel__func__mapper.html#a847f834606bbc994068aaa93ed705e3c',1,'uel_func_mapper']]], - ['destructor_467',['destructor',['../structuel__autopool.html#a34dff758685ceefd0227aaf98eb66318',1,'uel_autopool']]], - ['detail_468',['detail',['../structevent.html#abcda7218789a4eac49e099cd895b042a',1,'event']]], - ['due_5ftime_469',['due_time',['../structevent_1_1uel__event__detail_1_1uel__event__timer.html#aded9e4913a031f9a4cc62ae362406b11',1,'event::uel_event_detail::uel_event_timer']]] -]; diff --git a/docs/html/search/variables_4.html b/docs/html/search/variables_4.html deleted file mode 100644 index bdc37be..0000000 --- a/docs/html/search/variables_4.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/variables_4.js b/docs/html/search/variables_4.js deleted file mode 100644 index 24fb041..0000000 --- a/docs/html/search/variables_4.js +++ /dev/null @@ -1,9 +0,0 @@ -var searchData= -[ - ['event_5floop_470',['event_loop',['../structuel__application.html#a206cef9bc1164781d91a883a38b0f0d9',1,'uel_application']]], - ['event_5fpool_471',['event_pool',['../structsyspools.html#ade1008e5647b9da5d4497d1d3dceadf1',1,'syspools']]], - ['event_5fpool_5fbuffer_472',['event_pool_buffer',['../structsyspools.html#a1a9c8bec00f4b19a1cea2d220860b89c',1,'syspools']]], - ['event_5fpool_5fqueue_5fbuffer_473',['event_pool_queue_buffer',['../structsyspools.html#ab54b76b022a0bff944791ca2ed3e157a',1,'syspools']]], - ['event_5fqueue_474',['event_queue',['../structsysqueues.html#a8ee3a87dc51095191300b5e90658d690',1,'sysqueues']]], - ['event_5fqueue_5fbuffer_475',['event_queue_buffer',['../structsysqueues.html#ae98fcac9a2822f2b2394a4c044f148a9',1,'sysqueues']]] -]; diff --git a/docs/html/search/variables_5.html b/docs/html/search/variables_5.html deleted file mode 100644 index 6aa2249..0000000 --- a/docs/html/search/variables_5.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/variables_5.js b/docs/html/search/variables_5.js deleted file mode 100644 index e1d8260..0000000 --- a/docs/html/search/variables_5.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['first_5fsegment_476',['first_segment',['../structuel__promise.html#a6f892488ff6d7f0a6b90b128306c8498',1,'uel_promise']]], - ['function_477',['function',['../structuel__closure.html#a53af2a72baa02fe3d0b18e20aff59a66',1,'uel_closure']]] -]; diff --git a/docs/html/search/variables_6.html b/docs/html/search/variables_6.html deleted file mode 100644 index ce4a906..0000000 --- a/docs/html/search/variables_6.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/variables_6.js b/docs/html/search/variables_6.js deleted file mode 100644 index 5e3c7c3..0000000 --- a/docs/html/search/variables_6.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['head_478',['head',['../structuel__llist.html#ab2e05ae8e0b0d0193011f8e5a4f903b6',1,'uel_llist']]] -]; diff --git a/docs/html/search/variables_7.html b/docs/html/search/variables_7.html deleted file mode 100644 index 39ffd47..0000000 --- a/docs/html/search/variables_7.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/variables_7.js b/docs/html/search/variables_7.js deleted file mode 100644 index db4500e..0000000 --- a/docs/html/search/variables_7.js +++ /dev/null @@ -1,8 +0,0 @@ -var searchData= -[ - ['if_5ffalse_479',['if_false',['../structuel__conditional.html#adb02d4c97ad9486edfb43dcb44ca2577',1,'uel_conditional']]], - ['if_5ftrue_480',['if_true',['../structuel__conditional.html#a49681bebb19750fea3e0ddcdc2e41ea9',1,'uel_conditional']]], - ['item_5fcount_481',['item_count',['../structuel__iterator__array.html#a514d0828182e9649d6285caddfb650c8',1,'uel_iterator_array']]], - ['item_5fsize_482',['item_size',['../structuel__iterator__array.html#a65622bdc18897601b6bc5da70ea44f09',1,'uel_iterator_array']]], - ['iterator_483',['iterator',['../structuel__func__mapper.html#a435db29ac7596f5b8c3f5c5735a2517f',1,'uel_func_mapper']]] -]; diff --git a/docs/html/search/variables_8.html b/docs/html/search/variables_8.html deleted file mode 100644 index 37a2edd..0000000 --- a/docs/html/search/variables_8.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/variables_8.js b/docs/html/search/variables_8.js deleted file mode 100644 index a18e684..0000000 --- a/docs/html/search/variables_8.js +++ /dev/null @@ -1,12 +0,0 @@ -var searchData= -[ - ['last_5fsegment_484',['last_segment',['../structuel__promise.html#a18d4ef955a1110e9182d7fea5779a147',1,'uel_promise']]], - ['last_5fvalue_485',['last_value',['../structevent_1_1uel__event__detail_1_1uel__event__observer.html#a79d55d944dc3a1b83c8b09bb88ebb7ce',1,'event::uel_event_detail::uel_event_observer']]], - ['launch_486',['launch',['../structuel__module.html#a5a45b6478c665841c477f57386785cd4',1,'uel_module']]], - ['limit_487',['limit',['../structuel__func__mapper.html#abfb2f5ced405ae371069abfd131a1895',1,'uel_func_mapper']]], - ['listener_488',['listener',['../unionevent_1_1uel__event__detail.html#a0be1ff74c4b46a39fb4a6dd320a9eb89',1,'event::uel_event_detail']]], - ['listeners_489',['listeners',['../structevent_1_1uel__event__detail_1_1uel__event__signal.html#ab003ff58199d9d50fa51b17532d75895',1,'event::uel_event_detail::uel_event_signal']]], - ['llist_5fnode_5fpool_490',['llist_node_pool',['../structsyspools.html#a8a333444479f17163fe541f84f88d8ce',1,'syspools']]], - ['llist_5fnode_5fpool_5fbuffer_491',['llist_node_pool_buffer',['../structsyspools.html#ab4b8e76d74b86c933227779f6dac2779',1,'syspools']]], - ['llist_5fnode_5fpool_5fqueue_5fbuffer_492',['llist_node_pool_queue_buffer',['../structsyspools.html#ae6d43157b64e89395ddf2ca93150c2de',1,'syspools']]] -]; diff --git a/docs/html/search/variables_9.html b/docs/html/search/variables_9.html deleted file mode 100644 index 21e5a4f..0000000 --- a/docs/html/search/variables_9.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/variables_9.js b/docs/html/search/variables_9.js deleted file mode 100644 index e72805e..0000000 --- a/docs/html/search/variables_9.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['mask_493',['mask',['../structuel__cqueue.html#a3f0a994df09bb73f3545024a857dca78',1,'uel_cqueue']]] -]; diff --git a/docs/html/search/variables_a.html b/docs/html/search/variables_a.html deleted file mode 100644 index 1f65055..0000000 --- a/docs/html/search/variables_a.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/variables_a.js b/docs/html/search/variables_a.js deleted file mode 100644 index ee00c07..0000000 --- a/docs/html/search/variables_a.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['next_494',['next',['../structuel__iterator.html#a034411056043f9316d2b7458c2bcfdc3',1,'uel_iterator::next()'],['../structuel__llist__node.html#a7976a89a4700768e540bf5b164f2dc68',1,'uel_llist_node::next()'],['../structuel__promise__segment.html#aa2c791377649da1fa8bcfb73beff2b48',1,'uel_promise_segment::next()']]] -]; diff --git a/docs/html/search/variables_b.html b/docs/html/search/variables_b.html deleted file mode 100644 index c02d066..0000000 --- a/docs/html/search/variables_b.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/variables_b.js b/docs/html/search/variables_b.js deleted file mode 100644 index 2eeddea..0000000 --- a/docs/html/search/variables_b.js +++ /dev/null @@ -1,6 +0,0 @@ -var searchData= -[ - ['object_495',['object',['../structuel__autoptr.html#a215d58b3f6c7b953b0c60e8963252535',1,'uel_autoptr']]], - ['observer_496',['observer',['../unionevent_1_1uel__event__detail.html#a072f8eee18648e4fb7fc180043b65eac',1,'event::uel_event_detail']]], - ['observers_497',['observers',['../structuel__evloop.html#ac91617cd57a61785f2feb0748039836c',1,'uel_evloop']]] -]; diff --git a/docs/html/search/variables_c.html b/docs/html/search/variables_c.html deleted file mode 100644 index 4b866c6..0000000 --- a/docs/html/search/variables_c.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/variables_c.js b/docs/html/search/variables_c.js deleted file mode 100644 index b890cac..0000000 --- a/docs/html/search/variables_c.js +++ /dev/null @@ -1,6 +0,0 @@ -var searchData= -[ - ['pause_5flist_498',['pause_list',['../structuel__scheduler.html#abcdd34ae1b4f2889ce0e301bc1f52826',1,'uel_scheduler']]], - ['pools_499',['pools',['../structuel__application.html#af74c95c7a5b2c751e83a3bb6a5404e99',1,'uel_application::pools()'],['../structuel__evloop.html#a47a9ebe4361677bce4f550f3d08b74bb',1,'uel_evloop::pools()'],['../structuel__scheduler.html#a599ff398356901589bed5930a77523c3',1,'uel_scheduler::pools()'],['../structuel__signal__relay.html#af0cc9622120868903e43eda29518433b',1,'uel_signal_relay::pools()']]], - ['promise_5fpool_500',['promise_pool',['../structuel__promise__store.html#acde6648fc7bed2bbbdac7df5fa0059f7',1,'uel_promise_store']]] -]; diff --git a/docs/html/search/variables_d.html b/docs/html/search/variables_d.html deleted file mode 100644 index 84d878b..0000000 --- a/docs/html/search/variables_d.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/variables_d.js b/docs/html/search/variables_d.js deleted file mode 100644 index 4748627..0000000 --- a/docs/html/search/variables_d.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['queue_501',['queue',['../structuel__objpool.html#a36c2a4bcb0eda229680daa4a03960506',1,'uel_objpool']]], - ['queues_502',['queues',['../structuel__application.html#a461dd6893eb70ee86bac7c43a9a86578',1,'uel_application::queues()'],['../structuel__evloop.html#aec967394710dd0b4b5184a8fd02d61a5',1,'uel_evloop::queues()'],['../structuel__scheduler.html#a962da3ed7102999d7379d2d26599160d',1,'uel_scheduler::queues()'],['../structuel__signal__relay.html#ae9438f0506aa721cbf56e917f58e0390',1,'uel_signal_relay::queues()']]] -]; diff --git a/docs/html/search/variables_e.html b/docs/html/search/variables_e.html deleted file mode 100644 index b0d9b7b..0000000 --- a/docs/html/search/variables_e.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/variables_e.js b/docs/html/search/variables_e.js deleted file mode 100644 index 45c2e06..0000000 --- a/docs/html/search/variables_e.js +++ /dev/null @@ -1,11 +0,0 @@ -var searchData= -[ - ['registry_503',['registry',['../structuel__application.html#aa02469024d8619255c81f6aace13e36e',1,'uel_application']]], - ['registry_5fsize_504',['registry_size',['../structuel__application.html#a5f7f83e74289e75c9e54b26e67bae14d',1,'uel_application']]], - ['reject_505',['reject',['../structuel__promise__segment.html#af38e4bf5f784ba283e91657b7b483c22',1,'uel_promise_segment']]], - ['relay_506',['relay',['../structuel__application.html#a5f1ffb5e716efc10ffd63968098ce2eb',1,'uel_application']]], - ['relay_5fbuffer_507',['relay_buffer',['../structuel__application.html#a4dc1aab92e88e5776d1013b4eb35ec5e',1,'uel_application']]], - ['repeating_508',['repeating',['../structevent.html#a67fa1b9a469d09599d2931769862d07b',1,'event']]], - ['resolve_509',['resolve',['../structuel__promise__segment.html#acd843866b15e8f0b035189404d002044',1,'uel_promise_segment']]], - ['run_5fscheduler_510',['run_scheduler',['../structuel__application.html#ad66b5adaa8603cec1f8072d43cc582f5',1,'uel_application']]] -]; diff --git a/docs/html/search/variables_f.html b/docs/html/search/variables_f.html deleted file mode 100644 index a708dbf..0000000 --- a/docs/html/search/variables_f.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/variables_f.js b/docs/html/search/variables_f.js deleted file mode 100644 index 5cc42f0..0000000 --- a/docs/html/search/variables_f.js +++ /dev/null @@ -1,13 +0,0 @@ -var searchData= -[ - ['schedule_5fqueue_511',['schedule_queue',['../structsysqueues.html#a92e5df8975b6c6b1aa7f79df54da8565',1,'sysqueues']]], - ['schedule_5fqueue_5fbuffer_512',['schedule_queue_buffer',['../structsysqueues.html#a3f90eebf85af0e239358c276ea741917',1,'sysqueues']]], - ['scheduler_513',['scheduler',['../structuel__application.html#a977b88c48d61a8688773b062f74fc78c',1,'uel_application']]], - ['segment_5fpool_514',['segment_pool',['../structuel__promise__store.html#ae08a8b8b4a72f9e1d8cfb4d1c344317d',1,'uel_promise_store']]], - ['signal_515',['signal',['../unionevent_1_1uel__event__detail.html#a82ba97ed6ebbb9a86cecde4d0c48e4fc',1,'event::uel_event_detail']]], - ['signal_5fvector_516',['signal_vector',['../structuel__signal__relay.html#a264ee9199e913c30ec6487d258093324',1,'uel_signal_relay']]], - ['size_517',['size',['../structuel__cqueue.html#ad424eefbf635da1957a7c25a6b390a57',1,'uel_cqueue']]], - ['source_518',['source',['../structuel__autoptr.html#a32f472b4cef00ebc64db35493ac269d9',1,'uel_autoptr::source()'],['../structuel__promise.html#a2f753bbc2fcd30adcafac5de640143f5',1,'uel_promise::source()']]], - ['state_519',['state',['../structuel__promise.html#a678870a0975db700de0bbcb5d102aa4e',1,'uel_promise']]], - ['status_520',['status',['../structevent_1_1uel__event__detail_1_1uel__event__timer.html#a38f12f5dce7b8ef363fd5c8a786d3390',1,'event::uel_event_detail::uel_event_timer']]] -]; diff --git a/docs/html/signal_8h.html b/docs/html/signal_8h.html deleted file mode 100644 index ac2c58f..0000000 --- a/docs/html/signal_8h.html +++ /dev/null @@ -1,492 +0,0 @@ - - - - - - - -µEvLoop: include/uevloop/system/signal.h File Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    µEvLoop -
    -
    A fast and lightweight event loop aimed at embedded platforms in C99.
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    - -
    -
    signal.h File Reference
    -
    -
    - -

    Defines signals and relays, structures used to communicate asynchronously between distant parts of the application. -More...

    -
    -Include dependency graph for signal.h:
    -
    -
    - - - - - - - - - - - - -
    -
    -This graph shows which files directly or indirectly include this file:
    -
    -
    - - - - -
    -
    -

    Go to the source code of this file.

    - - - - - -

    -Data Structures

    struct  uel_signal_relay_t
     Contains a signal vector and operates on in. More...
     
    - - - - - - -

    -Typedefs

    typedef uintptr_t uel_signal_t
     
    -typedef struct uel_event_listener * uel_signal_listener_t
     Defines a reference type suitable to manipulate the actual listener event's context.
     
    - - - - - - - - - - - - - - - - - - - - - - -

    -Functions

    void uel_signal_relay_init (uel_signal_relay_t *relay, uel_syspools_t *pools, uel_sysqueues_t *queues, uel_llist_t *buffer, uintptr_t width)
     Initialises a signal relay. More...
     
    uel_signal_listener_t uel_signal_listen (uel_signal_t signal, uel_signal_relay_t *relay, uel_closure_t *closure)
     Attaches a listener closure to some signal at a particular relay. More...
     
    uel_signal_listener_t uel_signal_listen_once (uel_signal_t signal, uel_signal_relay_t *relay, uel_closure_t *closure)
     Attaches a listener closure to some signal at a particular relay. The listener closure will be invoked only once. More...
     
    void uel_signal_unlisten (uel_signal_listener_t listener)
     Marks a signal listener as expired. When its corresponding signal is emitted, this listener's closure will not be invoked and the listener will be destroyed. More...
     
    void uel_signal_emit (uel_signal_t signal, uel_signal_relay_t *relay, void *params)
     Emits a signal at the supplied relay. Any closure listening to this signal will be asynchronously invoked. More...
     
    uel_signal_listener_t uel_signal_resolve_promise (uel_signal_t signal, uel_signal_relay_t *relay, uel_promise_t *promise)
     Attaches a non-repeating listener that resolves the provided promise upon emission. More...
     
    uel_signal_listener_t uel_signal_reject_promise (uel_signal_t signal, uel_signal_relay_t *relay, uel_promise_t *promise)
     Attaches a non-repeating listener that rejects the provided promise upon emission. More...
     
    -

    Detailed Description

    -

    Defines signals and relays, structures used to communicate asynchronously between distant parts of the application.

    -

    Typedef Documentation

    - -

    ◆ uel_signal_t

    - -
    -
    - - - - -
    uel_signal_t
    -
    -

    Any signal is defined as an unsigned integer type. This means that any signal type is only valid within the scope defined by the relay designed to respond to said signal.

    - -
    -
    -

    Function Documentation

    - -

    ◆ uel_signal_emit()

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void uel_signal_emit (uel_signal_t signal,
    uel_signal_relay_t * relay,
    void * params 
    )
    -
    - -

    Emits a signal at the supplied relay. Any closure listening to this signal will be asynchronously invoked.

    -
    Parameters
    - - - - -
    signalThe signal to be emitted
    relayThe relay where the signal is registered
    paramsThe parameters supplied to the listener's closure when it is invoked.
    -
    -
    - -
    -
    - -

    ◆ uel_signal_listen()

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    uel_signal_listener_t uel_signal_listen (uel_signal_t signal,
    uel_signal_relay_t * relay,
    uel_closure_t * closure 
    )
    -
    - -

    Attaches a listener closure to some signal at a particular relay.

    -
    Parameters
    - - - - -
    signalThe signal to be listened for
    relayThe relay where the listener will be registered
    closureThe closure to be invoked when the signal is emitted. The closure will be invoked with whatever parameters are supplied during emission.
    -
    -
    -
    Returns
    Returns a listener that references this particular operation
    - -
    -
    - -

    ◆ uel_signal_listen_once()

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    uel_signal_listener_t uel_signal_listen_once (uel_signal_t signal,
    uel_signal_relay_t * relay,
    uel_closure_t * closure 
    )
    -
    - -

    Attaches a listener closure to some signal at a particular relay. The listener closure will be invoked only once.

    -
    Parameters
    - - - - -
    signalThe signal to be listened for
    relayThe relay where the listener will be registered
    closureThe closure to be invoked when the signal is emitted. The closure will be invoked with whatever parameters are supplied during emission.
    -
    -
    -
    Returns
    Returns a listener that references this particular operation
    - -
    -
    - -

    ◆ uel_signal_reject_promise()

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    uel_signal_listener_t uel_signal_reject_promise (uel_signal_t signal,
    uel_signal_relay_t * relay,
    uel_promise_t * promise 
    )
    -
    - -

    Attaches a non-repeating listener that rejects the provided promise upon emission.

    -
    Parameters
    - - - - -
    signalThe signal to be listened for
    relayThe relay where the signal is registered
    promiseThe promise to be rejected upon signal emission
    -
    -
    -
    Returns
    The listener associated with this operation
    - -
    -
    - -

    ◆ uel_signal_relay_init()

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    void uel_signal_relay_init (uel_signal_relay_t * relay,
    uel_syspools_t * pools,
    uel_sysqueues_t * queues,
    uel_llist_t * buffer,
    uintptr_t width 
    )
    -
    - -

    Initialises a signal relay.

    -
    Parameters
    - - - - - - -
    relayThe signal relay object to be initialised
    poolsThe system's internal pools
    queuesThe system's internal queues
    bufferThe buffer that will be used to store listeners registered at this relay. Must be the number of signals bound to this relay wide.
    widthThe number of signals bound to this relay.
    -
    -
    - -
    -
    - -

    ◆ uel_signal_resolve_promise()

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    uel_signal_listener_t uel_signal_resolve_promise (uel_signal_t signal,
    uel_signal_relay_t * relay,
    uel_promise_t * promise 
    )
    -
    - -

    Attaches a non-repeating listener that resolves the provided promise upon emission.

    -
    Parameters
    - - - - -
    signalThe signal to be listened for
    relayThe relay where the signal is registered
    promiseThe promise to be resolved upon signal emission
    -
    -
    -
    Returns
    The listener associated with this operation
    - -
    -
    - -

    ◆ uel_signal_unlisten()

    - -
    -
    - - - - - - - - -
    void uel_signal_unlisten (uel_signal_listener_t listener)
    -
    - -

    Marks a signal listener as expired. When its corresponding signal is emitted, this listener's closure will not be invoked and the listener will be destroyed.

    -
      -
    • Parameters
      - - -
      listenerThe listener that identifies the listen operation to be undone
      -
      -
      -
    • -
    - -
    -
    -
    - - - - diff --git a/docs/html/signal_8h__dep__incl.map b/docs/html/signal_8h__dep__incl.map deleted file mode 100644 index 7d9123d..0000000 --- a/docs/html/signal_8h__dep__incl.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/docs/html/signal_8h__dep__incl.md5 b/docs/html/signal_8h__dep__incl.md5 deleted file mode 100644 index 7b22c30..0000000 --- a/docs/html/signal_8h__dep__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -55a842d5522776eade431677134833be \ No newline at end of file diff --git a/docs/html/signal_8h__dep__incl.png b/docs/html/signal_8h__dep__incl.png deleted file mode 100644 index 88e69b5..0000000 Binary files a/docs/html/signal_8h__dep__incl.png and /dev/null differ diff --git a/docs/html/signal_8h__incl.map b/docs/html/signal_8h__incl.map deleted file mode 100644 index 2becd3c..0000000 --- a/docs/html/signal_8h__incl.map +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - diff --git a/docs/html/signal_8h__incl.md5 b/docs/html/signal_8h__incl.md5 deleted file mode 100644 index 8442ba3..0000000 --- a/docs/html/signal_8h__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -89f0d3611c0aae40ce6e7e8ecdf592ce \ No newline at end of file diff --git a/docs/html/signal_8h__incl.png b/docs/html/signal_8h__incl.png deleted file mode 100644 index 96a73fd..0000000 Binary files a/docs/html/signal_8h__incl.png and /dev/null differ diff --git a/docs/html/signal_8h_source.html b/docs/html/signal_8h_source.html deleted file mode 100644 index da39eda..0000000 --- a/docs/html/signal_8h_source.html +++ /dev/null @@ -1,161 +0,0 @@ - - - - - - - -µEvLoop: include/uevloop/system/signal.h Source File - - - - - - - - - -
    -
    - - - - - - -
    -
    µEvLoop -
    -
    A fast and lightweight event loop aimed at embedded platforms in C99.
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    -
    -
    signal.h
    -
    -
    -Go to the documentation of this file.
    1 
    -
    6 #ifndef UEL_SIGNAL_H
    -
    7 #define UEL_SIGNAL_H
    -
    8 
    - -
    10 #include "uevloop/utils/closure.h"
    -
    11 #include "uevloop/utils/promise.h"
    - - -
    14 #include "uevloop/system/event.h"
    -
    15 
    -
    22 typedef uintptr_t uel_signal_t;
    -
    23 
    -
    27 typedef struct uel_event_listener *uel_signal_listener_t;
    -
    28 
    -
    39 typedef struct uel_signal_relay uel_signal_relay_t;
    - -
    43  uel_llist_t *signal_vector;
    -
    46  uel_sysqueues_t *queues;
    -
    48  uel_syspools_t *pools;
    -
    50  uintptr_t width;
    -
    51 };
    -
    52 
    - -
    63  uel_signal_relay_t *relay,
    -
    64  uel_syspools_t *pools,
    -
    65  uel_sysqueues_t *queues,
    -
    66  uel_llist_t *buffer,
    -
    67  uintptr_t width
    -
    68 );
    -
    69 
    - -
    79  uel_signal_t signal,
    -
    80  uel_signal_relay_t *relay,
    -
    81  uel_closure_t *closure
    -
    82 );
    -
    83 
    - -
    94  uel_signal_t signal,
    -
    95  uel_signal_relay_t *relay,
    -
    96  uel_closure_t *closure
    -
    97 );
    -
    98 
    - -
    106 
    -
    115 void uel_signal_emit(uel_signal_t signal, uel_signal_relay_t *relay, void *params);
    -
    116 
    - -
    126  uel_signal_t signal,
    -
    127  uel_signal_relay_t *relay,
    -
    128  uel_promise_t *promise
    -
    129 );
    -
    130 
    - -
    140  uel_signal_t signal,
    -
    141  uel_signal_relay_t *relay,
    -
    142  uel_promise_t *promise
    -
    143 );
    -
    144 
    -
    145 #endif /* end of include guard: UEL_SIGNAL_H */
    -
    -
    uel_signal_listener_t uel_signal_resolve_promise(uel_signal_t signal, uel_signal_relay_t *relay, uel_promise_t *promise)
    Attaches a non-repeating listener that resolves the provided promise upon emission.
    -
    void uel_signal_emit(uel_signal_t signal, uel_signal_relay_t *relay, void *params)
    Emits a signal at the supplied relay. Any closure listening to this signal will be asynchronously inv...
    -
    uintptr_t uel_signal_t
    Definition: signal.h:22
    -
    uel_signal_listener_t uel_signal_reject_promise(uel_signal_t signal, uel_signal_relay_t *relay, uel_promise_t *promise)
    Attaches a non-repeating listener that rejects the provided promise upon emission.
    -
    Defines a simple implementation of linked lists and functions to manipulate it.
    -
    uel_syspools_t * pools
    A quick reference to the system's internal pools.
    Definition: signal.h:48
    -
    Defines closures, objects that bind functions to creating and calling contexts.
    -
    uel_sysqueues_t * queues
    Definition: signal.h:46
    -
    Contains a signal vector and operates on in.
    Definition: signal.h:40
    -
    Defines events and methods to configure events.
    -
    uel_signal_listener_t uel_signal_listen_once(uel_signal_t signal, uel_signal_relay_t *relay, uel_closure_t *closure)
    Attaches a listener closure to some signal at a particular relay. The listener closure will be invoke...
    -
    Contains definitions for promise stores, promises and functions to manipulate them.
    -
    uel_llist_t * signal_vector
    Definition: signal.h:43
    -
    uel_signal_listener_t uel_signal_listen(uel_signal_t signal, uel_signal_relay_t *relay, uel_closure_t *closure)
    Attaches a listener closure to some signal at a particular relay.
    -
    A container for the system's internal queues.
    -
    void uel_signal_unlisten(uel_signal_listener_t listener)
    Marks a signal listener as expired. When its corresponding signal is emitted, this listener's closure...
    -
    struct uel_event_listener * uel_signal_listener_t
    Defines a reference type suitable to manipulate the actual listener event's context.
    Definition: signal.h:27
    -
    void uel_signal_relay_init(uel_signal_relay_t *relay, uel_syspools_t *pools, uel_sysqueues_t *queues, uel_llist_t *buffer, uintptr_t width)
    Initialises a signal relay.
    -
    uintptr_t width
    The number of signals registered at this relay.
    Definition: signal.h:50
    -
    A container for the system's internal pools.
    - - - - diff --git a/docs/html/splitbar.png b/docs/html/splitbar.png deleted file mode 100644 index fe895f2..0000000 Binary files a/docs/html/splitbar.png and /dev/null differ diff --git a/docs/html/structevent.html b/docs/html/structevent.html deleted file mode 100644 index 4e54d84..0000000 --- a/docs/html/structevent.html +++ /dev/null @@ -1,149 +0,0 @@ - - - - - - - -µEvLoop: uel_event_t Struct Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    µEvLoop -
    -
    A fast and lightweight event loop aimed at embedded platforms in C99.
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    - -
    -
    uel_event_t Struct Reference
    -
    -
    - -

    Events are special messages passed around the core. They represent tasks to be run at some point by the system. - More...

    -
    -Collaboration diagram for uel_event_t:
    -
    -
    Collaboration graph
    - - - - - - - - - - - - - - - - - -
    [legend]
    - - - - -

    -Data Structures

    union  uel_event_detail
     
    - - - - - - - - - - - - - - - - -

    -Data Fields

    -uel_event_type_t type
     The type of the event, as defined by uel_event_type_t
     
    -uel_closure_t closure
     The closure to be invoked a.k.a. the action to be run.
     
    -void * value
     The value the closure should be invoked with.
     
    -bool repeating
     Marks whether the event should be discarded after processing.
     
    -union event::uel_event_detail detail
     Represents speciffic detail on a event depending on its type.
     
    -

    Detailed Description

    -

    Events are special messages passed around the core. They represent tasks to be run at some point by the system.

    -

    Events are bound to information on how and when they should be invoked. There are five types of events:

    -
      -
    • UEL_CLOSURE_EVENT: lifeless wrappers to closures.
    • -
    • UEL_TIMER_EVENT: contains scheduling information associated with some closure
    • -
    • UEL_SIGNAL_EVENT: contains information on the emission of a signal
    • -
    • UEL_SIGNAL_LISTENER_EVENT: represent a single listening operation
    • -
    • UEL_OBSERVER_EVENT: represents a variable being observer by the event loop
    • -
    -

    Closure and timer events can be recurring, in which case they won't be discarded after processing by the event loop.

    -

    Signal events are always discarded by the event loop. Signal listeners are never meant to be sent there. In their case, the repeating flag determines whether the signal should be able to fire multiple times or just once.

    -

    The documentation for this struct was generated from the following file: -
    - - - - diff --git a/docs/html/structevent_1_1uel__event__detail_1_1uel__event__listener.html b/docs/html/structevent_1_1uel__event__detail_1_1uel__event__listener.html deleted file mode 100644 index 7f149f4..0000000 --- a/docs/html/structevent_1_1uel__event__detail_1_1uel__event__listener.html +++ /dev/null @@ -1,124 +0,0 @@ - - - - - - - -µEvLoop: uel_event_t::uel_event_detail::uel_event_listener Struct Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    µEvLoop -
    -
    A fast and lightweight event loop aimed at embedded platforms in C99.
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    - -
    -
    uel_event_t::uel_event_detail::uel_event_listener Struct Reference
    -
    -
    - -

    Contains the context of a particular signal listener. - More...

    - -

    #include <event.h>

    -
    -Collaboration diagram for uel_event_t::uel_event_detail::uel_event_listener:
    -
    -
    Collaboration graph
    - - - - -
    [legend]
    - - - - -

    -Data Fields

    bool unlistened
     
    -

    Detailed Description

    -

    Contains the context of a particular signal listener.

    -

    Field Documentation

    - -

    ◆ unlistened

    - -
    -
    - - - - -
    bool uel_event_t::uel_event_detail::uel_event_listener::unlistened
    -
    -

    When this flag is set, the event_loop will not run this event's closure. Additionally, the event will be destroyed.

    - -
    -
    -
    The documentation for this struct was generated from the following file: -
    - - - - diff --git a/docs/html/structevent_1_1uel__event__detail_1_1uel__event__listener__coll__graph.map b/docs/html/structevent_1_1uel__event__detail_1_1uel__event__listener__coll__graph.map deleted file mode 100644 index d4cfbc7..0000000 --- a/docs/html/structevent_1_1uel__event__detail_1_1uel__event__listener__coll__graph.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/docs/html/structevent_1_1uel__event__detail_1_1uel__event__listener__coll__graph.md5 b/docs/html/structevent_1_1uel__event__detail_1_1uel__event__listener__coll__graph.md5 deleted file mode 100644 index 7b58471..0000000 --- a/docs/html/structevent_1_1uel__event__detail_1_1uel__event__listener__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -07359ca3e14dff525078b4cc6a612a6a \ No newline at end of file diff --git a/docs/html/structevent_1_1uel__event__detail_1_1uel__event__listener__coll__graph.png b/docs/html/structevent_1_1uel__event__detail_1_1uel__event__listener__coll__graph.png deleted file mode 100644 index 3abd1a1..0000000 Binary files a/docs/html/structevent_1_1uel__event__detail_1_1uel__event__listener__coll__graph.png and /dev/null differ diff --git a/docs/html/structevent_1_1uel__event__detail_1_1uel__event__observer.html b/docs/html/structevent_1_1uel__event__detail_1_1uel__event__observer.html deleted file mode 100644 index 4cef98e..0000000 --- a/docs/html/structevent_1_1uel__event__detail_1_1uel__event__observer.html +++ /dev/null @@ -1,133 +0,0 @@ - - - - - - - -µEvLoop: uel_event_t::uel_event_detail::uel_event_observer Struct Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    µEvLoop -
    -
    A fast and lightweight event loop aimed at embedded platforms in C99.
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    - -
    -
    uel_event_t::uel_event_detail::uel_event_observer Struct Reference
    -
    -
    - -

    Contains the reference to an observer variable. - More...

    - -

    #include <event.h>

    -
    -Collaboration diagram for uel_event_t::uel_event_detail::uel_event_observer:
    -
    -
    Collaboration graph
    - - - - - -
    [legend]
    - - - - - - - - - - -

    -Data Fields

    -volatile uintptr_t * condition_var
     The address of a volatile value to observe.
     
    uintptr_t last_value
     
    -bool cancelled
     Whether this observer has been cancelled and is awaiting for destruction.
     
    -

    Detailed Description

    -

    Contains the reference to an observer variable.

    -

    Field Documentation

    - -

    ◆ last_value

    - -
    -
    - - - - -
    uintptr_t uel_event_t::uel_event_detail::uel_event_observer::last_value
    -
    -

    The last value read

    - -
    -
    -
    The documentation for this struct was generated from the following file: -
    - - - - diff --git a/docs/html/structevent_1_1uel__event__detail_1_1uel__event__observer__coll__graph.map b/docs/html/structevent_1_1uel__event__detail_1_1uel__event__observer__coll__graph.map deleted file mode 100644 index e79a83e..0000000 --- a/docs/html/structevent_1_1uel__event__detail_1_1uel__event__observer__coll__graph.map +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/docs/html/structevent_1_1uel__event__detail_1_1uel__event__observer__coll__graph.md5 b/docs/html/structevent_1_1uel__event__detail_1_1uel__event__observer__coll__graph.md5 deleted file mode 100644 index 730540c..0000000 --- a/docs/html/structevent_1_1uel__event__detail_1_1uel__event__observer__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -7a346f8375a1adc8d6e8becd9eac5864 \ No newline at end of file diff --git a/docs/html/structevent_1_1uel__event__detail_1_1uel__event__observer__coll__graph.png b/docs/html/structevent_1_1uel__event__detail_1_1uel__event__observer__coll__graph.png deleted file mode 100644 index 112f713..0000000 Binary files a/docs/html/structevent_1_1uel__event__detail_1_1uel__event__observer__coll__graph.png and /dev/null differ diff --git a/docs/html/structevent_1_1uel__event__detail_1_1uel__event__signal.html b/docs/html/structevent_1_1uel__event__detail_1_1uel__event__signal.html deleted file mode 100644 index a07972d..0000000 --- a/docs/html/structevent_1_1uel__event__detail_1_1uel__event__signal.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - - - -µEvLoop: uel_event_t::uel_event_detail::uel_event_signal Struct Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    µEvLoop -
    -
    A fast and lightweight event loop aimed at embedded platforms in C99.
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    - -
    -
    uel_event_t::uel_event_detail::uel_event_signal Struct Reference
    -
    -
    - -

    Contains information related to an emitted signal. - More...

    - -

    #include <event.h>

    -
    -Collaboration diagram for uel_event_t::uel_event_detail::uel_event_signal:
    -
    -
    Collaboration graph
    - - - - - -
    [legend]
    - - - - - - - - -

    -Data Fields

    -uintptr_t value
     The integer value that identifies this signal.
     
    -uel_llist_t * listeners
     Reference to the signal listeners.
     
    -

    Detailed Description

    -

    Contains information related to an emitted signal.

    -

    The documentation for this struct was generated from the following file: -
    - - - - diff --git a/docs/html/structevent_1_1uel__event__detail_1_1uel__event__signal__coll__graph.map b/docs/html/structevent_1_1uel__event__detail_1_1uel__event__signal__coll__graph.map deleted file mode 100644 index eaa5044..0000000 --- a/docs/html/structevent_1_1uel__event__detail_1_1uel__event__signal__coll__graph.map +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/docs/html/structevent_1_1uel__event__detail_1_1uel__event__signal__coll__graph.md5 b/docs/html/structevent_1_1uel__event__detail_1_1uel__event__signal__coll__graph.md5 deleted file mode 100644 index f6bdb61..0000000 --- a/docs/html/structevent_1_1uel__event__detail_1_1uel__event__signal__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -8130dcbe5dc62eb4e70365054663250f \ No newline at end of file diff --git a/docs/html/structevent_1_1uel__event__detail_1_1uel__event__signal__coll__graph.png b/docs/html/structevent_1_1uel__event__detail_1_1uel__event__signal__coll__graph.png deleted file mode 100644 index 091ef27..0000000 Binary files a/docs/html/structevent_1_1uel__event__detail_1_1uel__event__signal__coll__graph.png and /dev/null differ diff --git a/docs/html/structevent_1_1uel__event__detail_1_1uel__event__timer.html b/docs/html/structevent_1_1uel__event__detail_1_1uel__event__timer.html deleted file mode 100644 index 11c7eca..0000000 --- a/docs/html/structevent_1_1uel__event__detail_1_1uel__event__timer.html +++ /dev/null @@ -1,120 +0,0 @@ - - - - - - - -µEvLoop: uel_event_t::uel_event_detail::uel_event_timer Struct Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    µEvLoop -
    -
    A fast and lightweight event loop aimed at embedded platforms in C99.
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    - -
    -
    uel_event_t::uel_event_detail::uel_event_timer Struct Reference
    -
    -
    - -

    Contains information suitable for scheduling an event at the scheduler. - More...

    - -

    #include <event.h>

    -
    -Collaboration diagram for uel_event_t::uel_event_detail::uel_event_timer:
    -
    -
    Collaboration graph
    - - - - - - -
    [legend]
    - - - - - - - - - - - -

    -Data Fields

    -uint32_t due_time
     The value the system timer must be at when this event's closure should be invoked. This is a best effort value.
     
    -uint16_t timeout
     Holds the interval between two executions of the timer.
     
    -uel_event_timer_status_t status
     Current timer status.
     
    -

    Detailed Description

    -

    Contains information suitable for scheduling an event at the scheduler.

    -

    The documentation for this struct was generated from the following file: -
    - - - - diff --git a/docs/html/structevent_1_1uel__event__detail_1_1uel__event__timer__coll__graph.map b/docs/html/structevent_1_1uel__event__detail_1_1uel__event__timer__coll__graph.map deleted file mode 100644 index 540c440..0000000 --- a/docs/html/structevent_1_1uel__event__detail_1_1uel__event__timer__coll__graph.map +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/docs/html/structevent_1_1uel__event__detail_1_1uel__event__timer__coll__graph.md5 b/docs/html/structevent_1_1uel__event__detail_1_1uel__event__timer__coll__graph.md5 deleted file mode 100644 index 3831385..0000000 --- a/docs/html/structevent_1_1uel__event__detail_1_1uel__event__timer__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -503d112eba55590e204abd1b97cc4bbf \ No newline at end of file diff --git a/docs/html/structevent_1_1uel__event__detail_1_1uel__event__timer__coll__graph.png b/docs/html/structevent_1_1uel__event__detail_1_1uel__event__timer__coll__graph.png deleted file mode 100644 index 3fa8a33..0000000 Binary files a/docs/html/structevent_1_1uel__event__detail_1_1uel__event__timer__coll__graph.png and /dev/null differ diff --git a/docs/html/structevent__coll__graph.map b/docs/html/structevent__coll__graph.map deleted file mode 100644 index 5e7fd2f..0000000 --- a/docs/html/structevent__coll__graph.map +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - - - - - - - - - - diff --git a/docs/html/structevent__coll__graph.md5 b/docs/html/structevent__coll__graph.md5 deleted file mode 100644 index 35101c9..0000000 --- a/docs/html/structevent__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -d07f81fdb67acb725b580c5cae8dde1d \ No newline at end of file diff --git a/docs/html/structevent__coll__graph.png b/docs/html/structevent__coll__graph.png deleted file mode 100644 index cec2d8d..0000000 Binary files a/docs/html/structevent__coll__graph.png and /dev/null differ diff --git a/docs/html/structsyspools.html b/docs/html/structsyspools.html deleted file mode 100644 index f454661..0000000 --- a/docs/html/structsyspools.html +++ /dev/null @@ -1,128 +0,0 @@ - - - - - - - -µEvLoop: uel_syspools_t Struct Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    µEvLoop -
    -
    A fast and lightweight event loop aimed at embedded platforms in C99.
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    - -
    -
    uel_syspools_t Struct Reference
    -
    -
    - -

    A container for the system pools. - More...

    -
    -Collaboration diagram for uel_syspools_t:
    -
    -
    Collaboration graph
    - - - - - - - -
    [legend]
    - - - - - - - - - - - - - - - - - - - - -

    -Data Fields

    -uel_event_t event_pool_buffer [UEL_SYSPOOLS_EVENT_POOL_SIZE]
     The buffer used to store events in the event pool.
     
    -void * event_pool_queue_buffer [UEL_SYSPOOLS_EVENT_POOL_SIZE]
     The buffer used to store event pointers in the event pool queue.
     
    -uel_objpool_t event_pool
     The event pool object. Contains all the events used by the core.
     
    -uel_llist_node_t llist_node_pool_buffer [UEL_SYSPOOLS_LLIST_NODE_POOL_SIZE]
     The buffer used to store llist nodes in the llist node pool.
     
    -void * llist_node_pool_queue_buffer [UEL_SYSPOOLS_LLIST_NODE_POOL_SIZE]
     The budder used to store llist node pointers in the llist node pool queue.
     
    -uel_objpool_t llist_node_pool
     The llist node pool object. Contains all llist nodes used by the core.
     
    -

    Detailed Description

    -

    A container for the system pools.

    -

    The syspools object is meant as a container for the internal system pools. It is a safe interface to the pools, acquiring and releasing objects on demand.

    -

    The documentation for this struct was generated from the following file: -
    - - - - diff --git a/docs/html/structsyspools__coll__graph.map b/docs/html/structsyspools__coll__graph.map deleted file mode 100644 index dc4ade9..0000000 --- a/docs/html/structsyspools__coll__graph.map +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/docs/html/structsyspools__coll__graph.md5 b/docs/html/structsyspools__coll__graph.md5 deleted file mode 100644 index 17e49a8..0000000 --- a/docs/html/structsyspools__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -543b0027629887388e0da4164bed7fca \ No newline at end of file diff --git a/docs/html/structsyspools__coll__graph.png b/docs/html/structsyspools__coll__graph.png deleted file mode 100644 index f12b826..0000000 Binary files a/docs/html/structsyspools__coll__graph.png and /dev/null differ diff --git a/docs/html/structsysqueues.html b/docs/html/structsysqueues.html deleted file mode 100644 index 8b9db2f..0000000 --- a/docs/html/structsysqueues.html +++ /dev/null @@ -1,152 +0,0 @@ - - - - - - - -µEvLoop: uel_sysqueues_t Struct Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    µEvLoop -
    -
    A fast and lightweight event loop aimed at embedded platforms in C99.
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    - -
    -
    uel_sysqueues_t Struct Reference
    -
    -
    - -

    A container for the system's internal queues. - More...

    -
    -Collaboration diagram for uel_sysqueues_t:
    -
    -
    Collaboration graph
    - - - - - -
    [legend]
    - - - - - - - - - - - - - - -

    -Data Fields

    -void * event_queue_buffer [UEL_SYSQUEUES_EVENT_QUEUE_SIZE]
     The event queue buffer.
     
    uel_cqueue_t event_queue
     The application's event queue. More...
     
    -void * schedule_queue_buffer [UEL_SYSQUEUES_SCHEDULE_QUEUE_SIZE]
     The schedule queue buffer.
     
    uel_cqueue_t schedule_queue
     The application's schedule queue. More...
     
    -

    Detailed Description

    -

    A container for the system's internal queues.

    -

    This module conveniently declares and contains the object queues necessary for internal operation of the application.

    -

    It also encapsulate manipulation of shared memory in critical sections. All of its functions are safe, except for uel_sysqueues_init.

    -

    Field Documentation

    - -

    ◆ event_queue

    - -
    -
    - - - - -
    uel_cqueue_t uel_sysqueues_t::event_queue
    -
    - -

    The application's event queue.

    -

    Holds events ready to be processed on the next runloop.

    - -
    -
    - -

    ◆ schedule_queue

    - -
    -
    - - - - -
    uel_cqueue_t uel_sysqueues_t::schedule_queue
    -
    - -

    The application's schedule queue.

    -

    Hold events already processed by the runloop but fit for rescheduling at the scheduler.

    - -
    -
    -
    The documentation for this struct was generated from the following file: -
    - - - - diff --git a/docs/html/structsysqueues__coll__graph.map b/docs/html/structsysqueues__coll__graph.map deleted file mode 100644 index 2ae2b5a..0000000 --- a/docs/html/structsysqueues__coll__graph.map +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/docs/html/structsysqueues__coll__graph.md5 b/docs/html/structsysqueues__coll__graph.md5 deleted file mode 100644 index cce730a..0000000 --- a/docs/html/structsysqueues__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -2f1862db14e6dccc088d694a7562fc75 \ No newline at end of file diff --git a/docs/html/structsysqueues__coll__graph.png b/docs/html/structsysqueues__coll__graph.png deleted file mode 100644 index a78a1f2..0000000 Binary files a/docs/html/structsysqueues__coll__graph.png and /dev/null differ diff --git a/docs/html/structuel__application.html b/docs/html/structuel__application.html deleted file mode 100644 index 7682e4e..0000000 --- a/docs/html/structuel__application.html +++ /dev/null @@ -1,145 +0,0 @@ - - - - - - - -µEvLoop: uel_application_t Struct Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    µEvLoop -
    -
    A fast and lightweight event loop aimed at embedded platforms in C99.
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    - -
    -
    uel_application_t Struct Reference
    -
    -
    - -

    Top-level container for µEvLoop'd application. - More...

    -
    -Collaboration diagram for uel_application_t:
    -
    -
    Collaboration graph
    - - - - - - - - - - - - -
    [legend]
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Data Fields

    -uel_module_t ** registry
     The modules managed by this application.
     
    -size_t registry_size
     The number of modules managed by this application.
     
    -uel_syspools_t pools
     Holds the system pools: events and llist nodes.
     
    -uel_sysqueues_t queues
     Holds the system event queues.
     
    -uel_evloop_t event_loop
     The application's event loop.
     
    -uel_scheduer_t scheduler
     The applications's scheduler;.
     
    -uel_signal_relay_t relay
     Unused.
     
    -uel_llist_t relay_buffer [UEL_APP_EVENT_COUNT]
     Unused.
     
    -bool run_scheduler
     Marks when it's time to wake the scheduler.
     
    -

    Detailed Description

    -

    Top-level container for µEvLoop'd application.

    -

    The application module is not necessary, but it does facilitate creating and managing the state of a µEvLoop application. It contains all the system insternals and manages the scheduler and event loops queues automatically.

    -

    The documentation for this struct was generated from the following file: -
    - - - - diff --git a/docs/html/structuel__application__coll__graph.map b/docs/html/structuel__application__coll__graph.map deleted file mode 100644 index 3d31162..0000000 --- a/docs/html/structuel__application__coll__graph.map +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - diff --git a/docs/html/structuel__application__coll__graph.md5 b/docs/html/structuel__application__coll__graph.md5 deleted file mode 100644 index c07a1dc..0000000 --- a/docs/html/structuel__application__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -900f00f0e16cafca74139c9f275822ca \ No newline at end of file diff --git a/docs/html/structuel__application__coll__graph.png b/docs/html/structuel__application__coll__graph.png deleted file mode 100644 index f6f8372..0000000 Binary files a/docs/html/structuel__application__coll__graph.png and /dev/null differ diff --git a/docs/html/structuel__autopool.html b/docs/html/structuel__autopool.html deleted file mode 100644 index 7dcfc85..0000000 --- a/docs/html/structuel__autopool.html +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - - -µEvLoop: uel_autopool_t Struct Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    µEvLoop -
    -
    A fast and lightweight event loop aimed at embedded platforms in C99.
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    - -
    -
    uel_autopool_t Struct Reference
    -
    -
    - -

    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...

    -
    -Collaboration diagram for uel_autopool_t:
    -
    -
    Collaboration graph
    - - - - - -
    [legend]
    - - - - - - - - - - - -

    -Data Fields

    -uel_objpool_t autoptr_pool
     The object pool that holds autopointers.
     
    -uel_closure_t constructor
     The constructor closure.
     
    -uel_closure_t destructor
     The destructor closure.
     
    -

    Detailed Description

    -

    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.

    -

    The documentation for this struct was generated from the following file: -
    - - - - diff --git a/docs/html/structuel__autopool__coll__graph.map b/docs/html/structuel__autopool__coll__graph.map deleted file mode 100644 index 23bcd45..0000000 --- a/docs/html/structuel__autopool__coll__graph.map +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/docs/html/structuel__autopool__coll__graph.md5 b/docs/html/structuel__autopool__coll__graph.md5 deleted file mode 100644 index 6b2ab7e..0000000 --- a/docs/html/structuel__autopool__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -0cffaae5a7e84b37f60adf63e1cf4449 \ No newline at end of file diff --git a/docs/html/structuel__autopool__coll__graph.png b/docs/html/structuel__autopool__coll__graph.png deleted file mode 100644 index 7d04566..0000000 Binary files a/docs/html/structuel__autopool__coll__graph.png and /dev/null differ diff --git a/docs/html/structuel__autoptr.html b/docs/html/structuel__autoptr.html deleted file mode 100644 index 3bc17a4..0000000 --- a/docs/html/structuel__autoptr.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - - - -µEvLoop: uel_autoptr Struct Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    µEvLoop -
    -
    A fast and lightweight event loop aimed at embedded platforms in C99.
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    - -
    -
    uel_autoptr Struct Reference
    -
    -
    - -

    Automatic pointers are pointers wrapped by information of where they were issued. - More...

    - -

    #include <automatic-pool.h>

    -
    -Collaboration diagram for uel_autoptr:
    -
    -
    Collaboration graph
    - - - - - - - -
    [legend]
    - - - - - - - - -

    -Data Fields

    -void * object
     A pointer to the wrapped object.
     
    -struct uel_autopoolsource
     The pool where the autoptr object was issued.
     
    -

    Detailed Description

    -

    Automatic pointers are pointers wrapped by information of where they were issued.

    -

    Upon deallocation, an object wrapped by an autoptr is automatically returned to its original pool. Automatic pointers are meant to be pooled themselves.

    -

    The programmer can safely cast a uel_autoptr_t to a void * or a pointer to whatever type the wrapped object is.

    -

    The documentation for this struct was generated from the following file: -
    - - - - diff --git a/docs/html/structuel__autoptr__coll__graph.map b/docs/html/structuel__autoptr__coll__graph.map deleted file mode 100644 index be4180c..0000000 --- a/docs/html/structuel__autoptr__coll__graph.map +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/docs/html/structuel__autoptr__coll__graph.md5 b/docs/html/structuel__autoptr__coll__graph.md5 deleted file mode 100644 index 924b488..0000000 --- a/docs/html/structuel__autoptr__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -49aad00ddf46c9c838871f01df161d5b \ No newline at end of file diff --git a/docs/html/structuel__autoptr__coll__graph.png b/docs/html/structuel__autoptr__coll__graph.png deleted file mode 100644 index 9530bb5..0000000 Binary files a/docs/html/structuel__autoptr__coll__graph.png and /dev/null differ diff --git a/docs/html/structuel__closure.html b/docs/html/structuel__closure.html deleted file mode 100644 index 332b08f..0000000 --- a/docs/html/structuel__closure.html +++ /dev/null @@ -1,111 +0,0 @@ - - - - - - - -µEvLoop: uel_closure_t Struct Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    µEvLoop -
    -
    A fast and lightweight event loop aimed at embedded platforms in C99.
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    - -
    -
    uel_closure_t Struct Reference
    -
    -
    - -

    Defines a closure, a tuple <function, context, destructor> - More...

    -
    -Collaboration diagram for uel_closure_t:
    -
    -
    Collaboration graph
    - - - - - -
    [legend]
    - - - - - - - - -

    -Data Fields

    -uel_closure_function_t function
     The function to be run when the closure is invoked. Must take two pointers ar arguments, one for the context and one for closure parameters. Must return a void pointer.
     
    -void * context
     The context supplied to the closure durint creation. This context will be available during the function execution.
     
    -

    Detailed Description

    -

    Defines a closure, a tuple <function, context, destructor>

    -

    A closure is a data structure that binds some function to a predetermined context. When the function is run, this context will be available to the function body.

    -

    When invoking the closure, additional parameters may be passed along and will also be available to the function body. The function can also return a value that will be passed back by the uel_closure_invoke function.

    -

    The documentation for this struct was generated from the following file: -
    - - - - diff --git a/docs/html/structuel__closure__coll__graph.map b/docs/html/structuel__closure__coll__graph.map deleted file mode 100644 index 07d3c8f..0000000 --- a/docs/html/structuel__closure__coll__graph.map +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/docs/html/structuel__closure__coll__graph.md5 b/docs/html/structuel__closure__coll__graph.md5 deleted file mode 100644 index dd4e898..0000000 --- a/docs/html/structuel__closure__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -7c7f0ce0853771875e20de9352f83409 \ No newline at end of file diff --git a/docs/html/structuel__closure__coll__graph.png b/docs/html/structuel__closure__coll__graph.png deleted file mode 100644 index 0089e8c..0000000 Binary files a/docs/html/structuel__closure__coll__graph.png and /dev/null differ diff --git a/docs/html/structuel__conditional.html b/docs/html/structuel__conditional.html deleted file mode 100644 index 2b2af5c..0000000 --- a/docs/html/structuel__conditional.html +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - - -µEvLoop: uel_conditional_t Struct Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    µEvLoop -
    -
    A fast and lightweight event loop aimed at embedded platforms in C99.
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    - -
    -
    uel_conditional_t Struct Reference
    -
    -
    - -

    Conditionals are constructs that provide functional flow control. - More...

    -
    -Collaboration diagram for uel_conditional_t:
    -
    -
    Collaboration graph
    - - - - -
    [legend]
    - - - - - - - - - - - -

    -Data Fields

    -uel_closure_t test
     A closure that, based on its input, should return true or false.
     
    -uel_closure_t if_true
     The closure that will be invoked if the test closure returns true
     
    -uel_closure_t if_false
     The closure that will be invoked if the test closure returns false
     
    -

    Detailed Description

    -

    Conditionals are constructs that provide functional flow control.

    -

    A conditional is defined by a tuple <test, if_true, if_false> of closures. When applied to some input, this input is passed to the test closure. Based on its returned value, one of the other closures is invoked.

    -

    The documentation for this struct was generated from the following file: -
    - - - - diff --git a/docs/html/structuel__conditional__coll__graph.map b/docs/html/structuel__conditional__coll__graph.map deleted file mode 100644 index 0da3d82..0000000 --- a/docs/html/structuel__conditional__coll__graph.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/docs/html/structuel__conditional__coll__graph.md5 b/docs/html/structuel__conditional__coll__graph.md5 deleted file mode 100644 index 139b978..0000000 --- a/docs/html/structuel__conditional__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -375c4a3f7b1a3c5410efd119015b8515 \ No newline at end of file diff --git a/docs/html/structuel__conditional__coll__graph.png b/docs/html/structuel__conditional__coll__graph.png deleted file mode 100644 index c4262c9..0000000 Binary files a/docs/html/structuel__conditional__coll__graph.png and /dev/null differ diff --git a/docs/html/structuel__cqueue.html b/docs/html/structuel__cqueue.html deleted file mode 100644 index 585081b..0000000 --- a/docs/html/structuel__cqueue.html +++ /dev/null @@ -1,150 +0,0 @@ - - - - - - - -µEvLoop: uel_cqueue_t Struct Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    µEvLoop -
    -
    A fast and lightweight event loop aimed at embedded platforms in C99.
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    - -
    -
    uel_cqueue_t Struct Reference
    -
    -
    - -

    Defines a circular queue of void pointers. - More...

    -
    -Collaboration diagram for uel_cqueue_t:
    -
    -
    Collaboration graph
    - - - - - -
    [legend]
    - - - - - - - - - - - - - - - -

    -Data Fields

    -void ** buffer
     The buffer that will contain the enqueued values.
     
    -uintptr_t size
     The size of the queue. Must be a power of two.
     
    uintptr_t mask
     
    -uintptr_t tail
     The position that indicates where the oldest enqueued element is.
     
    uintptr_t count
     
    -

    Detailed Description

    -

    Defines a circular queue of void pointers.

    -

    The circular queue implementation provided is a fast and memory efficient FIFO data structure that holds void pointers.

    -

    Its capacity is required to be a power of two. This makes possible to use fast modulo-2 arithmetic when dealing with the queue indices.

    -

    Field Documentation

    - -

    ◆ count

    - -
    -
    - - - - -
    uintptr_t uel_cqueue_t::count
    -
    -

    The count of enqueued elements. New elements are put at (tail + count) % size.

    - -
    -
    - -

    ◆ mask

    - -
    -
    - - - - -
    uintptr_t uel_cqueue_t::mask
    -
    -

    The mask used to wrap the indices around the capacity of the queue when they are incremented during pushs/pops

    - -
    -
    -
    The documentation for this struct was generated from the following file: -
    - - - - diff --git a/docs/html/structuel__cqueue__coll__graph.map b/docs/html/structuel__cqueue__coll__graph.map deleted file mode 100644 index 1e962b0..0000000 --- a/docs/html/structuel__cqueue__coll__graph.map +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/docs/html/structuel__cqueue__coll__graph.md5 b/docs/html/structuel__cqueue__coll__graph.md5 deleted file mode 100644 index bf01c0c..0000000 --- a/docs/html/structuel__cqueue__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -890c7140b19c0eef71bc1827505e48f6 \ No newline at end of file diff --git a/docs/html/structuel__cqueue__coll__graph.png b/docs/html/structuel__cqueue__coll__graph.png deleted file mode 100644 index b2122e1..0000000 Binary files a/docs/html/structuel__cqueue__coll__graph.png and /dev/null differ diff --git a/docs/html/structuel__evloop.html b/docs/html/structuel__evloop.html deleted file mode 100644 index e89c0ff..0000000 --- a/docs/html/structuel__evloop.html +++ /dev/null @@ -1,118 +0,0 @@ - - - - - - - -µEvLoop: uel_evloop_t Struct Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    µEvLoop -
    -
    A fast and lightweight event loop aimed at embedded platforms in C99.
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    - -
    -
    uel_evloop_t Struct Reference
    -
    -
    - -

    The event loop object. - More...

    -
    -Collaboration diagram for uel_evloop_t:
    -
    -
    Collaboration graph
    - - - - - - -
    [legend]
    - - - - - - - - - - - -

    -Data Fields

    -uel_syspools_t * pools
     Reference to the system's pools.
     
    -uel_sysqueues_t * queues
     Reference to the system's queues.
     
    -uel_llist_t observers
     Stores references to values to be observed.
     
    -

    Detailed Description

    -

    The event loop object.

    -

    This object represents an event loop. It is operated primarily by the system internal queues:

      -
    1. The inbound event queue, which is the feeding point of the event loop.
    2. -
    3. The outbound schedule queue, which holds reusable timers already run.
    4. -
    -

    The documentation for this struct was generated from the following file: -
    - - - - diff --git a/docs/html/structuel__evloop__coll__graph.map b/docs/html/structuel__evloop__coll__graph.map deleted file mode 100644 index 61f28d3..0000000 --- a/docs/html/structuel__evloop__coll__graph.map +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/docs/html/structuel__evloop__coll__graph.md5 b/docs/html/structuel__evloop__coll__graph.md5 deleted file mode 100644 index db86e79..0000000 --- a/docs/html/structuel__evloop__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -2c976f6b381641d0288180db180fc4e6 \ No newline at end of file diff --git a/docs/html/structuel__evloop__coll__graph.png b/docs/html/structuel__evloop__coll__graph.png deleted file mode 100644 index fa6d352..0000000 Binary files a/docs/html/structuel__evloop__coll__graph.png and /dev/null differ diff --git a/docs/html/structuel__func__mapper.html b/docs/html/structuel__func__mapper.html deleted file mode 100644 index 906ec94..0000000 --- a/docs/html/structuel__func__mapper.html +++ /dev/null @@ -1,114 +0,0 @@ - - - - - - - -µEvLoop: uel_func_mapper_t Struct Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    µEvLoop -
    -
    A fast and lightweight event loop aimed at embedded platforms in C99.
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    - -
    -
    uel_func_mapper_t Struct Reference
    -
    -
    - -

    Maps elements of an iterator to an area of memory. Each element is assigned to a void pointer slot. - More...

    -
    -Collaboration diagram for uel_func_mapper_t:
    -
    -
    Collaboration graph
    - - - - - - -
    [legend]
    - - - - - - - - - - - -

    -Data Fields

    -uel_iterator_t * iterator
     The iterator that enumerates the elements to be mapped.
     
    -void ** destination
     The area of memory to where elements will be mapped.
     
    -size_t limit
     The maximum size of slots to be mapped to.
     
    -

    Detailed Description

    -

    Maps elements of an iterator to an area of memory. Each element is assigned to a void pointer slot.

    -

    The documentation for this struct was generated from the following file: -
    - - - - diff --git a/docs/html/structuel__func__mapper__coll__graph.map b/docs/html/structuel__func__mapper__coll__graph.map deleted file mode 100644 index d71fddb..0000000 --- a/docs/html/structuel__func__mapper__coll__graph.map +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/docs/html/structuel__func__mapper__coll__graph.md5 b/docs/html/structuel__func__mapper__coll__graph.md5 deleted file mode 100644 index d850eb8..0000000 --- a/docs/html/structuel__func__mapper__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -a6373462821e006b680d95dbbd3bdd43 \ No newline at end of file diff --git a/docs/html/structuel__func__mapper__coll__graph.png b/docs/html/structuel__func__mapper__coll__graph.png deleted file mode 100644 index 92eae82..0000000 Binary files a/docs/html/structuel__func__mapper__coll__graph.png and /dev/null differ diff --git a/docs/html/structuel__iterator.html b/docs/html/structuel__iterator.html deleted file mode 100644 index 939f018..0000000 --- a/docs/html/structuel__iterator.html +++ /dev/null @@ -1,129 +0,0 @@ - - - - - - - -µEvLoop: uel_iterator_t Struct Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    µEvLoop -
    -
    A fast and lightweight event loop aimed at embedded platforms in C99.
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    - -
    -
    uel_iterator_t Struct Reference
    -
    -
    - -

    Iterators are data structures that wrap arbitrary collections of data and define ways of enumerating them. - More...

    -
    -Collaboration diagram for uel_iterator_t:
    -
    -
    Collaboration graph
    - - - - - -
    [legend]
    - - - - - - - - -

    -Data Fields

    void *(* next )(uel_iterator_t *, void *)
     The iteration function assigned to this iterator type. More...
     
    -void * collection
     A reference to the collection being iterated.
     
    -

    Detailed Description

    -

    Iterators are data structures that wrap arbitrary collections of data and define ways of enumerating them.

    -

    This is an unspecialised structure that should be augumented with actual behaviour implementation.

    -

    In order to specialise it, create a struct that holds whatever state is meaningful to iteration and has a uel_iterator_t as its first member. Then, whenever needed, cast the iterator to your custom type.

    -

    Field Documentation

    - -

    ◆ next

    - -
    -
    - - - - -
    void*(* uel_iterator_t::next) (uel_iterator_t *, void *)
    -
    - -

    The iteration function assigned to this iterator type.

    -

    This is the actual implementation of the iteration algorithm. It takes a reference to the iterator and the last accessed element's address and returns a reference to the next element.

    -

    To resquest the first collection item, pass NULL as the last element parameter. When this function returns NULL, there are no more elements in the collection to be iterated over.

    - -
    -
    -
    The documentation for this struct was generated from the following file: -
    - - - - diff --git a/docs/html/structuel__iterator__array.html b/docs/html/structuel__iterator__array.html deleted file mode 100644 index fe85d3e..0000000 --- a/docs/html/structuel__iterator__array.html +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - - -µEvLoop: uel_iterator_array_t Struct Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    µEvLoop -
    -
    A fast and lightweight event loop aimed at embedded platforms in C99.
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    - -
    -
    uel_iterator_array_t Struct Reference
    -
    -
    - -

    A specialised iterator suitable for iterating over arrays of arbitrary data. - More...

    -
    -Collaboration diagram for uel_iterator_array_t:
    -
    -
    Collaboration graph
    - - - - - -
    [legend]
    - - - - - - - - - - - -

    -Data Fields

    -uel_iterator_t base
     The base iterator interface.
     
    -size_t item_count
     The number of elements in the array.
     
    -size_t item_size
     The size of each element in the array.
     
    -

    Detailed Description

    -

    A specialised iterator suitable for iterating over arrays of arbitrary data.

    -

    The documentation for this struct was generated from the following file: -
    - - - - diff --git a/docs/html/structuel__iterator__array__coll__graph.map b/docs/html/structuel__iterator__array__coll__graph.map deleted file mode 100644 index e362b53..0000000 --- a/docs/html/structuel__iterator__array__coll__graph.map +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/docs/html/structuel__iterator__array__coll__graph.md5 b/docs/html/structuel__iterator__array__coll__graph.md5 deleted file mode 100644 index 545f52f..0000000 --- a/docs/html/structuel__iterator__array__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -2180149a5adda8e95803573fae71813d \ No newline at end of file diff --git a/docs/html/structuel__iterator__array__coll__graph.png b/docs/html/structuel__iterator__array__coll__graph.png deleted file mode 100644 index 1e87a47..0000000 Binary files a/docs/html/structuel__iterator__array__coll__graph.png and /dev/null differ diff --git a/docs/html/structuel__iterator__coll__graph.map b/docs/html/structuel__iterator__coll__graph.map deleted file mode 100644 index 963e281..0000000 --- a/docs/html/structuel__iterator__coll__graph.map +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/docs/html/structuel__iterator__coll__graph.md5 b/docs/html/structuel__iterator__coll__graph.md5 deleted file mode 100644 index c5d1631..0000000 --- a/docs/html/structuel__iterator__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -d39bd3026ffd5bab7db032a7e1c0b566 \ No newline at end of file diff --git a/docs/html/structuel__iterator__coll__graph.png b/docs/html/structuel__iterator__coll__graph.png deleted file mode 100644 index 8f3a782..0000000 Binary files a/docs/html/structuel__iterator__coll__graph.png and /dev/null differ diff --git a/docs/html/structuel__llist.html b/docs/html/structuel__llist.html deleted file mode 100644 index dc083b4..0000000 --- a/docs/html/structuel__llist.html +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - - -µEvLoop: uel_llist_t Struct Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    µEvLoop -
    -
    A fast and lightweight event loop aimed at embedded platforms in C99.
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    - -
    -
    uel_llist_t Struct Reference
    -
    -
    - -

    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...

    -
    -Collaboration diagram for uel_llist_t:
    -
    -
    Collaboration graph
    - - - - - -
    [legend]
    - - - - - - - - - - - -

    -Data Fields

    -uel_llist_node_t * head
     A pointer to the head of the list. Is NULL when the list is empty.
     
    -uel_llist_node_t * tail
     A pointer to the tail of the list. Is NULL when the list is empty.
     
    -uintptr_t count
     The count of enqueued nodes.
     
    -

    Detailed Description

    -

    Defines a linked list. If it is empty, head == tail == NULL. Pushing or popping from both the head or tail is always O(1).

    -

    The documentation for this struct was generated from the following file: -
    - - - - diff --git a/docs/html/structuel__llist__coll__graph.map b/docs/html/structuel__llist__coll__graph.map deleted file mode 100644 index 423bc36..0000000 --- a/docs/html/structuel__llist__coll__graph.map +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/docs/html/structuel__llist__coll__graph.md5 b/docs/html/structuel__llist__coll__graph.md5 deleted file mode 100644 index 2198477..0000000 --- a/docs/html/structuel__llist__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -e4dad2330e9ffbfb884106f2c3c3076f \ No newline at end of file diff --git a/docs/html/structuel__llist__coll__graph.png b/docs/html/structuel__llist__coll__graph.png deleted file mode 100644 index d67e890..0000000 Binary files a/docs/html/structuel__llist__coll__graph.png and /dev/null differ diff --git a/docs/html/structuel__llist__node.html b/docs/html/structuel__llist__node.html deleted file mode 100644 index 5ec9712..0000000 --- a/docs/html/structuel__llist__node.html +++ /dev/null @@ -1,109 +0,0 @@ - - - - - - - -µEvLoop: uel_llist_node_t Struct Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    µEvLoop -
    -
    A fast and lightweight event loop aimed at embedded platforms in C99.
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    - -
    -
    uel_llist_node_t Struct Reference
    -
    -
    - -

    Defines a node of the linked list. Holds a void pointer. - More...

    -
    -Collaboration diagram for uel_llist_node_t:
    -
    -
    Collaboration graph
    - - - - - -
    [legend]
    - - - - - - - - -

    -Data Fields

    -void * value
     The value of the node, as a void pointer.
     
    -uel_llist_node_t * next
     The next node in the list.
     
    -

    Detailed Description

    -

    Defines a node of the linked list. Holds a void pointer.

    -

    The documentation for this struct was generated from the following file: -
    - - - - diff --git a/docs/html/structuel__llist__node__coll__graph.map b/docs/html/structuel__llist__node__coll__graph.map deleted file mode 100644 index 41d402e..0000000 --- a/docs/html/structuel__llist__node__coll__graph.map +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/docs/html/structuel__llist__node__coll__graph.md5 b/docs/html/structuel__llist__node__coll__graph.md5 deleted file mode 100644 index a303836..0000000 --- a/docs/html/structuel__llist__node__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -00e396b6bf554cf50e138bd2cfb28847 \ No newline at end of file diff --git a/docs/html/structuel__llist__node__coll__graph.png b/docs/html/structuel__llist__node__coll__graph.png deleted file mode 100644 index 19da0cb..0000000 Binary files a/docs/html/structuel__llist__node__coll__graph.png and /dev/null differ diff --git a/docs/html/structuel__module.html b/docs/html/structuel__module.html deleted file mode 100644 index fa0cc01..0000000 --- a/docs/html/structuel__module.html +++ /dev/null @@ -1,155 +0,0 @@ - - - - - - - -µEvLoop: uel_module_t Struct Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    µEvLoop -
    -
    A fast and lightweight event loop aimed at embedded platforms in C99.
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    - -
    -
    uel_module_t Struct Reference
    -
    -
    - -

    A module is an isolated unit of behaviour with lifecycle hooks. - More...

    -
    -Collaboration diagram for uel_module_t:
    -
    -
    Collaboration graph
    - - - - - - - - - - - - - -
    [legend]
    - - - - - - - - - -

    -Data Fields

    uel_module_hook_t config
     
    uel_module_hook_t launch
     
    -struct uel_applicationapp
     Keeps a reference to the application onto which the module is loaded.
     
    -

    Detailed Description

    -

    A module is an isolated unit of behaviour with lifecycle hooks.

    -

    Modules can serve as a variety of purposes:

    -
      -
    • They can act as bridges to static data, such as SFRs;
    • -
    • They can be object factories, meant to distribute and recycle objects to other modules;
    • -
    • They can act as services, background processes that interact with other parts of the application in a sattelite-fashion.
    • -
    -

    Modules are meant to be singletons and user extendable.

    -

    Field Documentation

    - -

    ◆ config

    - -
    -
    - - - - -
    uel_module_hook_t uel_module_t::config
    -
    -

    The config hook should be used for any setup of the module dependencies. It fires after the module has been fully initialised, but may still be in an inconsistent state.

    - -
    -
    - -

    ◆ launch

    - -
    -
    - - - - -
    uel_module_hook_t uel_module_t::launch
    -
    -

    The launch hook is used to start a module. The application will only fire it once all loaded modules are both initialised and configurated (i.e. config hook has been called).

    - -
    -
    -
    The documentation for this struct was generated from the following file: -
    - - - - diff --git a/docs/html/structuel__module__coll__graph.map b/docs/html/structuel__module__coll__graph.map deleted file mode 100644 index a13c991..0000000 --- a/docs/html/structuel__module__coll__graph.map +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - diff --git a/docs/html/structuel__module__coll__graph.md5 b/docs/html/structuel__module__coll__graph.md5 deleted file mode 100644 index ac53222..0000000 --- a/docs/html/structuel__module__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -20072b9c02eb85c766a0774b4210ef2d \ No newline at end of file diff --git a/docs/html/structuel__module__coll__graph.png b/docs/html/structuel__module__coll__graph.png deleted file mode 100644 index 0fba8ca..0000000 Binary files a/docs/html/structuel__module__coll__graph.png and /dev/null differ diff --git a/docs/html/structuel__objpool.html b/docs/html/structuel__objpool.html deleted file mode 100644 index 731534c..0000000 --- a/docs/html/structuel__objpool.html +++ /dev/null @@ -1,111 +0,0 @@ - - - - - - - -µEvLoop: uel_objpool_t Struct Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    µEvLoop -
    -
    A fast and lightweight event loop aimed at embedded platforms in C99.
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    - -
    -
    uel_objpool_t Struct Reference
    -
    -
    - -

    Pre-allocated memory bound to speciffic types suitable for providing dynamic object management in the stack. - More...

    -
    -Collaboration diagram for uel_objpool_t:
    -
    -
    Collaboration graph
    - - - - - -
    [legend]
    - - - - - - - - -

    -Data Fields

    -uint8_t * buffer
     The buffer that contains each object managed by this pool.
     
    -uel_cqueue_t queue
     The queue containing the addresses for each object in the pool.
     
    -

    Detailed Description

    -

    Pre-allocated memory bound to speciffic types suitable for providing dynamic object management in the stack.

    -

    Object pools are arrays of objects that are pre-allocated in the stack at compile time as an alternative to runtime memory allocation for dynamic object management.

    -

    To efficiently release and acquire objects from a pool, their addresses are kept in a circular queue that is fully populated during initialisation.

    -

    The documentation for this struct was generated from the following file: -
    - - - - diff --git a/docs/html/structuel__objpool__coll__graph.map b/docs/html/structuel__objpool__coll__graph.map deleted file mode 100644 index a20ce43..0000000 --- a/docs/html/structuel__objpool__coll__graph.map +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/docs/html/structuel__objpool__coll__graph.md5 b/docs/html/structuel__objpool__coll__graph.md5 deleted file mode 100644 index 5634507..0000000 --- a/docs/html/structuel__objpool__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -13b019f3abeb56296f25af9f5a776f87 \ No newline at end of file diff --git a/docs/html/structuel__objpool__coll__graph.png b/docs/html/structuel__objpool__coll__graph.png deleted file mode 100644 index 797d281..0000000 Binary files a/docs/html/structuel__objpool__coll__graph.png and /dev/null differ diff --git a/docs/html/structuel__pipeline.html b/docs/html/structuel__pipeline.html deleted file mode 100644 index 4783021..0000000 --- a/docs/html/structuel__pipeline.html +++ /dev/null @@ -1,110 +0,0 @@ - - - - - - - -µEvLoop: uel_pipeline_t Struct Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    µEvLoop -
    -
    A fast and lightweight event loop aimed at embedded platforms in C99.
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    - -
    -
    uel_pipeline_t Struct Reference
    -
    -
    - -

    A pipeline is an ordered closure list to be run in sequence. - More...

    -
    -Collaboration diagram for uel_pipeline_t:
    -
    -
    Collaboration graph
    - - - - - -
    [legend]
    - - - - - - - - -

    -Data Fields

    -uel_closure_t * closures
     A reference to an array of closures to be run.
     
    -size_t count
     The number of closures in the array.
     
    -

    Detailed Description

    -

    A pipeline is an ordered closure list to be run in sequence.

    -

    Pipelines contain an ordered list of closures. When applied to some initial parameter, each closure is invoked with the previous one's return value as parameter.

    -

    The documentation for this struct was generated from the following file: -
    - - - - diff --git a/docs/html/structuel__pipeline__coll__graph.map b/docs/html/structuel__pipeline__coll__graph.map deleted file mode 100644 index 76760d9..0000000 --- a/docs/html/structuel__pipeline__coll__graph.map +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/docs/html/structuel__pipeline__coll__graph.md5 b/docs/html/structuel__pipeline__coll__graph.md5 deleted file mode 100644 index 6031cba..0000000 --- a/docs/html/structuel__pipeline__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -b24c94c6c78cea55c17360c46bc45bc0 \ No newline at end of file diff --git a/docs/html/structuel__pipeline__coll__graph.png b/docs/html/structuel__pipeline__coll__graph.png deleted file mode 100644 index f0e478b..0000000 Binary files a/docs/html/structuel__pipeline__coll__graph.png and /dev/null differ diff --git a/docs/html/structuel__promise.html b/docs/html/structuel__promise.html deleted file mode 100644 index 967b940..0000000 --- a/docs/html/structuel__promise.html +++ /dev/null @@ -1,133 +0,0 @@ - - - - - - - -µEvLoop: uel_promise_t Struct Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    µEvLoop -
    -
    A fast and lightweight event loop aimed at embedded platforms in C99.
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    - -
    -
    uel_promise_t Struct Reference
    -
    -
    - -

    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. - More...

    -
    -Collaboration diagram for uel_promise_t:
    -
    -
    Collaboration graph
    - - - - - - - - -
    [legend]
    - - - - - - - - - - - - - - - - - -

    -Data Fields

    -struct uel_promise_storesource
     The promise store from where this promise was issued.
     
    -uel_promise_state_t state
     The current state of this promise.
     
    -void * value
     The value this promise holds. Only meaningful if already settled.
     
    -uel_promise_segment_t * first_segment
     The first segment to be processed when this promise settles.
     
    -uel_promise_segment_t * last_segment
     The last segment to be processed when this promise settles.
     
    -

    Detailed Description

    -

    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.

    -

    A promise is an object that can be in three different states:

      -
    • PENDING:
      - A promise is pending when its asynchronous operation has not completed yet and the promise does NOT hold any meaningful value.
      - If a segment handler returns a new promise, the original promise is considered pending while it awaits for the new promise to settle.
    • -
    • RESOLVED:
      - A promise is resolved when its asynchronous operation is successfully completed. It consistently holds whatever value it has been resolved with.
    • -
    • REJECTED:
      - A promise is rejected if its asynchronous operation could not complete successfully. Its value is set to whatever error it has been resolved with.
    • -
    -

    The documentation for this struct was generated from the following file: -
    - - - - diff --git a/docs/html/structuel__promise__coll__graph.map b/docs/html/structuel__promise__coll__graph.map deleted file mode 100644 index 28e2189..0000000 --- a/docs/html/structuel__promise__coll__graph.map +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/docs/html/structuel__promise__coll__graph.md5 b/docs/html/structuel__promise__coll__graph.md5 deleted file mode 100644 index 9876c18..0000000 --- a/docs/html/structuel__promise__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -78528ae9e887413aec85924f7452ce25 \ No newline at end of file diff --git a/docs/html/structuel__promise__coll__graph.png b/docs/html/structuel__promise__coll__graph.png deleted file mode 100644 index d6231e0..0000000 Binary files a/docs/html/structuel__promise__coll__graph.png and /dev/null differ diff --git a/docs/html/structuel__promise__segment.html b/docs/html/structuel__promise__segment.html deleted file mode 100644 index 13ed347..0000000 --- a/docs/html/structuel__promise__segment.html +++ /dev/null @@ -1,116 +0,0 @@ - - - - - - - -µEvLoop: uel_promise_segment_t Struct Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    µEvLoop -
    -
    A fast and lightweight event loop aimed at embedded platforms in C99.
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    - -
    -
    uel_promise_segment_t Struct Reference
    -
    -
    - -

    Defines a single synchronous operation to be invoked when the promise is either resolved or rejected. - More...

    -
    -Collaboration diagram for uel_promise_segment_t:
    -
    -
    Collaboration graph
    - - - - - -
    [legend]
    - - - - - - - - - - - -

    -Data Fields

    -uel_closure_t resolve
     The closure to be invoked when the promise is resolved.
     
    -uel_closure_t reject
     The closure to be invoked when the promise is rejected.
     
    -uel_promise_segment_t * next
     The next synchronous segment to be processed.
     
    -

    Detailed Description

    -

    Defines a single synchronous operation to be invoked when the promise is either resolved or rejected.

    -

    A promise segment is a data structure that defines how to process a value yielded by a promise when it resolves or rejects.

    -

    Segments contain two closures, representing success and error execution paths. Once the promise containing a segment is settled, depending on its state, either closure is invoked with the promise as parameter.

    -

    If a handler closure returns anything different that NULL, it's assumed to be a promise pointer to be awaited for.

    -

    The documentation for this struct was generated from the following file: -
    - - - - diff --git a/docs/html/structuel__promise__segment__coll__graph.map b/docs/html/structuel__promise__segment__coll__graph.map deleted file mode 100644 index d1d85d9..0000000 --- a/docs/html/structuel__promise__segment__coll__graph.map +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/docs/html/structuel__promise__segment__coll__graph.md5 b/docs/html/structuel__promise__segment__coll__graph.md5 deleted file mode 100644 index 9005347..0000000 --- a/docs/html/structuel__promise__segment__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -bdb8f904f3790b92535bb8b16c8670e3 \ No newline at end of file diff --git a/docs/html/structuel__promise__segment__coll__graph.png b/docs/html/structuel__promise__segment__coll__graph.png deleted file mode 100644 index 57fe5e1..0000000 Binary files a/docs/html/structuel__promise__segment__coll__graph.png and /dev/null differ diff --git a/docs/html/structuel__promise__store.html b/docs/html/structuel__promise__store.html deleted file mode 100644 index e3bbfe2..0000000 --- a/docs/html/structuel__promise__store.html +++ /dev/null @@ -1,108 +0,0 @@ - - - - - - - -µEvLoop: uel_promise_store_t Struct Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    µEvLoop -
    -
    A fast and lightweight event loop aimed at embedded platforms in C99.
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    - -
    -
    uel_promise_store_t Struct Reference
    -
    -
    - -

    An issuer of promises. Contains references to pools for promises and segments. - More...

    -
    -Collaboration diagram for uel_promise_store_t:
    -
    -
    Collaboration graph
    - - - - -
    [legend]
    - - - - - - - - -

    -Data Fields

    -uel_objpool_t * promise_pool
     A reference to the promise pool.
     
    -uel_objpool_t * segment_pool
     A reference to the segment pool.
     
    -

    Detailed Description

    -

    An issuer of promises. Contains references to pools for promises and segments.

    -

    The documentation for this struct was generated from the following file: -
    - - - - diff --git a/docs/html/structuel__promise__store__coll__graph.map b/docs/html/structuel__promise__store__coll__graph.map deleted file mode 100644 index 853e662..0000000 --- a/docs/html/structuel__promise__store__coll__graph.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/docs/html/structuel__promise__store__coll__graph.md5 b/docs/html/structuel__promise__store__coll__graph.md5 deleted file mode 100644 index 75ca2a9..0000000 --- a/docs/html/structuel__promise__store__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -3b63650a18ab5fefc8cb220e78069068 \ No newline at end of file diff --git a/docs/html/structuel__promise__store__coll__graph.png b/docs/html/structuel__promise__store__coll__graph.png deleted file mode 100644 index eda5f13..0000000 Binary files a/docs/html/structuel__promise__store__coll__graph.png and /dev/null differ diff --git a/docs/html/structuel__scheduler.html b/docs/html/structuel__scheduler.html deleted file mode 100644 index b2d1bd7..0000000 --- a/docs/html/structuel__scheduler.html +++ /dev/null @@ -1,158 +0,0 @@ - - - - - - - -µEvLoop: uel_scheduer_t Struct Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    µEvLoop -
    -
    A fast and lightweight event loop aimed at embedded platforms in C99.
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    - -
    -
    uel_scheduer_t Struct Reference
    -
    -
    - -

    The scheduler object. - More...

    -
    -Collaboration diagram for uel_scheduer_t:
    -
    -
    Collaboration graph
    - - - - - - - -
    [legend]
    - - - - - - - - - - - - - - - - - -

    -Data Fields

    uel_llist_t timer_list
     Scheduled timers linked list. More...
     
    uel_llist_t pause_list
     Paused timers linked list. More...
     
    -uel_syspools_t * pools
     Reference to the system's pools.
     
    -uel_sysqueues_t * queues
     Reference to the system's queues.
     
    -volatile uint32_t timer
     Internal timer. Must be updated via uel_sch_update_timer()
     
    -

    Detailed Description

    -

    The scheduler object.

    -

    This object keeps track of time run since the application was launched. It also keeps a queue of events due to be processed sometime in the future.

    -

    It feeds and is fed by the system queues. Timers due to be processed are put in the outbound event queue. Timers awaiting scheduling are put in the inbound schedule queue.

    -

    Field Documentation

    - -

    ◆ pause_list

    - -
    -
    - - - - -
    uel_llist_t uel_scheduer_t::pause_list
    -
    - -

    Paused timers linked list.

    -

    Holds events that had been scheduled but has been paused by the programmer. This is scanned for resumed timers every time uel_sch_manage_timers is called.

    - -
    -
    - -

    ◆ timer_list

    - -
    -
    - - - - -
    uel_llist_t uel_scheduer_t::timer_list
    -
    - -

    Scheduled timers linked list.

    -

    This linked list holds events/timers scheduled to be run in the future. Timers are inserted sorted by its due time, so it is always in execution order.

    - -
    -
    -
    The documentation for this struct was generated from the following file: -
    - - - - diff --git a/docs/html/structuel__scheduler__coll__graph.map b/docs/html/structuel__scheduler__coll__graph.map deleted file mode 100644 index 85656e5..0000000 --- a/docs/html/structuel__scheduler__coll__graph.map +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/docs/html/structuel__scheduler__coll__graph.md5 b/docs/html/structuel__scheduler__coll__graph.md5 deleted file mode 100644 index d741683..0000000 --- a/docs/html/structuel__scheduler__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -90268898a2f4a67396fd301824d2d2c0 \ No newline at end of file diff --git a/docs/html/structuel__scheduler__coll__graph.png b/docs/html/structuel__scheduler__coll__graph.png deleted file mode 100644 index 7124d99..0000000 Binary files a/docs/html/structuel__scheduler__coll__graph.png and /dev/null differ diff --git a/docs/html/structuel__signal__relay.html b/docs/html/structuel__signal__relay.html deleted file mode 100644 index 985f8f9..0000000 --- a/docs/html/structuel__signal__relay.html +++ /dev/null @@ -1,148 +0,0 @@ - - - - - - - -µEvLoop: uel_signal_relay_t Struct Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    µEvLoop -
    -
    A fast and lightweight event loop aimed at embedded platforms in C99.
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    - -
    -
    uel_signal_relay_t Struct Reference
    -
    -
    - -

    Contains a signal vector and operates on in. - More...

    -
    -Collaboration diagram for uel_signal_relay_t:
    -
    -
    Collaboration graph
    - - - - - - - -
    [legend]
    - - - - - - - - - - - - -

    -Data Fields

    uel_llist_t * signal_vector
     
    uel_sysqueues_t * queues
     
    -uel_syspools_t * pools
     A quick reference to the system's internal pools.
     
    -uintptr_t width
     The number of signals registered at this relay.
     
    -

    Detailed Description

    -

    Contains a signal vector and operates on in.

    -

    The signal relay is the central data structure involved in signal operation. It contains a signal vector, an array of linked lists, each associated to a particular signal.

    -

    When a signal is listened for, the listener closure is added to the linked list corresponding to said signal. When that signal is emitted, each listener closure in the list is invoked.

    -

    Field Documentation

    - -

    ◆ queues

    - -
    -
    - - - - -
    uel_sysqueues_t* uel_signal_relay_t::queues
    -
    -

    The system's internal queues. Upon emission, signals will be enqueued on one of these.

    - -
    -
    - -

    ◆ signal_vector

    - -
    -
    - - - - -
    uel_llist_t* uel_signal_relay_t::signal_vector
    -
    -

    Contains the signal vector. Must be large enough to contain every signal bound to this relay.

    - -
    -
    -
    The documentation for this struct was generated from the following file: -
    - - - - diff --git a/docs/html/structuel__signal__relay__coll__graph.map b/docs/html/structuel__signal__relay__coll__graph.map deleted file mode 100644 index 200725e..0000000 --- a/docs/html/structuel__signal__relay__coll__graph.map +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/docs/html/structuel__signal__relay__coll__graph.md5 b/docs/html/structuel__signal__relay__coll__graph.md5 deleted file mode 100644 index 84acc34..0000000 --- a/docs/html/structuel__signal__relay__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -68fa086fe2954b73806e256621a6309e \ No newline at end of file diff --git a/docs/html/structuel__signal__relay__coll__graph.png b/docs/html/structuel__signal__relay__coll__graph.png deleted file mode 100644 index 5e9c248..0000000 Binary files a/docs/html/structuel__signal__relay__coll__graph.png and /dev/null differ diff --git a/docs/html/sync_off.png b/docs/html/sync_off.png deleted file mode 100644 index 3b443fc..0000000 Binary files a/docs/html/sync_off.png and /dev/null differ diff --git a/docs/html/sync_on.png b/docs/html/sync_on.png deleted file mode 100644 index e08320f..0000000 Binary files a/docs/html/sync_on.png and /dev/null differ diff --git a/docs/html/system-pools_8h.html b/docs/html/system-pools_8h.html deleted file mode 100644 index df51b4e..0000000 --- a/docs/html/system-pools_8h.html +++ /dev/null @@ -1,315 +0,0 @@ - - - - - - - -µEvLoop: include/uevloop/system/containers/system-pools.h File Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    µEvLoop -
    -
    A fast and lightweight event loop aimed at embedded platforms in C99.
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    - -
    -
    system-pools.h File Reference
    -
    -
    - -

    A container for the system's internal pools. -More...

    -
    -Include dependency graph for system-pools.h:
    -
    -
    - - - - - - - - - -
    -
    -This graph shows which files directly or indirectly include this file:
    -
    -
    - - - - - - - -
    -
    -

    Go to the source code of this file.

    - - - - - -

    -Data Structures

    struct  uel_syspools_t
     A container for the system pools. More...
     
    - - - - - - - -

    -Macros

    -#define UEL_SYSPOOLS_EVENT_POOL_SIZE   (1<<UEL_SYSPOOLS_EVENT_POOL_SIZE_LOG2N)
     Unrolls the UEL_SYSPOOLS_EVENT_POOL_SIZE_LOG2N value to its power-of-two form.
     
    -#define UEL_SYSPOOLS_LLIST_NODE_POOL_SIZE   (1<<UEL_SYSPOOLS_LLIST_NODE_POOL_SIZE_LOG2N)
     Unrolls the UEL_SYSPOOLS_LLIST_NODE_POOL_SIZE_LOG2N value to its power-of-two form.
     
    - - - - - - - - - - - - - - - - -

    -Functions

    void uel_syspools_init (uel_syspools_t *pools)
     Initialise the system pools. More...
     
    uel_event_t * uel_syspools_acquire_event (uel_syspools_t *pools)
     Acquires an event from the system pools. More...
     
    uel_llist_node_t * uel_syspools_acquire_llist_node (uel_syspools_t *pools)
     Acquires a linked list node from the system pools. More...
     
    bool uel_syspools_release_event (uel_syspools_t *pools, uel_event_t *event)
     Releases an event to the system pools. More...
     
    bool uel_syspools_release_llist_node (uel_syspools_t *pools, uel_llist_node_t *node)
     Releases a linked list node to the system pools. More...
     
    -

    Detailed Description

    -

    A container for the system's internal pools.

    -

    Function Documentation

    - -

    ◆ uel_syspools_acquire_event()

    - -
    -
    - - - - - - - - -
    uel_event_t* uel_syspools_acquire_event (uel_syspools_t * pools)
    -
    - -

    Acquires an event from the system pools.

    -
    Parameters
    - - -
    poolsThe uel_syspools_t instance
    -
    -
    -
    Returns
    The acquired event
    - -
    -
    - -

    ◆ uel_syspools_acquire_llist_node()

    - -
    -
    - - - - - - - - -
    uel_llist_node_t* uel_syspools_acquire_llist_node (uel_syspools_t * pools)
    -
    - -

    Acquires a linked list node from the system pools.

    -
    Parameters
    - - -
    poolsThe uel_syspools_t instance
    -
    -
    -
    Returns
    The acquired linked list node
    - -
    -
    - -

    ◆ uel_syspools_init()

    - -
    -
    - - - - - - - - -
    void uel_syspools_init (uel_syspools_t * pools)
    -
    - -

    Initialise the system pools.

    -
    Parameters
    - - -
    poolsThe uel_syspools_t instance
    -
    -
    - -
    -
    - -

    ◆ uel_syspools_release_event()

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    bool uel_syspools_release_event (uel_syspools_t * pools,
    uel_event_t * event 
    )
    -
    - -

    Releases an event to the system pools.

    -
    Parameters
    - - - -
    poolsThe uel_syspools_t instance
    eventThe event to be released
    -
    -
    -
    Returns
    Whether the event was successfully released
    - -
    -
    - -

    ◆ uel_syspools_release_llist_node()

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    bool uel_syspools_release_llist_node (uel_syspools_t * pools,
    uel_llist_node_t * node 
    )
    -
    - -

    Releases a linked list node to the system pools.

    -
    Parameters
    - - - -
    poolsThe uel_syspools_t instance
    nodeThe linked list node to be released
    -
    -
    -
    Returns
    Wheter the linked list node was successfully released
    - -
    -
    -
    - - - - diff --git a/docs/html/system-pools_8h__dep__incl.map b/docs/html/system-pools_8h__dep__incl.map deleted file mode 100644 index ee66632..0000000 --- a/docs/html/system-pools_8h__dep__incl.map +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/docs/html/system-pools_8h__dep__incl.md5 b/docs/html/system-pools_8h__dep__incl.md5 deleted file mode 100644 index e8db9cb..0000000 --- a/docs/html/system-pools_8h__dep__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -89f968e26fb8e62329fce718ec3bdf77 \ No newline at end of file diff --git a/docs/html/system-pools_8h__dep__incl.png b/docs/html/system-pools_8h__dep__incl.png deleted file mode 100644 index 5f10bdc..0000000 Binary files a/docs/html/system-pools_8h__dep__incl.png and /dev/null differ diff --git a/docs/html/system-pools_8h__incl.map b/docs/html/system-pools_8h__incl.map deleted file mode 100644 index 5a2346c..0000000 --- a/docs/html/system-pools_8h__incl.map +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/docs/html/system-pools_8h__incl.md5 b/docs/html/system-pools_8h__incl.md5 deleted file mode 100644 index 6e33aa1..0000000 --- a/docs/html/system-pools_8h__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -16064ff3bab7157d82de6b2edc13286f \ No newline at end of file diff --git a/docs/html/system-pools_8h__incl.png b/docs/html/system-pools_8h__incl.png deleted file mode 100644 index 701a832..0000000 Binary files a/docs/html/system-pools_8h__incl.png and /dev/null differ diff --git a/docs/html/system-pools_8h_source.html b/docs/html/system-pools_8h_source.html deleted file mode 100644 index 180bd0d..0000000 --- a/docs/html/system-pools_8h_source.html +++ /dev/null @@ -1,136 +0,0 @@ - - - - - - - -µEvLoop: include/uevloop/system/containers/system-pools.h Source File - - - - - - - - - -
    -
    - - - - - - -
    -
    µEvLoop -
    -
    A fast and lightweight event loop aimed at embedded platforms in C99.
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    -
    -
    system-pools.h
    -
    -
    -Go to the documentation of this file.
    1 
    -
    5 #ifndef UEL_SYSTEM_POOLS_H
    -
    6 #define UEL_SYSTEM_POOLS_H
    -
    7 
    -
    9 #include <stdint.h>
    -
    11 
    -
    12 #include "uevloop/config.h"
    - - -
    15 #include "uevloop/system/event.h"
    -
    16 
    -
    22 typedef struct syspools uel_syspools_t;
    -
    23 struct syspools{
    -
    24 
    -
    26  #define UEL_SYSPOOLS_EVENT_POOL_SIZE (1<<UEL_SYSPOOLS_EVENT_POOL_SIZE_LOG2N)
    - - -
    32  uel_objpool_t event_pool;
    -
    33 
    -
    35  #define UEL_SYSPOOLS_LLIST_NODE_POOL_SIZE (1<<UEL_SYSPOOLS_LLIST_NODE_POOL_SIZE_LOG2N)
    - - -
    41  uel_objpool_t llist_node_pool;
    -
    42 };
    -
    43 
    -
    48 void uel_syspools_init(uel_syspools_t *pools);
    -
    49 
    -
    55 uel_event_t *uel_syspools_acquire_event(uel_syspools_t *pools);
    -
    56 
    -
    62 uel_llist_node_t *uel_syspools_acquire_llist_node(uel_syspools_t *pools);
    -
    63 
    -
    70 bool uel_syspools_release_event(uel_syspools_t *pools, uel_event_t *event);
    -
    71 
    -
    78 bool uel_syspools_release_llist_node(uel_syspools_t *pools, uel_llist_node_t *node);
    -
    79 
    -
    80 #endif /* UEL_SYSTEM_POOLS_H */
    -
    -
    void * llist_node_pool_queue_buffer[UEL_SYSPOOLS_LLIST_NODE_POOL_SIZE]
    The budder used to store llist node pointers in the llist node pool queue.
    Definition: system-pools.h:39
    -
    uel_objpool_t llist_node_pool
    The llist node pool object. Contains all llist nodes used by the core.
    Definition: system-pools.h:41
    -
    uel_event_t event_pool_buffer[UEL_SYSPOOLS_EVENT_POOL_SIZE]
    The buffer used to store events in the event pool.
    Definition: system-pools.h:28
    -
    Defines a simple implementation of linked lists and functions to manipulate it.
    -
    void * event_pool_queue_buffer[UEL_SYSPOOLS_EVENT_POOL_SIZE]
    The buffer used to store event pointers in the event pool queue.
    Definition: system-pools.h:30
    -
    void uel_syspools_init(uel_syspools_t *pools)
    Initialise the system pools.
    -
    uel_llist_node_t * uel_syspools_acquire_llist_node(uel_syspools_t *pools)
    Acquires a linked list node from the system pools.
    -
    Events are special messages passed around the core. They represent tasks to be run at some point by t...
    Definition: event.h:58
    -
    bool uel_syspools_release_event(uel_syspools_t *pools, uel_event_t *event)
    Releases an event to the system pools.
    -
    Defines object pools, arrays of pre-allocated objects for dynamic use.
    -
    #define UEL_SYSPOOLS_LLIST_NODE_POOL_SIZE
    Unrolls the UEL_SYSPOOLS_LLIST_NODE_POOL_SIZE_LOG2N value to its power-of-two form.
    Definition: system-pools.h:35
    -
    uel_event_t * uel_syspools_acquire_event(uel_syspools_t *pools)
    Acquires an event from the system pools.
    -
    uel_objpool_t event_pool
    The event pool object. Contains all the events used by the core.
    Definition: system-pools.h:32
    -
    bool uel_syspools_release_llist_node(uel_syspools_t *pools, uel_llist_node_t *node)
    Releases a linked list node to the system pools.
    -
    Defines events and methods to configure events.
    -
    #define UEL_SYSPOOLS_EVENT_POOL_SIZE
    Unrolls the UEL_SYSPOOLS_EVENT_POOL_SIZE_LOG2N value to its power-of-two form.
    Definition: system-pools.h:26
    -
    uel_llist_node_t llist_node_pool_buffer[UEL_SYSPOOLS_LLIST_NODE_POOL_SIZE]
    The buffer used to store llist nodes in the llist node pool.
    Definition: system-pools.h:37
    -
    Central repository of system configuration. This is meant to be edited by the programmer as needed.
    -
    A container for the system pools.
    Definition: system-pools.h:23
    - - - - diff --git a/docs/html/system-queues_8h.html b/docs/html/system-queues_8h.html deleted file mode 100644 index d7b2cd6..0000000 --- a/docs/html/system-queues_8h.html +++ /dev/null @@ -1,373 +0,0 @@ - - - - - - - -µEvLoop: include/uevloop/system/containers/system-queues.h File Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    µEvLoop -
    -
    A fast and lightweight event loop aimed at embedded platforms in C99.
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    - -
    -
    system-queues.h File Reference
    -
    -
    - -

    A container for the system's internal queues. -More...

    -
    -Include dependency graph for system-queues.h:
    -
    -
    - - - - - - - - -
    -
    -This graph shows which files directly or indirectly include this file:
    -
    -
    - - - - - - - -
    -
    -

    Go to the source code of this file.

    - - - - - -

    -Data Structures

    struct  uel_sysqueues_t
     A container for the system's internal queues. More...
     
    - - - - - - - -

    -Macros

    -#define UEL_SYSQUEUES_EVENT_QUEUE_SIZE   (1<<UEL_SYSQUEUES_EVENT_QUEUE_SIZE_LOG2N)
     Unrolls the UEL_SYSQUEUES_EVENT_QUEUE_SIZE_LOG2N value to its power-of-two form.
     
    -#define UEL_SYSQUEUES_SCHEDULE_QUEUE_SIZE   (1<<UEL_SYSQUEUES_SCHEDULE_QUEUE_SIZE_LOG2N)
     Unrolls the UEL_SYSQUEUES_SCHEDULE_QUEUE_SIZE_LOG2N value to its power-of-two form.
     
    - - - - - - - - - - - - - - - - - - - - - - -

    -Functions

    void uel_sysqueues_init (uel_sysqueues_t *queues)
     Initialises a new uel_sysqueues_t. More...
     
    void uel_sysqueues_enqueue_event (uel_sysqueues_t *queues, uel_event_t *event)
     Pushes an event into the event queue. More...
     
    uel_event_t * uel_sysqueues_get_enqueued_event (uel_sysqueues_t *queues)
     Pops an event from the event queue. More...
     
    uintptr_t uel_sysqueues_count_enqueued_events (uel_sysqueues_t *queues)
     Counts the number of elements in the event queue. More...
     
    void uel_sysqueues_schedule_event (uel_sysqueues_t *queues, uel_event_t *event)
     Pushes an event into the schedule queue. More...
     
    uel_event_t * uel_sysqueues_get_scheduled_event (uel_sysqueues_t *queues)
     Pops an event from the schedule queue. More...
     
    uintptr_t uel_sysqueues_count_scheduled_events (uel_sysqueues_t *queues)
     Counts the number of elements in the schedule queue. More...
     
    -

    Detailed Description

    -

    A container for the system's internal queues.

    -

    Function Documentation

    - -

    ◆ uel_sysqueues_count_enqueued_events()

    - -
    -
    - - - - - - - - -
    uintptr_t uel_sysqueues_count_enqueued_events (uel_sysqueues_t * queues)
    -
    - -

    Counts the number of elements in the event queue.

    -
    Parameters
    - - -
    queuesThe uel_sysqueues_t instance whose event queue's elements should be counted
    -
    -
    -
    Returns
    The number of elements in the queue
    - -
    -
    - -

    ◆ uel_sysqueues_count_scheduled_events()

    - -
    -
    - - - - - - - - -
    uintptr_t uel_sysqueues_count_scheduled_events (uel_sysqueues_t * queues)
    -
    - -

    Counts the number of elements in the schedule queue.

    -
    Parameters
    - - -
    queuesThe uel_sysqueues_t instance whose schedule queue's elements should be counted
    -
    -
    -
    Returns
    The number of elements in the queue
    - -
    -
    - -

    ◆ uel_sysqueues_enqueue_event()

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    void uel_sysqueues_enqueue_event (uel_sysqueues_t * queues,
    uel_event_t * event 
    )
    -
    - -

    Pushes an event into the event queue.

    -

    This makes the event ready for colletion e processing by the event loop.

    -
    Parameters
    - - - -
    queuesThe uel_sysqueues_t instance to be initialised
    eventThe event to be enqueued
    -
    -
    - -
    -
    - -

    ◆ uel_sysqueues_get_enqueued_event()

    - -
    -
    - - - - - - - - -
    uel_event_t* uel_sysqueues_get_enqueued_event (uel_sysqueues_t * queues)
    -
    - -

    Pops an event from the event queue.

    -
    Parameters
    - - -
    queuesThe uel_sysqueues_t instance from whose event queue the event must be popped.
    -
    -
    -
    Returns
    The popped event's address. If the queue is empty, returns NULL.
    - -
    -
    - -

    ◆ uel_sysqueues_get_scheduled_event()

    - -
    -
    - - - - - - - - -
    uel_event_t* uel_sysqueues_get_scheduled_event (uel_sysqueues_t * queues)
    -
    - -

    Pops an event from the schedule queue.

    -
    Parameters
    - - -
    queuesThe uel_sysqueues_t instance from whose schedule queue the event must be popped.
    -
    -
    -
    Returns
    The popped event's address. If the queue is empty, returns NULL.
    - -
    -
    - -

    ◆ uel_sysqueues_init()

    - -
    -
    - - - - - - - - -
    void uel_sysqueues_init (uel_sysqueues_t * queues)
    -
    - -

    Initialises a new uel_sysqueues_t.

    -
    Parameters
    - - -
    queuesThe uel_sysqueues_t instance to be initialised
    -
    -
    - -
    -
    - -

    ◆ uel_sysqueues_schedule_event()

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    void uel_sysqueues_schedule_event (uel_sysqueues_t * queues,
    uel_event_t * event 
    )
    -
    - -

    Pushes an event into the schedule queue.

    -

    This makes the event ready for collection and scheduling by the scheduler.

    -
    Parameters
    - - - -
    queuesThe uel_sysqueues_t instance to be initialised
    eventThe event to be scheduled
    -
    -
    - -
    -
    -
    - - - - diff --git a/docs/html/system-queues_8h__dep__incl.map b/docs/html/system-queues_8h__dep__incl.map deleted file mode 100644 index b09db09..0000000 --- a/docs/html/system-queues_8h__dep__incl.map +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/docs/html/system-queues_8h__dep__incl.md5 b/docs/html/system-queues_8h__dep__incl.md5 deleted file mode 100644 index b65c9a7..0000000 --- a/docs/html/system-queues_8h__dep__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -c886acddb0e67c23af2cb70a54b37136 \ No newline at end of file diff --git a/docs/html/system-queues_8h__dep__incl.png b/docs/html/system-queues_8h__dep__incl.png deleted file mode 100644 index 8da6782..0000000 Binary files a/docs/html/system-queues_8h__dep__incl.png and /dev/null differ diff --git a/docs/html/system-queues_8h__incl.map b/docs/html/system-queues_8h__incl.map deleted file mode 100644 index 4076ea7..0000000 --- a/docs/html/system-queues_8h__incl.map +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/docs/html/system-queues_8h__incl.md5 b/docs/html/system-queues_8h__incl.md5 deleted file mode 100644 index ae675b1..0000000 --- a/docs/html/system-queues_8h__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -25fea88be1f9536579cb54a9a6888687 \ No newline at end of file diff --git a/docs/html/system-queues_8h__incl.png b/docs/html/system-queues_8h__incl.png deleted file mode 100644 index d868ecb..0000000 Binary files a/docs/html/system-queues_8h__incl.png and /dev/null differ diff --git a/docs/html/system-queues_8h_source.html b/docs/html/system-queues_8h_source.html deleted file mode 100644 index bccc86d..0000000 --- a/docs/html/system-queues_8h_source.html +++ /dev/null @@ -1,137 +0,0 @@ - - - - - - - -µEvLoop: include/uevloop/system/containers/system-queues.h Source File - - - - - - - - - -
    -
    - - - - - - -
    -
    µEvLoop -
    -
    A fast and lightweight event loop aimed at embedded platforms in C99.
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    -
    -
    system-queues.h
    -
    -
    -Go to the documentation of this file.
    1 
    -
    5 #ifndef UEL_SYSTEM_QUEUES_H
    -
    6 #define UEL_SYSTEM_QUEUES_H
    -
    7 
    -
    9 #include <stdint.h>
    -
    11 
    -
    12 #include "uevloop/system/event.h"
    -
    13 #include "uevloop/config.h"
    - -
    15 
    -
    24 typedef struct sysqueues uel_sysqueues_t;
    -
    25 struct sysqueues {
    -
    26 
    -
    28  #define UEL_SYSQUEUES_EVENT_QUEUE_SIZE (1<<UEL_SYSQUEUES_EVENT_QUEUE_SIZE_LOG2N)
    - -
    35  uel_cqueue_t event_queue;
    -
    36 
    -
    37 
    -
    39  #define UEL_SYSQUEUES_SCHEDULE_QUEUE_SIZE (1<<UEL_SYSQUEUES_SCHEDULE_QUEUE_SIZE_LOG2N)
    - -
    47  uel_cqueue_t schedule_queue;
    -
    48 };
    -
    49 
    -
    54 void uel_sysqueues_init(uel_sysqueues_t *queues);
    -
    55 
    -
    63 void uel_sysqueues_enqueue_event(uel_sysqueues_t *queues, uel_event_t *event);
    -
    64 
    -
    71 uel_event_t *uel_sysqueues_get_enqueued_event(uel_sysqueues_t *queues);
    -
    72 
    -
    79 uintptr_t uel_sysqueues_count_enqueued_events(uel_sysqueues_t *queues);
    -
    80 
    -
    88 void uel_sysqueues_schedule_event(uel_sysqueues_t *queues, uel_event_t *event);
    -
    89 
    -
    96 uel_event_t *uel_sysqueues_get_scheduled_event(uel_sysqueues_t *queues);
    -
    97 
    -
    104 uintptr_t uel_sysqueues_count_scheduled_events(uel_sysqueues_t *queues);
    -
    105 
    -
    106 #endif /* end of include guard: UEL_SYSTEM_QUEUES_H */
    -
    -
    void * schedule_queue_buffer[UEL_SYSQUEUES_SCHEDULE_QUEUE_SIZE]
    The schedule queue buffer.
    Definition: system-queues.h:41
    -
    uintptr_t uel_sysqueues_count_scheduled_events(uel_sysqueues_t *queues)
    Counts the number of elements in the schedule queue.
    -
    void uel_sysqueues_init(uel_sysqueues_t *queues)
    Initialises a new uel_sysqueues_t.
    -
    Events are special messages passed around the core. They represent tasks to be run at some point by t...
    Definition: event.h:58
    -
    #define UEL_SYSQUEUES_SCHEDULE_QUEUE_SIZE
    Unrolls the UEL_SYSQUEUES_SCHEDULE_QUEUE_SIZE_LOG2N value to its power-of-two form.
    Definition: system-queues.h:39
    -
    uel_event_t * uel_sysqueues_get_enqueued_event(uel_sysqueues_t *queues)
    Pops an event from the event queue.
    -
    uel_cqueue_t schedule_queue
    The application's schedule queue.
    Definition: system-queues.h:47
    -
    void uel_sysqueues_enqueue_event(uel_sysqueues_t *queues, uel_event_t *event)
    Pushes an event into the event queue.
    -
    uel_cqueue_t event_queue
    The application's event queue.
    Definition: system-queues.h:35
    -
    Defines circular queues, fast and efficient FIFO data structures.
    -
    Defines events and methods to configure events.
    -
    void * event_queue_buffer[UEL_SYSQUEUES_EVENT_QUEUE_SIZE]
    The event queue buffer.
    Definition: system-queues.h:30
    -
    uintptr_t uel_sysqueues_count_enqueued_events(uel_sysqueues_t *queues)
    Counts the number of elements in the event queue.
    -
    Central repository of system configuration. This is meant to be edited by the programmer as needed.
    -
    #define UEL_SYSQUEUES_EVENT_QUEUE_SIZE
    Unrolls the UEL_SYSQUEUES_EVENT_QUEUE_SIZE_LOG2N value to its power-of-two form.
    Definition: system-queues.h:28
    -
    void uel_sysqueues_schedule_event(uel_sysqueues_t *queues, uel_event_t *event)
    Pushes an event into the schedule queue.
    -
    uel_event_t * uel_sysqueues_get_scheduled_event(uel_sysqueues_t *queues)
    Pops an event from the schedule queue.
    -
    A container for the system's internal queues.
    Definition: system-queues.h:25
    - - - - diff --git a/docs/html/tab_a.png b/docs/html/tab_a.png deleted file mode 100644 index 3b725c4..0000000 Binary files a/docs/html/tab_a.png and /dev/null differ diff --git a/docs/html/tab_b.png b/docs/html/tab_b.png deleted file mode 100644 index e2b4a86..0000000 Binary files a/docs/html/tab_b.png and /dev/null differ diff --git a/docs/html/tab_h.png b/docs/html/tab_h.png deleted file mode 100644 index fd5cb70..0000000 Binary files a/docs/html/tab_h.png and /dev/null differ diff --git a/docs/html/tab_s.png b/docs/html/tab_s.png deleted file mode 100644 index ab478c9..0000000 Binary files a/docs/html/tab_s.png and /dev/null differ diff --git a/docs/html/tabs.css b/docs/html/tabs.css deleted file mode 100644 index 7d45d36..0000000 --- a/docs/html/tabs.css +++ /dev/null @@ -1 +0,0 @@ -.sm{position:relative;z-index:9999}.sm,.sm ul,.sm li{display:block;list-style:none;margin:0;padding:0;line-height:normal;direction:ltr;text-align:left;-webkit-tap-highlight-color:rgba(0,0,0,0)}.sm-rtl,.sm-rtl ul,.sm-rtl li{direction:rtl;text-align:right}.sm>li>h1,.sm>li>h2,.sm>li>h3,.sm>li>h4,.sm>li>h5,.sm>li>h6{margin:0;padding:0}.sm ul{display:none}.sm li,.sm a{position:relative}.sm a{display:block}.sm a.disabled{cursor:not-allowed}.sm:after{content:"\00a0";display:block;height:0;font:0px/0 serif;clear:both;visibility:hidden;overflow:hidden}.sm,.sm *,.sm *:before,.sm *:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.sm-dox{background-image:url("tab_b.png")}.sm-dox a,.sm-dox a:focus,.sm-dox a:hover,.sm-dox a:active{padding:0px 12px;padding-right:43px;font-family:"Lucida Grande","Geneva","Helvetica",Arial,sans-serif;font-size:13px;font-weight:bold;line-height:36px;text-decoration:none;text-shadow:0px 1px 1px rgba(255,255,255,0.9);color:#283A5D;outline:none}.sm-dox a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:#fff;text-shadow:0px 1px 1px #000}.sm-dox a.current{color:#D23600}.sm-dox a.disabled{color:#bbb}.sm-dox a span.sub-arrow{position:absolute;top:50%;margin-top:-14px;left:auto;right:3px;width:28px;height:28px;overflow:hidden;font:bold 12px/28px monospace !important;text-align:center;text-shadow:none;background:rgba(255,255,255,0.5);border-radius:5px}.sm-dox a.highlighted span.sub-arrow:before{display:block;content:'-'}.sm-dox>li:first-child>a,.sm-dox>li:first-child>:not(ul) a{border-radius:5px 5px 0 0}.sm-dox>li:last-child>a,.sm-dox>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul{border-radius:0 0 5px 5px}.sm-dox>li:last-child>a.highlighted,.sm-dox>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted{border-radius:0}.sm-dox ul{background:rgba(162,162,162,0.1)}.sm-dox ul a,.sm-dox ul a:focus,.sm-dox ul a:hover,.sm-dox ul a:active{font-size:12px;border-left:8px solid transparent;line-height:36px;text-shadow:none;background-color:white;background-image:none}.sm-dox ul a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:#fff;text-shadow:0px 1px 1px #000}.sm-dox ul ul a,.sm-dox ul ul a:hover,.sm-dox ul ul a:focus,.sm-dox ul ul a:active{border-left:16px solid transparent}.sm-dox ul ul ul a,.sm-dox ul ul ul a:hover,.sm-dox ul ul ul a:focus,.sm-dox ul ul ul a:active{border-left:24px solid transparent}.sm-dox ul ul ul ul a,.sm-dox ul ul ul ul a:hover,.sm-dox ul ul ul ul a:focus,.sm-dox ul ul ul ul a:active{border-left:32px solid transparent}.sm-dox ul ul ul ul ul a,.sm-dox ul ul ul ul ul a:hover,.sm-dox ul ul ul ul ul a:focus,.sm-dox ul ul ul ul ul a:active{border-left:40px solid transparent}@media (min-width: 768px){.sm-dox ul{position:absolute;width:12em}.sm-dox li{float:left}.sm-dox.sm-rtl li{float:right}.sm-dox ul li,.sm-dox.sm-rtl ul li,.sm-dox.sm-vertical li{float:none}.sm-dox a{white-space:nowrap}.sm-dox ul a,.sm-dox.sm-vertical a{white-space:normal}.sm-dox .sm-nowrap>li>a,.sm-dox .sm-nowrap>li>:not(ul) a{white-space:nowrap}.sm-dox{padding:0 10px;background-image:url("tab_b.png");line-height:36px}.sm-dox a span.sub-arrow{top:50%;margin-top:-2px;right:12px;width:0;height:0;border-width:4px;border-style:solid dashed dashed dashed;border-color:#283A5D transparent transparent transparent;background:transparent;border-radius:0}.sm-dox a,.sm-dox a:focus,.sm-dox a:active,.sm-dox a:hover,.sm-dox a.highlighted{padding:0px 12px;background-image:url("tab_s.png");background-repeat:no-repeat;background-position:right;border-radius:0 !important}.sm-dox a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:#fff;text-shadow:0px 1px 1px #000}.sm-dox a:hover span.sub-arrow{border-color:#fff transparent transparent transparent}.sm-dox a.has-submenu{padding-right:24px}.sm-dox li{border-top:0}.sm-dox>li>ul:before,.sm-dox>li>ul:after{content:'';position:absolute;top:-18px;left:30px;width:0;height:0;overflow:hidden;border-width:9px;border-style:dashed dashed solid dashed;border-color:transparent transparent #bbb transparent}.sm-dox>li>ul:after{top:-16px;left:31px;border-width:8px;border-color:transparent transparent #fff transparent}.sm-dox ul{border:1px solid #bbb;padding:5px 0;background:#fff;border-radius:5px !important;box-shadow:0 5px 9px rgba(0,0,0,0.2)}.sm-dox ul a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-color:transparent transparent transparent #555;border-style:dashed dashed dashed solid}.sm-dox ul a,.sm-dox ul a:hover,.sm-dox ul a:focus,.sm-dox ul a:active,.sm-dox ul a.highlighted{color:#555;background-image:none;border:0 !important;color:#555;background-image:none}.sm-dox ul a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:#fff;text-shadow:0px 1px 1px #000}.sm-dox ul a:hover span.sub-arrow{border-color:transparent transparent transparent #fff}.sm-dox span.scroll-up,.sm-dox span.scroll-down{position:absolute;display:none;visibility:hidden;overflow:hidden;background:#fff;height:36px}.sm-dox span.scroll-up:hover,.sm-dox span.scroll-down:hover{background:#eee}.sm-dox span.scroll-up:hover span.scroll-up-arrow,.sm-dox span.scroll-up:hover span.scroll-down-arrow{border-color:transparent transparent #D23600 transparent}.sm-dox span.scroll-down:hover span.scroll-down-arrow{border-color:#D23600 transparent transparent transparent}.sm-dox span.scroll-up-arrow,.sm-dox span.scroll-down-arrow{position:absolute;top:0;left:50%;margin-left:-6px;width:0;height:0;overflow:hidden;border-width:6px;border-style:dashed dashed solid dashed;border-color:transparent transparent #555 transparent}.sm-dox span.scroll-down-arrow{top:8px;border-style:solid dashed dashed dashed;border-color:#555 transparent transparent transparent}.sm-dox.sm-rtl a.has-submenu{padding-right:12px;padding-left:24px}.sm-dox.sm-rtl a span.sub-arrow{right:auto;left:12px}.sm-dox.sm-rtl.sm-vertical a.has-submenu{padding:10px 20px}.sm-dox.sm-rtl.sm-vertical a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-rtl>li>ul:before{left:auto;right:30px}.sm-dox.sm-rtl>li>ul:after{left:auto;right:31px}.sm-dox.sm-rtl ul a.has-submenu{padding:10px 20px !important}.sm-dox.sm-rtl ul a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-vertical{padding:10px 0;border-radius:5px}.sm-dox.sm-vertical a{padding:10px 20px}.sm-dox.sm-vertical a:hover,.sm-dox.sm-vertical a:focus,.sm-dox.sm-vertical a:active,.sm-dox.sm-vertical a.highlighted{background:#fff}.sm-dox.sm-vertical a.disabled{background-image:url("tab_b.png")}.sm-dox.sm-vertical a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-style:dashed dashed dashed solid;border-color:transparent transparent transparent #555}.sm-dox.sm-vertical>li>ul:before,.sm-dox.sm-vertical>li>ul:after{display:none}.sm-dox.sm-vertical ul a{padding:10px 20px}.sm-dox.sm-vertical ul a:hover,.sm-dox.sm-vertical ul a:focus,.sm-dox.sm-vertical ul a:active,.sm-dox.sm-vertical ul a.highlighted{background:#eee}.sm-dox.sm-vertical ul a.disabled{background:#fff}} diff --git a/docs/html/unionevent_1_1uel__event__detail.html b/docs/html/unionevent_1_1uel__event__detail.html deleted file mode 100644 index b0d6d84..0000000 --- a/docs/html/unionevent_1_1uel__event__detail.html +++ /dev/null @@ -1,144 +0,0 @@ - - - - - - - -µEvLoop: uel_event_t::uel_event_detail Union Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    µEvLoop -
    -
    A fast and lightweight event loop aimed at embedded platforms in C99.
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    - -
    -
    uel_event_t::uel_event_detail Union Reference
    -
    -
    - -

    #include <event.h>

    -
    -Collaboration diagram for uel_event_t::uel_event_detail:
    -
    -
    Collaboration graph
    - - - - - - - - - - - - - -
    [legend]
    - - - - - - - - - - - - - - -

    -Data Structures

    struct  uel_event_listener
     Contains the context of a particular signal listener. More...
     
    struct  uel_event_observer
     Contains the reference to an observer variable. More...
     
    struct  uel_event_signal
     Contains information related to an emitted signal. More...
     
    struct  uel_event_timer
     Contains information suitable for scheduling an event at the scheduler. More...
     
    - - - - - - - - - - - - - -

    -Data Fields

    -struct event::uel_event_detail::uel_event_timer timer
     The scheduling information of this event. Relevant only for timers.
     
    -struct event::uel_event_detail::uel_event_signal signal
     The emission information of this event. Relevant only for signals.
     
    -struct event::uel_event_detail::uel_event_listener listener
     The listening information of this event. Relevant only for signal listeners.
     
    -struct event::uel_event_detail::uel_event_observer observer
     The observing information of this event. Relevant only for observers.
     
    -

    Detailed Description

    -

    Allows to compact many speciffic details on various event types on a single memory slot. Pertinent content depends on the type member value.

    -

    The documentation for this union was generated from the following file: -
    - - - - diff --git a/docs/html/unionevent_1_1uel__event__detail__coll__graph.map b/docs/html/unionevent_1_1uel__event__detail__coll__graph.map deleted file mode 100644 index 0370e60..0000000 --- a/docs/html/unionevent_1_1uel__event__detail__coll__graph.map +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - diff --git a/docs/html/unionevent_1_1uel__event__detail__coll__graph.md5 b/docs/html/unionevent_1_1uel__event__detail__coll__graph.md5 deleted file mode 100644 index 1806ca5..0000000 --- a/docs/html/unionevent_1_1uel__event__detail__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -fbaa02c277245840306e3dd5a7ce84bd \ No newline at end of file diff --git a/docs/html/unionevent_1_1uel__event__detail__coll__graph.png b/docs/html/unionevent_1_1uel__event__detail__coll__graph.png deleted file mode 100644 index 2eeb810..0000000 Binary files a/docs/html/unionevent_1_1uel__event__detail__coll__graph.png and /dev/null differ diff --git a/docs/index.html b/docs/index.html deleted file mode 100644 index 3abafac..0000000 --- a/docs/index.html +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/include/uevloop/system/event.h b/include/uevloop/system/event.h index d2cd5d3..3244611 100644 --- a/include/uevloop/system/event.h +++ b/include/uevloop/system/event.h @@ -34,7 +34,6 @@ enum uel_event_timer_status { //! Alias to the uel_event_timer_status typedef enum uel_event_timer_status uel_event_timer_status_t; - /** \brief Events are special messages passed around the core. * They represent tasks to be run at some point by the system. * @@ -55,11 +54,13 @@ typedef enum uel_event_timer_status uel_event_timer_status_t; * flag determines whether the signal should be able to fire multiple times or just once. */ typedef struct event uel_event_t; +typedef void (*event_final_callback_t)(uel_event_t *); struct event { uel_event_type_t type; //!< The type of the event, as defined by `uel_event_type_t` uel_closure_t closure; //!< The closure to be invoked a.k.a. the action to be run void *value; //!< The value the closure should be invoked with bool repeating; //!< Marks whether the event should be discarded after processing. + event_final_callback_t final_callback; //!< Get's called when all the listeners have been invoked. //! Allows to compact many speciffic details on various event types on a single //! memory slot. Pertinent content depends on the `type` member value. diff --git a/include/uevloop/system/signal.h b/include/uevloop/system/signal.h index 63b5191..54e4c37 100644 --- a/include/uevloop/system/signal.h +++ b/include/uevloop/system/signal.h @@ -114,6 +114,17 @@ void uel_signal_unlisten(uel_signal_listener_t listener); */ void uel_signal_emit(uel_signal_t signal, uel_signal_relay_t *relay, void *params); +/** \brief Emits a signal at the supplied relay. Any closure listening to this + * signal will be asynchronously invoked. When all are invoked, call the final callback. + * + * \param signal The signal to be emitted + * \param relay The relay where the signal is registered + * \param params The parameters supplied to the listener's closure when it is + * invoked. + */ +void uel_signal_emit_with_final_callback(uel_signal_t signal, uel_signal_relay_t *relay, void *params, + event_final_callback_t final_callback); + /** \brief Attaches a non-repeating listener that resolves the provided promise * upon emission. * diff --git a/src/system/event-loop.c b/src/system/event-loop.c index 4dcf2a9..8718c8c 100644 --- a/src/system/event-loop.c +++ b/src/system/event-loop.c @@ -58,6 +58,12 @@ static inline void run_signal_event(uel_evloop_t *event_loop, uel_event_t *signa uel_closure_t *closure = &closures[i]; uel_closure_invoke(closure, signal->value); } + + if (signal->final_callback != NULL) + { + signal->final_callback(signal); + } + for(unsigned int node_count = j, j = 0; j < node_count; j++){ uel_event_t *event = removed_nodes[j]->value; uel_syspools_release_event(event_loop->pools, event); diff --git a/src/system/event.c b/src/system/event.c index 407c00c..a95ed01 100644 --- a/src/system/event.c +++ b/src/system/event.c @@ -10,6 +10,7 @@ void uel_event_config_closure( void *value, bool repeating ) { + event->final_callback = NULL; event->type = UEL_CLOSURE_EVENT; event->closure = *closure; event->value = value; @@ -22,6 +23,7 @@ void uel_event_config_signal( uel_llist_t *listeners, void *params ){ + event->final_callback = NULL; event->closure = uel_closure_create(NULL, NULL); event->type = UEL_SIGNAL_EVENT; event->detail.signal.value = signal; @@ -30,6 +32,7 @@ void uel_event_config_signal( } void uel_event_config_signal_listener(uel_event_t *event, uel_closure_t *closure, bool repeating){ + event->final_callback = NULL; event->type = UEL_SIGNAL_LISTENER_EVENT; event->closure = *closure; event->repeating = repeating; @@ -42,6 +45,7 @@ void uel_event_config_observer( volatile uintptr_t *condition_var, bool repeating ){ + event->final_callback = NULL; event->type = UEL_OBSERVER_EVENT; event->closure = *closure; event->repeating = repeating; @@ -63,6 +67,7 @@ void uel_event_config_timer( void *value, uint32_t current_time ) { + event->final_callback = NULL; event->type = UEL_TIMER_EVENT; event->closure = *closure; event->value = value; diff --git a/src/system/signal.c b/src/system/signal.c index 33e5fac..e8b329c 100644 --- a/src/system/signal.c +++ b/src/system/signal.c @@ -76,6 +76,22 @@ void uel_signal_emit(uel_signal_t signal, uel_signal_relay_t *relay, void *param } } +void uel_signal_emit_with_final_callback(uel_signal_t signal, uel_signal_relay_t *relay, void *params, + event_final_callback_t final_callback) +{ + uel_llist_t *listeners = &relay->signal_vector[signal]; + bool has_listeners = false; + UEL_CRITICAL_ENTER; + has_listeners = listeners->count > 0; + UEL_CRITICAL_EXIT; + if (has_listeners) { + uel_event_t *event = uel_syspools_acquire_event(relay->pools); + uel_event_config_signal(event, signal, listeners, params); + event->final_callback = final_callback; + uel_sysqueues_enqueue_event(relay->queues, event); + } +} + uel_signal_listener_t uel_signal_resolve_promise( uel_signal_t signal, uel_signal_relay_t *relay,