component
interface. All functions in the interface must be implemented.
The pre_instantiate function is called before the
component is instantiated. The function returns true
if the
component can be instantiated, or false
if not.
The component might need to do some extra work after the component has been instantiated. This should be done when called via the post_instantiate function.
The create_cell function returns true
if the
configuration system can create a default cell object for the
component, or false
if not. Both
pre_instantiate and create_cell typically
return true
.
Component has slots. A slot has key and value. The key is the slot name as a string. The value is a conf object, a pre conf object, or None, or nested lists of such types.
Slots are either defined in the component or added after the component has been created. Slots defined in the component are static slots which can not be deleted, but the slot value can be changed. Slots added to the component after creation are dynamic slots and they can be removed when wanted.
The get_slots function returns a dictionary with slot names as dictionary keys and slot values as dictionary values.
The get_slot_objects function returns a list of all conf objects and pre conf objects extracted from all slot values.
The get_slot_value returns the slot value. The slot name is passed as slot argument. A slot value is set using the set_slot_value function. The value argument should be a conf object, pre conf object, or None, or nested lists of such types. The get function returns NULL on failure. The set function does not return anything to indicate failure.
The has_slot function returns true
if the
slot exists, otherwise false
. The slot can
either be a static slot or a dynamic slot. The add_slot
function adds the slot named slot. Adding a slot can
fail if the slot already exist. The added slot will be a dynamic
slot. A dynamic slot can be deleted. The del_slot
function deletes a dynamic slot. Deleting a slot will fail if the
slot does not exist or if the slot is static. Both
add_slot and del_slot returns true
on success or false
on failure.
SIM_INTERFACE(component) { bool (*pre_instantiate)(conf_object_t *obj); void (*post_instantiate)(conf_object_t *obj); bool (*create_cell)(conf_object_t *obj); attr_value_t (*get_slots)(conf_object_t *obj); attr_value_t (*get_slot_objects)(conf_object_t *obj); attr_value_t (*get_slot_value)(conf_object_t *obj, const char *NOTNULL slot); void (*set_slot_value)(conf_object_t *obj, const char *NOTNULL slot, attr_value_t value); bool (*has_slot)(conf_object_t *obj, const char *NOTNULL slot); bool (*add_slot)(conf_object_t *obj, const char *NOTNULL slot); bool (*del_slot)(conf_object_t *obj, const char *NOTNULL slot); }; #define COMPONENT_INTERFACE "component"
post_instantiate | Global Context |
pre_instantiate | Global Context |
create_cell | Global Context |
get_slots | Cell Context |
get_objects | Cell Context |
get_slot_value | Global Context |
set_slot_value | Global Context |
add_slot | Global Context |
del_slot | Global Context |