Contains struct picotm_shared_ref16_obj and helper functions.  
More...
| Macros | |
| #define | PICOTM_SHARED_REF16_OBJ_INITIALIZER | 
| Typedefs | |
| typedef bool(* | picotm_shared_ref16_obj_condition_function) (struct picotm_shared_ref16_obj *ref_obj, void *data, struct picotm_error *error) | 
| typedef void(* | picotm_shared_ref16_obj_final_ref_function) (struct picotm_shared_ref16_obj *ref_obj, void *data, struct picotm_error *error) | 
| typedef void(* | picotm_shared_ref16_obj_first_ref_function) (struct picotm_shared_ref16_obj *ref_obj, void *data, struct picotm_error *error) | 
| Functions | |
| uint16_t | picotm_shared_ref16_obj_count (struct picotm_shared_ref16_obj *self) | 
| void | picotm_shared_ref16_obj_down (struct picotm_shared_ref16_obj *self, void *data, picotm_shared_ref16_obj_condition_function cond, picotm_shared_ref16_obj_final_ref_function final_ref) | 
| void | picotm_shared_ref16_obj_init (struct picotm_shared_ref16_obj *self, struct picotm_error *error) | 
| void | picotm_shared_ref16_obj_uninit (struct picotm_shared_ref16_obj *self) | 
| void | picotm_shared_ref16_obj_up (struct picotm_shared_ref16_obj *self, void *data, picotm_shared_ref16_obj_condition_function cond, picotm_shared_ref16_obj_first_ref_function first_ref, struct picotm_error *error) | 
The data structure struct picotm_shared_ref16_obj is the base for objects with shared reference counting. It maintains the counter and guarantees synchronization with the initializer and finalizer code. The counter of picotm_shared_ref16_obj is 16-bit wide of type struct picotm_shared_ref16. Additional shared-reference-counter types can be added for use cases with different requirements.
Instances of struct picotm_shared_ref16 are typically stored in reference-counted data structures like this.
An instance of picotm_shared_ref16_obj is initialized with a call to picotm_shared_ref16_obj_init() and cleaned up with a call to picotm_shared_ref16_obj_uninit(). These functions receive an instance of struct picotm_shared_ref16_obj and the init function also receives an instance of struct picotm_error, which returns error state. These functions are called in the init and un-init functions of the parent class.
At this point, the reference counter is initialized to zero and references to the object can be acquired. Next is the clean-up code.
References to an object are acquired with a call to picotm_shared_ref16_obj_up(). The parameters of the function consist of and instance of struct picotm_shared_ref16_obj, additional user data, an optional conditional function, and optional initializer function and in instance of struct picotm_error, which returns an error state to the caller.
If supplied, the optional conditional function can perform a test before the reference is acquired. If the test fails with a value of false, the reference is not acquired.
If supplied, the optional initializer function initializes the object if, and only if, the first reference is acquired.
The reference-counted object using struct picotm_shared_ref16_obj will typically provide wrapper functions around picotm_shared_ref16_obj_up().
With the example code above, users of struct ref_counted call ref_counted_up() to acquire a reference on an instance of the data structure.
The code for releasing a reference is very similar to code for acquiring one. This time the function picotm_shared_ref16_obj_down() is used.
| #define PICOTM_SHARED_REF16_OBJ_INITIALIZER | 
Initializes a statically allocated shared-ref16 object.
| typedef bool(* picotm_shared_ref16_obj_condition_function) (struct picotm_shared_ref16_obj *ref_obj, void *data, struct picotm_error *error) | 
Invoked by picotm's shared-ref16 object to test if a reference shall be acquired ore released.
| ref_obj | The shared-ref16 object. | 
| data | User data. | 
| error[out] | Returns an error to the caller. | 
| typedef void(* picotm_shared_ref16_obj_final_ref_function) (struct picotm_shared_ref16_obj *ref_obj, void *data, struct picotm_error *error) | 
Invoked by picotm's shared-ref16 object to finalize an object after releasing the final refrence.
| ref_obj | The shared-ref16 object. | |
| data | User data. | |
| [out] | error | Returns an error to the caller. | 
| typedef void(* picotm_shared_ref16_obj_first_ref_function) (struct picotm_shared_ref16_obj *ref_obj, void *data, struct picotm_error *error) | 
Invoked by picotm's shared-ref16 object to initialize the object after acquiring the first refrence.
| ref_obj | The shared-ref16 object. | |
| data | User data. | |
| [out] | error | Returns an error to the caller. | 
| uint16_t picotm_shared_ref16_obj_count | ( | struct picotm_shared_ref16_obj * | self | ) | 
Reads the value of a shared-ref16 object's counter.
| self | The shared-ref16 object. | 
| void picotm_shared_ref16_obj_down | ( | struct picotm_shared_ref16_obj * | self, | 
| void * | data, | ||
| picotm_shared_ref16_obj_condition_function | cond, | ||
| picotm_shared_ref16_obj_final_ref_function | final_ref | ||
| ) | 
Releases a reference on the shared-ref16 object.
| self | The shared-ref16 object. | 
| data | User data. | 
| cond | An optional condition to test if the reference should be released. | 
| final_ref | An optional function to finalize the object when the final reference gets released. | 
The conditional and finalizer functions are synchronized with the reference counter. The down function internally locks the shared-ref16 object while performing these operations.
| void picotm_shared_ref16_obj_init | ( | struct picotm_shared_ref16_obj * | self, | 
| struct picotm_error * | error | ||
| ) | 
Initializes a shared-ref16 object.
| self | The shared-ref16 object. | |
| [out] | error | Returns an error to the caller. | 
| void picotm_shared_ref16_obj_uninit | ( | struct picotm_shared_ref16_obj * | self | ) | 
Uninitializes a shared-ref16 object.
| self | The shared-ref16 object. | 
| void picotm_shared_ref16_obj_up | ( | struct picotm_shared_ref16_obj * | self, | 
| void * | data, | ||
| picotm_shared_ref16_obj_condition_function | cond, | ||
| picotm_shared_ref16_obj_first_ref_function | first_ref, | ||
| struct picotm_error * | error | ||
| ) | 
Acquires a reference on the shared-ref16 object.
| self | The shared-ref16 object. | |
| data | User data. | |
| cond | An optional condition to test if the reference should be acquired. | |
| first_ref | An optional function to initialize the object when the first reference gets acquired. | |
| [out] | error | Returns an error to the caller. | 
The conditional and initializer functions are synchronized with the reference counter. The up function internally locks the shared-ref16 object while performing these operations.