summaryrefslogtreecommitdiffstats
path: root/cpukit/score/src/rbtree.c
diff options
context:
space:
mode:
authorJoel Sherrill <joel.sherrill@OARcorp.com>2011-04-04 18:44:16 +0000
committerJoel Sherrill <joel.sherrill@OARcorp.com>2011-04-04 18:44:16 +0000
commitbd9baa8184e8ff78b6644e8d88817a3ac8ec67fe (patch)
tree626eb6aa1a8779330e88e16987c6f25c226507f6 /cpukit/score/src/rbtree.c
parent2011-04-04 Sebastien Bourdeauducq <sebastien.bourdeauducq@gmail.com> (diff)
downloadrtems-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.c58
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 );
+ }
+}