summaryrefslogtreecommitdiffstats
path: root/cpukit/sapi/src/rbtreeinsert.c
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2016-06-17 07:38:17 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2016-06-22 14:37:11 +0200
commit768c483b7063025dfd130b29dc3466b6360042e0 (patch)
treefbddff076e67f787bb21c4c8d82dcc50a6cc1335 /cpukit/sapi/src/rbtreeinsert.c
parentscore: Rework EDF scheduler (diff)
downloadrtems-768c483b7063025dfd130b29dc3466b6360042e0.tar.bz2
score: Move _RBTree_Insert()
The _RBTree_Insert() is no longer used in the score. Move it to sapi and make it rtems_rbtree_insert().
Diffstat (limited to 'cpukit/sapi/src/rbtreeinsert.c')
-rw-r--r--cpukit/sapi/src/rbtreeinsert.c57
1 files changed, 57 insertions, 0 deletions
diff --git a/cpukit/sapi/src/rbtreeinsert.c b/cpukit/sapi/src/rbtreeinsert.c
new file mode 100644
index 0000000000..a4850ff4cf
--- /dev/null
+++ b/cpukit/sapi/src/rbtreeinsert.c
@@ -0,0 +1,57 @@
+/*
+ * Copyright (c) 2010-2012 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.org/license/LICENSE.
+ */
+
+#if HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <rtems/rbtree.h>
+#include <rtems/score/rbtreeimpl.h>
+
+RTEMS_STATIC_ASSERT(
+ sizeof( RBTree_Compare_result ) >= sizeof( intptr_t ),
+ RBTree_Compare_result_intptr_t
+);
+
+RTEMS_STATIC_ASSERT(
+ sizeof( RBTree_Compare_result ) >= sizeof( int32_t ),
+ RBTree_Compare_result_int32_t
+);
+
+rtems_rbtree_node *rtems_rbtree_insert(
+ rtems_rbtree_control *the_rbtree,
+ rtems_rbtree_node *the_node,
+ RBTree_Compare compare,
+ bool is_unique
+)
+{
+ rtems_rbtree_node **which = _RBTree_Root_reference( the_rbtree );
+ rtems_rbtree_node *parent = NULL;
+
+ while ( *which != NULL ) {
+ RBTree_Compare_result compare_result;
+
+ parent = *which;
+ compare_result = ( *compare )( the_node, parent );
+
+ if ( is_unique && _RBTree_Is_equal( compare_result ) ) {
+ return parent;
+ }
+
+ if ( _RBTree_Is_lesser( compare_result ) ) {
+ which = _RBTree_Left_reference( parent );
+ } else {
+ which = _RBTree_Right_reference( parent );
+ }
+ }
+
+ _RBTree_Add_child( the_node, parent, which );
+ _RBTree_Insert_color( the_rbtree, the_node );
+
+ return NULL;
+}