source: rtems/cpukit/score/include/rtems/score/chain.h @ 64939bc

4.115
Last change on this file since 64939bc was c499856, checked in by Chris Johns <chrisj@…>, on 03/20/14 at 21:10:47

Change all references of rtems.com to rtems.org.

  • Property mode set to 100644
File size: 2.5 KB
Line 
1/**
2 * @file
3 *
4 * @ingroup ScoreChain
5 *
6 * @brief Chain Handler API
7 */
8
9/*
10 *  Copyright (c) 2010 embedded brains GmbH.
11 *
12 *  COPYRIGHT (c) 1989-2006.
13 *  On-Line Applications Research Corporation (OAR).
14 *
15 *  The license and distribution terms for this file may be
16 *  found in the file LICENSE in this distribution or at
17 *  http://www.rtems.org/license/LICENSE.
18 */
19
20#ifndef _RTEMS_SCORE_CHAIN_H
21#define _RTEMS_SCORE_CHAIN_H
22
23#ifdef __cplusplus
24extern "C" {
25#endif
26
27/**
28 *  @defgroup ScoreChain Chain Handler
29 *
30 *  @ingroup Score
31 *
32 *  The Chain Handler is used to manage sets of entities.  This handler
33 *  provides two data structures.  The Chain Node data structure is included
34 *  as the first part of every data structure that will be placed on
35 *  a chain.  The second data structure is Chain Control which is used
36 *  to manage a set of Chain Nodes.
37 */
38/**@{*/
39
40/**
41 *  @typedef Chain_Node
42 *
43 *  This type definition promotes the name for the Chain Node used by
44 *  all RTEMS code.  It is a separate type definition because a forward
45 *  reference is required to define it.  See @ref Chain_Node_struct for
46 *  detailed information.
47 */
48typedef struct Chain_Node_struct Chain_Node;
49
50/**
51 *  @struct Chain_Node_struct
52 *
53 *  This is used to manage each element (node) which is placed
54 *  on a chain.
55 *
56 *  @note Typically, a more complicated structure will use the
57 *        chain package.  The more complicated structure will
58 *        include a chain node as the first element in its
59 *        control structure.  It will then call the chain package
60 *        with a pointer to that node element.  The node pointer
61 *        and the higher level structure start at the same address
62 *        so the user can cast the pointers back and forth.
63 *
64 */
65struct Chain_Node_struct {
66  /** This points to the node after this one on this chain. */
67  Chain_Node *next;
68  /** This points to the node immediate prior to this one on this chain. */
69  Chain_Node *previous;
70};
71
72/**
73 *  @struct Chain_Control
74 *
75 * This is used to manage a chain.  A chain consists of a doubly
76 * linked list of zero or more nodes.
77 *
78 * @note This implementation does not require special checks for
79 *   manipulating the first and last elements on the chain.
80 *   To accomplish this the @a Chain_Control structure is
81 *   treated as two overlapping @ref Chain_Node structures.
82 */
83typedef union {
84  struct {
85    Chain_Node Node;
86    Chain_Node *fill;
87  } Head;
88
89  struct {
90    Chain_Node *fill;
91    Chain_Node Node;
92  } Tail;
93} Chain_Control;
94
95/**@}*/
96
97#ifdef __cplusplus
98}
99#endif
100
101#endif
102/* end of include file */
Note: See TracBrowser for help on using the repository browser.