![]() |
RTEMS 7.0-rc1
|
The chain container provides data structures and directives to manage user-defined data structures in doubly-linked lists. More...
Files | |
| file | chain.h |
| This header file provides the Chains API. | |
| file | chainappendnotify.c |
| This source file contains the implementation of rtems_chain_append_with_notification(). | |
| file | chaingetnotify.c |
| This source file contains the implementation of rtems_chain_get_with_notification(). | |
| file | chaingetwait.c |
| This source file contains the implementation of rtems_chain_get_with_wait(). | |
| file | chainprependnotify.c |
| This source file contains the implementation of rtems_chain_prepend_with_notification(). | |
| file | chainprotected.c |
| This source file contains the implementation of rtems_chain_append(), rtems_chain_append_with_empty_check(), rtems_chain_extract(), rtems_chain_get(), rtems_chain_get_with_empty_check(), rtems_chain_insert(), rtems_chain_prepend(), and rtems_chain_prepend_with_empty_check(). | |
Macros | |
| #define | RTEMS_CHAIN_INITIALIZER_EMPTY(name) CHAIN_INITIALIZER_EMPTY( name ) |
| Chain initializer for an empty chain with designator name. | |
| #define | RTEMS_CHAIN_INITIALIZER_ONE_NODE(node) CHAIN_INITIALIZER_ONE_NODE( node ) |
| Chain initializer for a chain with one node. | |
| #define | RTEMS_CHAIN_NODE_INITIALIZER_ONE_NODE_CHAIN(chain) CHAIN_NODE_INITIALIZER_ONE_NODE_CHAIN( chain ) |
| Chain node initializer for a chain containing exactly this node. | |
| #define | RTEMS_CHAIN_DEFINE_EMPTY(name) rtems_chain_control name = RTEMS_CHAIN_INITIALIZER_EMPTY( name ) |
| Chain definition for an empty chain with designator name. | |
Typedefs | |
| typedef Chain_Node | rtems_chain_node |
| typedef Chain_Control | rtems_chain_control |
Functions | |
| rtems_status_code | rtems_chain_append_with_notification (rtems_chain_control *chain, rtems_chain_node *node, rtems_id task, rtems_event_set events) |
| Appends the node to the chain and sends the events to the task if the chain was empty before the append. | |
| rtems_status_code | rtems_chain_prepend_with_notification (rtems_chain_control *chain, rtems_chain_node *node, rtems_id task, rtems_event_set events) |
| Prepends the node to the chain and sends the events to the task if the chain was empty before the prepend. | |
| rtems_status_code | rtems_chain_get_with_notification (rtems_chain_control *chain, rtems_id task, rtems_event_set events, rtems_chain_node **node) |
| Gets the first node of the chain and sends the events to the task if the chain is empty after the get. | |
| rtems_status_code | rtems_chain_get_with_wait (rtems_chain_control *chain, rtems_event_set events, rtems_interval timeout, rtems_chain_node **node) |
| Gets the first node from the chain with an events wait if empty. | |
| void | rtems_chain_extract (rtems_chain_node *the_node) |
| Extract the specified node from a chain. | |
| rtems_chain_node * | rtems_chain_get (rtems_chain_control *the_chain) |
| Obtain the first node on a chain. | |
| void | rtems_chain_insert (rtems_chain_node *after_node, rtems_chain_node *the_node) |
| Insert a node on a chain. | |
| void | rtems_chain_append (rtems_chain_control *the_chain, rtems_chain_node *the_node) |
| Append a node on the end of a chain. | |
| void | rtems_chain_prepend (rtems_chain_control *the_chain, rtems_chain_node *the_node) |
| Prepend a node. | |
| bool | rtems_chain_append_with_empty_check (rtems_chain_control *chain, rtems_chain_node *node) |
| Checks if the chain is empty and appends the node. | |
| bool | rtems_chain_prepend_with_empty_check (rtems_chain_control *chain, rtems_chain_node *node) |
| Checks if the chain is empty and prepends the node. | |
| bool | rtems_chain_get_with_empty_check (rtems_chain_control *chain, rtems_chain_node **node) |
| Tries to get the first node and check if the chain is empty afterwards. | |
The chain container provides data structures and directives to manage user-defined data structures in doubly-linked lists.
| #define RTEMS_CHAIN_INITIALIZER_ONE_NODE | ( | node | ) | CHAIN_INITIALIZER_ONE_NODE( node ) |
Chain initializer for a chain with one node.
| #define RTEMS_CHAIN_NODE_INITIALIZER_ONE_NODE_CHAIN | ( | chain | ) | CHAIN_NODE_INITIALIZER_ONE_NODE_CHAIN( chain ) |
Chain node initializer for a chain containing exactly this node.
| void rtems_chain_append | ( | rtems_chain_control * | the_chain, |
| rtems_chain_node * | the_node | ||
| ) |
Append a node on the end of a chain.
This routine appends the_node onto the end of the_chain.
NOTE: It disables interrupts to ensure the atomicity of the append operation.
| bool rtems_chain_append_with_empty_check | ( | rtems_chain_control * | chain, |
| rtems_chain_node * | node | ||
| ) |
Checks if the chain is empty and appends the node.
Interrupts are disabled to ensure the atomicity of the operation.
| true | The chain was empty before the append. |
| false | The chain contained at least one node before the append. |
| rtems_status_code rtems_chain_append_with_notification | ( | rtems_chain_control * | chain, |
| rtems_chain_node * | node, | ||
| rtems_id | task, | ||
| rtems_event_set | events | ||
| ) |
Appends the node to the chain and sends the events to the task if the chain was empty before the append.
| RTEMS_SUCCESSFUL | Successful operation. |
| RTEMS_INVALID_ID | No such task. |
| void rtems_chain_extract | ( | rtems_chain_node * | the_node | ) |
Extract the specified node from a chain.
This routine extracts the_node from the chain on which it resides. It disables interrupts to ensure the atomicity of the extract operation.
| rtems_chain_node * rtems_chain_get | ( | rtems_chain_control * | the_chain | ) |
Obtain the first node on a chain.
This function removes the first node from the_chain and returns a pointer to that node. If the_chain is empty, then NULL is returned.
NOTE: It disables interrupts to ensure the atomicity of the get operation.
| bool rtems_chain_get_with_empty_check | ( | rtems_chain_control * | chain, |
| rtems_chain_node ** | node | ||
| ) |
Tries to get the first node and check if the chain is empty afterwards.
This function removes the first node from the chain and returns a pointer to that node in node. If the chain is empty, then NULL is returned.
Interrupts are disabled to ensure the atomicity of the operation.
| true | The chain is empty after the node removal. |
| false | The chain contained at least one node after the node removal. |
| rtems_status_code rtems_chain_get_with_notification | ( | rtems_chain_control * | chain, |
| rtems_id | task, | ||
| rtems_event_set | events, | ||
| rtems_chain_node ** | node | ||
| ) |
Gets the first node of the chain and sends the events to the task if the chain is empty after the get.
| RTEMS_SUCCESSFUL | Successful operation. |
| RTEMS_INVALID_ID | No such task. |
| rtems_status_code rtems_chain_get_with_wait | ( | rtems_chain_control * | chain, |
| rtems_event_set | events, | ||
| rtems_interval | timeout, | ||
| rtems_chain_node ** | node | ||
| ) |
Gets the first node from the chain with an events wait if empty.
This directive gets the first node of the chain if it is available, otherwise it waits for the calling task to receive all events and then tries to get the first node again. The get and wait is retried indefinitely until either a node is available or the event receive times out.
Each event receive starts a new timeout based on the value of timeout.
| RTEMS_SUCCESSFUL | Successful operation. |
| RTEMS_TIMEOUT | Timeout. |
| void rtems_chain_insert | ( | rtems_chain_node * | after_node, |
| rtems_chain_node * | the_node | ||
| ) |
Insert a node on a chain.
This routine inserts the_node on a chain immediately following after_node.
NOTE: It disables interrupts to ensure the atomicity of the extract operation.
| void rtems_chain_prepend | ( | rtems_chain_control * | the_chain, |
| rtems_chain_node * | the_node | ||
| ) |
Prepend a node.
This routine prepends the_node onto the front of the_chain.
| [in] | the_chain | is the chain to be operated upon. |
| [in] | the_node | is the node to be prepended. |
NOTE: It disables interrupts to ensure the atomicity of the prepend operation.
| bool rtems_chain_prepend_with_empty_check | ( | rtems_chain_control * | chain, |
| rtems_chain_node * | node | ||
| ) |
Checks if the chain is empty and prepends the node.
Interrupts are disabled to ensure the atomicity of the operation.
| true | The chain was empty before the prepend. |
| false | The chain contained at least one node before the prepend. |
| rtems_status_code rtems_chain_prepend_with_notification | ( | rtems_chain_control * | chain, |
| rtems_chain_node * | node, | ||
| rtems_id | task, | ||
| rtems_event_set | events | ||
| ) |
Prepends the node to the chain and sends the events to the task if the chain was empty before the prepend.
| RTEMS_SUCCESSFUL | Successful operation. |
| RTEMS_INVALID_ID | No such task. |