diff options
author | Joel Sherrill <joel.sherrill@OARcorp.com> | 2011-04-04 18:44:16 +0000 |
---|---|---|
committer | Joel Sherrill <joel.sherrill@OARcorp.com> | 2011-04-04 18:44:16 +0000 |
commit | bd9baa8184e8ff78b6644e8d88817a3ac8ec67fe (patch) | |
tree | 626eb6aa1a8779330e88e16987c6f25c226507f6 /cpukit/score/src/rbtree.c | |
parent | 2011-04-04 Sebastien Bourdeauducq <sebastien.bourdeauducq@gmail.com> (diff) | |
download | rtems-bd9baa8184e8ff78b6644e8d88817a3ac8ec67fe.tar.bz2 |
2010-07-28 Gedare Bloom <giddyup44@yahoo.com>
PR 1641/cpukit
* sapi/Makefile.am, sapi/preinstall.am, score/Makefile.am,
score/preinstall.am: Add Red Black Tree data structure to score.
* sapi/include/rtems/rbtree.h, sapi/inline/rtems/rbtree.inl,
score/include/rtems/score/rbtree.h, score/inline/rtems/score/rbtree.inl,
score/src/rbtree.c, score/src/rbtreeextract.c,
score/src/rbtreefind.c, score/src/rbtreefindheader.c,
score/src/rbtreeget.c, score/src/rbtreeinsert.c,
score/src/rbtreepeek.c: New files.
Diffstat (limited to 'cpukit/score/src/rbtree.c')
-rw-r--r-- | cpukit/score/src/rbtree.c | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/cpukit/score/src/rbtree.c b/cpukit/score/src/rbtree.c new file mode 100644 index 0000000000..2c1035b3dc --- /dev/null +++ b/cpukit/score/src/rbtree.c @@ -0,0 +1,58 @@ +/* + * Copyright (c) 2010 Gedare Bloom. + * + * The license and distribution terms for this file may be + * found in the file LICENSE in this distribution or at + * http://www.rtems.com/license/LICENSE. + * + * $Id$ + */ + +#if HAVE_CONFIG_H +#include "config.h" +#endif + +#include <rtems/system.h> +#include <rtems/score/address.h> +#include <rtems/score/rbtree.h> +#include <rtems/score/isr.h> + +/*PAGE + * + * _RBTree_Initialize + * + * This kernel routine initializes a Red-Black Tree. + * + * Input parameters: + * the_rbtree - pointer to rbtree header + * starting_address - starting address of first node + * number_nodes - number of nodes in rbtree + * node_size - size of node in bytes + * + * Output parameters: NONE + */ + +void _RBTree_Initialize( + RBTree_Control *the_rbtree, + void *starting_address, + size_t number_nodes, + size_t node_size +) +{ + size_t count; + RBTree_Node *next; + + /* TODO: Error message? */ + if (!the_rbtree) return; + + /* could do sanity checks here */ + _RBTree_Initialize_empty(the_rbtree); + + count = number_nodes; + next = starting_address; + while ( count-- ) { + _RBTree_Insert(the_rbtree, next); + next = (RBTree_Node *) + _Addresses_Add_offset( (void *) next, node_size ); + } +} |