<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>change log for rtems (2011-08-02)</title>
</head>
<body text='#000000' bgcolor='#ffffff'>
<a name='cs1'></a>
<table border='0' cellspacing='0' cellpadding='5' width='100%' bgcolor='#eeeeee'>
<tr><td colspan='3' bgcolor='#dddddd'>
 <font color='#bb2222'><strong>joel</strong></font>
</td></tr>
<tr><td colspan='3' bgcolor='#dddddd'><pre>2011-08-02 Joel Sherrill <joel.sherrill@oarcorp.com>

        PR 1877/cpukit
        * libfs/src/imfs/imfs_mknod.c, libfs/src/imfs/memfile.c,
        sapi/inline/rtems/rbtree.inl, score/include/rtems/score/rbtree.h,
        score/inline/rtems/score/rbtree.inl, score/src/rbtree.c,
        score/src/rbtreefind.c, score/src/rbtreeinsert.c: Add comparison
        function for RBTrees.
</pre></td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//rtems/cpukit/ChangeLog.diff?r1=text&tr1=1.2900&r2=text&tr2=1.2901&diff_format=h">M</a></td><td width='1%'>1.2901</td><td width='100%'>cpukit/ChangeLog</td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//rtems/cpukit/libfs/src/imfs/imfs_mknod.c.diff?r1=text&tr1=1.15&r2=text&tr2=1.16&diff_format=h">M</a></td><td width='1%'>1.16</td><td width='100%'>cpukit/libfs/src/imfs/imfs_mknod.c</td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//rtems/cpukit/libfs/src/imfs/memfile.c.diff?r1=text&tr1=1.40&r2=text&tr2=1.41&diff_format=h">M</a></td><td width='1%'>1.41</td><td width='100%'>cpukit/libfs/src/imfs/memfile.c</td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//rtems/cpukit/sapi/inline/rtems/rbtree.inl.diff?r1=text&tr1=1.1&r2=text&tr2=1.2&diff_format=h">M</a></td><td width='1%'>1.2</td><td width='100%'>cpukit/sapi/inline/rtems/rbtree.inl</td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//rtems/cpukit/score/include/rtems/score/rbtree.h.diff?r1=text&tr1=1.4&r2=text&tr2=1.5&diff_format=h">M</a></td><td width='1%'>1.5</td><td width='100%'>cpukit/score/include/rtems/score/rbtree.h</td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//rtems/cpukit/score/inline/rtems/score/rbtree.inl.diff?r1=text&tr1=1.1&r2=text&tr2=1.2&diff_format=h">M</a></td><td width='1%'>1.2</td><td width='100%'>cpukit/score/inline/rtems/score/rbtree.inl</td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//rtems/cpukit/score/src/rbtree.c.diff?r1=text&tr1=1.3&r2=text&tr2=1.4&diff_format=h">M</a></td><td width='1%'>1.4</td><td width='100%'>cpukit/score/src/rbtree.c</td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//rtems/cpukit/score/src/rbtreefind.c.diff?r1=text&tr1=1.2&r2=text&tr2=1.3&diff_format=h">M</a></td><td width='1%'>1.3</td><td width='100%'>cpukit/score/src/rbtreefind.c</td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//rtems/cpukit/score/src/rbtreeinsert.c.diff?r1=text&tr1=1.2&r2=text&tr2=1.3&diff_format=h">M</a></td><td width='1%'>1.3</td><td width='100%'>cpukit/score/src/rbtreeinsert.c</td></tr>
</table>
<pre>
<font color='#006600'>diff -u rtems/cpukit/ChangeLog:1.2900 rtems/cpukit/ChangeLog:1.2901
--- rtems/cpukit/ChangeLog:1.2900       Tue Aug  2 08:59:48 2011
+++ rtems/cpukit/ChangeLog      Tue Aug  2 14:25:58 2011
</font><font color='#997700'>@@ -1,3 +1,12 @@
</font><font color='#000088'>+2011-08-02    Joel Sherrill <joel.sherrill@oarcorp.com>
+
+       PR 1877/cpukit
+       * libfs/src/imfs/imfs_mknod.c, libfs/src/imfs/memfile.c,
+       sapi/inline/rtems/rbtree.inl, score/include/rtems/score/rbtree.h,
+       score/inline/rtems/score/rbtree.inl, score/src/rbtree.c,
+       score/src/rbtreefind.c, score/src/rbtreeinsert.c: Add comparison
+       function for RBTrees.
+
</font> 2011-08-02        Jennifer Averett <Jennifer.Averett@OARcorp.com>
 
        * score/include/rtems/score/coremutex.h: Move check dispatch for seize

<font color='#006600'>diff -u rtems/cpukit/libfs/src/imfs/imfs_mknod.c:1.15 rtems/cpukit/libfs/src/imfs/imfs_mknod.c:1.16
--- rtems/cpukit/libfs/src/imfs/imfs_mknod.c:1.15       Mon Aug  2 13:27:23 2010
+++ rtems/cpukit/libfs/src/imfs/imfs_mknod.c    Tue Aug  2 14:25:59 2011
</font><font color='#997700'>@@ -72,5 +72,7 @@
</font>   if ( !new_node )
     rtems_set_errno_and_return_minus_one( ENOMEM );
 
<font color='#000088'>+  IMFS_update_ctime(new_node->Parent);
+  IMFS_update_mtime(new_node->Parent);
</font>   return 0;
 }

<font color='#006600'>diff -u rtems/cpukit/libfs/src/imfs/memfile.c:1.40 rtems/cpukit/libfs/src/imfs/memfile.c:1.41
--- rtems/cpukit/libfs/src/imfs/memfile.c:1.40  Tue Apr  5 08:38:49 2011
+++ rtems/cpukit/libfs/src/imfs/memfile.c       Tue Aug  2 14:25:59 2011
</font><font color='#997700'>@@ -326,6 +326,9 @@
</font>    *  Set the new length of the file.
    */
   the_jnode->info.file.size = new_length;
<font color='#000088'>+
+  IMFS_update_ctime(the_jnode);
+  IMFS_update_mtime(the_jnode);
</font>   return 0;
 }
 

<font color='#006600'>diff -u rtems/cpukit/sapi/inline/rtems/rbtree.inl:1.1 rtems/cpukit/sapi/inline/rtems/rbtree.inl:1.2
--- rtems/cpukit/sapi/inline/rtems/rbtree.inl:1.1       Mon Apr  4 13:44:16 2011
+++ rtems/cpukit/sapi/inline/rtems/rbtree.inl   Tue Aug  2 14:25:59 2011
</font><font color='#997700'>@@ -36,12 +36,14 @@
</font>  */
 RTEMS_INLINE_ROUTINE void rtems_rbtree_initialize(
   rtems_rbtree_control *the_rbtree,
<font color='#880000'>-  void                *starting_address,
-  size_t               number_nodes,
-  size_t               node_size
</font><font color='#000088'>+  void                 *compare_function,
+  void                 *starting_address,
+  size_t                number_nodes,
+  size_t                node_size
</font> )
 {
<font color='#880000'>-  _RBTree_Initialize( the_rbtree, starting_address, number_nodes, node_size);
</font><font color='#000088'>+  _RBTree_Initialize( the_rbtree, compare_function, starting_address,
+    number_nodes, node_size);
</font> }
 
 /**
<font color='#997700'>@@ -50,10 +52,11 @@
</font>  *  This routine initializes @a the_rbtree to contain zero nodes.
  */
 RTEMS_INLINE_ROUTINE void rtems_rbtree_initialize_empty(
<font color='#880000'>-  rtems_rbtree_control *the_rbtree
</font><font color='#000088'>+  rtems_rbtree_control *the_rbtree,
+  void                 *compare_function
</font> )
 {
<font color='#880000'>-  _RBTree_Initialize_empty( the_rbtree );
</font><font color='#000088'>+  _RBTree_Initialize_empty( the_rbtree, compare_function );
</font> }
 
 /**
<font color='#997700'>@@ -249,17 +252,18 @@
</font>   return _RBTree_Is_root( the_rbtree, the_node );
 }
 
<font color='#880000'>-/** @brief Find the node with given value in the tree
</font><font color='#000088'>+/** @brief Find the node with given key in the tree
</font>  *
<font color='#880000'>- *  This function returns a pointer to the node having value equal to @a value<span style="background-color: #FF0000"> </span>
- *  if it exists within @a the_rbtree, and NULL if not.<span style="background-color: #FF0000"> </span>
</font><font color='#000088'>+ *  This function returns a pointer to the node having key equal to the key
+ *  of @a the_node if it exists within @a the_rbtree, and NULL if not.
+ *  @a the_node has to be made up before a search.
</font>  */
 RTEMS_INLINE_ROUTINE rtems_rbtree_node* rtems_rbtree_find(
   rtems_rbtree_control *the_rbtree,
<font color='#880000'>-  unsigned int value
</font><font color='#000088'>+  rtems_rbtree_node *the_node
</font> )
 {
<font color='#880000'>-  return _RBTree_Find( the_rbtree, value );
</font><font color='#000088'>+  return _RBTree_Find( the_rbtree, the_node );
</font> }
 
 /** @brief Find the node's in-order predecessor<span style="background-color: #FF0000"> </span>

<font color='#006600'>diff -u rtems/cpukit/score/include/rtems/score/rbtree.h:1.4 rtems/cpukit/score/include/rtems/score/rbtree.h:1.5
--- rtems/cpukit/score/include/rtems/score/rbtree.h:1.4 Fri Jun 17 10:40:09 2011
+++ rtems/cpukit/score/include/rtems/score/rbtree.h     Tue Aug  2 14:25:59 2011
</font><font color='#997700'>@@ -75,8 +75,6 @@
</font>   RBTree_Node *parent;
   /** child[0] points to the left child, child[1] points to the right child */
   RBTree_Node *child[2];
<font color='#880000'>-  /** This is the integer value stored by this node, used for sorting */
-  unsigned int value;
</font>   /** The color of the node. Either red or black */
   RBTree_Color color;
 };
<font color='#997700'>@@ -127,6 +125,12 @@
</font>   RBTree_Node *root;
   /** This points to the min and max nodes of this RBT. */
   RBTree_Node *first[2];
<font color='#000088'>+  /**
+   * Comparison function pointer. Keys to compare has to be found
+   * inside to maintain generality. It has to return 1 if first node
+   * has higher key than second, -1 if lower, 0 if equal.
+   */
+  int (*compare_function) (RBTree_Node*, RBTree_Node*);
</font> } RBTree_Control;
 
 /**
<font color='#997700'>@@ -138,6 +142,7 @@
</font>   .root = NULL, \
   .first[0] = NULL, \
   .first[1] = NULL, \
<font color='#000088'>+  .compare_function = NULL \
</font> }
 
 /**
<font color='#997700'>@@ -154,7 +159,6 @@
</font>   .parent = NULL, \
   .child[0] = NULL, \
   .child[1] = NULL, \
<font color='#880000'>-  .value = -1, \
</font>   RBT_RED \
 }
 
<font color='#997700'>@@ -173,9 +177,10 @@
</font>  */
 void _RBTree_Initialize(
   RBTree_Control *the_rbtree,
<font color='#880000'>-  void          *starting_address,
-  size_t         number_nodes,
-  size_t         node_size
</font><font color='#000088'>+  void           *compare_function,
+  void           *starting_address,
+  size_t          number_nodes,
+  size_t          node_size
</font> );
 
 /**
<font color='#997700'>@@ -214,14 +219,15 @@
</font> );
 
 /**
<font color='#880000'>- * @brief Find the node with given value in the tree
</font><font color='#000088'>+ * @brief Find the node with given key in the tree
</font>  *
<font color='#880000'>- *  This function returns a pointer to the node with value equal to @a value
- *  if it exists in the Red-Black Tree @a the_rbtree, and NULL if not.
</font><font color='#000088'>+ *  This function returns a pointer to the node with key equal to a key
+ *  of @a the_node if it exists in the Red-Black Tree @a the_rbtree,
+ *  and NULL if not.
</font>  */
 RBTree_Node *_RBTree_Find(
   RBTree_Control *the_rbtree,
<font color='#880000'>-  unsigned int value
</font><font color='#000088'>+  RBTree_Node *the_node
</font> );
 
 /**

<font color='#006600'>diff -u rtems/cpukit/score/inline/rtems/score/rbtree.inl:1.1 rtems/cpukit/score/inline/rtems/score/rbtree.inl:1.2
--- rtems/cpukit/score/inline/rtems/score/rbtree.inl:1.1        Mon Apr  4 13:44:16 2011
+++ rtems/cpukit/score/inline/rtems/score/rbtree.inl    Tue Aug  2 14:25:59 2011
</font><font color='#997700'>@@ -235,13 +235,15 @@
</font>  *  This routine initializes @a the_rbtree to contain zero nodes.
  */
 RTEMS_INLINE_ROUTINE void _RBTree_Initialize_empty(
<font color='#880000'>-    RBTree_Control *the_rbtree
</font><font color='#000088'>+    RBTree_Control *the_rbtree,
+    void           *compare_function
</font>     )
 {
<font color='#880000'>-  the_rbtree->permanent_null = NULL;
-  the_rbtree->root           = NULL;
-  the_rbtree->first[0]       = NULL;
-  the_rbtree->first[1]       = NULL;
</font><font color='#000088'>+  the_rbtree->permanent_null   = NULL;
+  the_rbtree->root             = NULL;
+  the_rbtree->first[0]         = NULL;
+  the_rbtree->first[1]         = NULL;
+  the_rbtree->compare_function = compare_function;
</font> }
 
 /** @brief Return a pointer to node's grandparent
<font color='#997700'>@@ -310,21 +312,26 @@
</font>   return (RBTree_Control*)the_node;
 }
 
<font color='#880000'>-/** @brief Find the node with given value in the tree
</font><font color='#000088'>+/** @brief Find the node with given key in the tree
</font>  *
  *  This function returns a pointer to the node in @a the_rbtree<span style="background-color: #FF0000"> </span>
<font color='#880000'>- *  having value equal to @a the_value if it exists, and NULL if not.<span style="background-color: #FF0000"> </span>
</font><font color='#000088'>+ *  having key equal to key of  @a the_node if it exists,
+ *  and NULL if not. @a the_node has to be made up before a search.
</font>  */
 RTEMS_INLINE_ROUTINE RBTree_Node *_RBTree_Find_unprotected(
     RBTree_Control *the_rbtree,
<font color='#880000'>-    unsigned int the_value
</font><font color='#000088'>+    RBTree_Node *the_node
</font>     )
 {
   RBTree_Node* iter_node = the_rbtree->root;
<font color='#000088'>+  int compare_result;
</font>   while (iter_node) {
<font color='#880000'>-    if (the_value == iter_node->value) return(iter_node);
</font><font color='#000088'>+    compare_result = the_rbtree->compare_function(the_node, iter_node);
+    if (compare_result == 0) {
+        return(iter_node);
+    }
</font> 
<font color='#880000'>-    RBTree_Direction dir = the_value > iter_node->value;
</font><font color='#000088'>+    RBTree_Direction dir = (compare_result != -1);
</font>     iter_node = iter_node->child[dir];
   } /* while(iter_node) */
 

<font color='#006600'>diff -u rtems/cpukit/score/src/rbtree.c:1.3 rtems/cpukit/score/src/rbtree.c:1.4
--- rtems/cpukit/score/src/rbtree.c:1.3 Sun Jul 24 18:55:14 2011
+++ rtems/cpukit/score/src/rbtree.c     Tue Aug  2 14:25:59 2011
</font><font color='#997700'>@@ -33,6 +33,7 @@
</font> 
 void _RBTree_Initialize(
   RBTree_Control *the_rbtree,
<font color='#000088'>+  void           *compare_function,
</font>   void           *starting_address,
   size_t         number_nodes,
   size_t         node_size
<font color='#997700'>@@ -45,7 +46,7 @@
</font>   if (!the_rbtree) return;
 
   /* could do sanity checks here */
<font color='#880000'>-  _RBTree_Initialize_empty(the_rbtree);
</font><font color='#000088'>+  _RBTree_Initialize_empty(the_rbtree, compare_function);
</font> 
   count = number_nodes;
   next  = starting_address;

<font color='#006600'>diff -u rtems/cpukit/score/src/rbtreefind.c:1.2 rtems/cpukit/score/src/rbtreefind.c:1.3
--- rtems/cpukit/score/src/rbtreefind.c:1.2     Mon May 23 21:44:57 2011
+++ rtems/cpukit/score/src/rbtreefind.c Tue Aug  2 14:25:59 2011
</font><font color='#997700'>@@ -21,11 +21,11 @@
</font>  *  _RBTree_Find
  *
  *  This kernel routine returns a pointer to the rbtree node containing the
<font color='#880000'>- *  given value within the given tree, if it exists, or NULL otherwise.
</font><font color='#000088'>+ *  given key within the given tree, if it exists, or NULL otherwise.
</font>  *
  *  Input parameters:
  *    the_rbtree - pointer to rbtree control
<font color='#880000'>- *    the_value - value of the node to search for
</font><font color='#000088'>+ *    search_node - node with the key to search for
</font>  *
  *  Output parameters:
  *    return_node - pointer to control header of rbtree
<font color='#997700'>@@ -38,7 +38,7 @@
</font> 
 RBTree_Node *_RBTree_Find(
   RBTree_Control *the_rbtree,
<font color='#880000'>-  unsigned int the_value
</font><font color='#000088'>+  RBTree_Node *search_node
</font> )
 {
   ISR_Level          level;
<font color='#997700'>@@ -46,7 +46,7 @@
</font> 
   return_node = NULL;
   _ISR_Disable( level );
<font color='#880000'>-      return_node = _RBTree_Find_unprotected( the_rbtree, the_value );
</font><font color='#000088'>+      return_node = _RBTree_Find_unprotected( the_rbtree, search_node );
</font>   _ISR_Enable( level );
   return return_node;
 }

<font color='#006600'>diff -u rtems/cpukit/score/src/rbtreeinsert.c:1.2 rtems/cpukit/score/src/rbtreeinsert.c:1.3
--- rtems/cpukit/score/src/rbtreeinsert.c:1.2   Mon May 23 21:44:57 2011
+++ rtems/cpukit/score/src/rbtreeinsert.c       Tue Aug  2 14:25:59 2011
</font><font color='#997700'>@@ -71,7 +71,7 @@
</font>  *
  *  @retval 0 Successfully inserted.
  *  @retval -1 NULL @a the_node.
<font color='#880000'>- *  @retval RBTree_Node* if one with equal value to @a the_node->value exists
</font><font color='#000088'>+ *  @retval RBTree_Node* if one with equal key to the key of @a the_node exists
</font>  *          in @a the_rbtree.
  *
  *  @note It does NOT disable interrupts to ensure the atomicity
<font color='#997700'>@@ -85,6 +85,7 @@
</font>   if(!the_node) return (RBTree_Node*)-1;
 
   RBTree_Node *iter_node = the_rbtree->root;
<font color='#000088'>+  int compare_result;
</font> 
   if (!iter_node) { /* special case: first node inserted */
     the_node->color = RBT_BLACK;
<font color='#997700'>@@ -95,8 +96,9 @@
</font>   } else {
     /* typical binary search tree insert, descend tree to leaf and insert */
     while (iter_node) {
<font color='#880000'>-      if(the_node->value == iter_node->value) return(iter_node);
-      RBTree_Direction dir = the_node->value > iter_node->value;
</font><font color='#000088'>+      compare_result = the_rbtree->compare_function(the_node, iter_node);
+      if ( !compare_result ) return iter_node;
+      RBTree_Direction dir = (compare_result != -1);
</font>       if (!iter_node->child[dir]) {
         the_node->child[RBT_LEFT] = the_node->child[RBT_RIGHT] = NULL;
         the_node->color = RBT_RED;
</pre>
<p> </p>
<a name='cs2'></a>
<table border='0' cellspacing='0' cellpadding='5' width='100%' bgcolor='#eeeeee'>
<tr><td colspan='3' bgcolor='#dddddd'>
 <font color='#bb2222'><strong>joel</strong></font>
</td></tr>
<tr><td colspan='3' bgcolor='#dddddd'><pre>2011-08-02 Joel Sherrill <joel.sherrill@oarcorp.com>

        PR 1877/cpukit
        * sprbtree01/init.c: Add comparison function for RBTrees.
</pre></td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//rtems/testsuites/sptests/ChangeLog.diff?r1=text&tr1=1.470&r2=text&tr2=1.471&diff_format=h">M</a></td><td width='1%'>1.471</td><td width='100%'>testsuites/sptests/ChangeLog</td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//rtems/testsuites/sptests/sprbtree01/init.c.diff?r1=text&tr1=1.3&r2=text&tr2=1.4&diff_format=h">M</a></td><td width='1%'>1.4</td><td width='100%'>testsuites/sptests/sprbtree01/init.c</td></tr>
</table>
<pre>
<font color='#006600'>diff -u rtems/testsuites/sptests/ChangeLog:1.470 rtems/testsuites/sptests/ChangeLog:1.471
--- rtems/testsuites/sptests/ChangeLog:1.470    Tue Aug  2 08:38:40 2011
+++ rtems/testsuites/sptests/ChangeLog  Tue Aug  2 14:26:05 2011
</font><font color='#997700'>@@ -1,3 +1,8 @@
</font><font color='#000088'>+2011-08-02    Joel Sherrill <joel.sherrill@oarcorp.com>
+
+       PR 1877/cpukit
+       * sprbtree01/init.c: Add comparison function for RBTrees.
+
</font> 2011-08-02        Petr Benes <benesp16@fel.cvut.cz>
 
        PR 1862/testing

<font color='#006600'>diff -u rtems/testsuites/sptests/sprbtree01/init.c:1.3 rtems/testsuites/sptests/sprbtree01/init.c:1.4
--- rtems/testsuites/sptests/sprbtree01/init.c:1.3      Tue Aug  2 08:38:41 2011
+++ rtems/testsuites/sptests/sprbtree01/init.c  Tue Aug  2 14:26:05 2011
</font><font color='#997700'>@@ -19,9 +19,23 @@
</font> 
 typedef struct {
   int              id;
<font color='#000088'>+  int              key;
</font>   rtems_rbtree_node Node;
 } test_node;
 
<font color='#000088'>+int test_compare_function (
+  rtems_rbtree_node* n1,
+  rtems_rbtree_node* n2
+)
+{
+  int key1 = rtems_rbtree_container_of( n1, test_node, Node )->key;
+  int key2 = rtems_rbtree_container_of( n2, test_node, Node )->key;
+
+  if (key1 > key2) return 1;
+  else if (key1 < key2) return -1;
+  else return 0;
+}
+
</font> /*<span style="background-color: #FF0000"> </span>
  * recursively checks tree. if the tree is built properly it should only<span style="background-color: #FF0000"> </span>
  * be a depth of 7 function calls for 100 entries in the tree.<span style="background-color: #FF0000"> </span>
<font color='#997700'>@@ -48,8 +62,8 @@
</font>       rh = rb_assert ( rn );
 
     /* Invalid binary search tree */
<font color='#880000'>-    if ( ( ln != NULL && ln->value >= root->value )
-        || ( rn != NULL && rn->value <= root->value ) )
</font><font color='#000088'>+    if ( ( ln != NULL && test_compare_function(ln, root) > 0 )
+        || ( rn != NULL && test_compare_function(rn, root) < 0 ) )
</font>     {
       puts ( "Binary tree violation" );
       return -1;
<font color='#997700'>@@ -79,20 +93,21 @@
</font>   rtems_rbtree_node    *p;
   test_node            node1, node2;
   test_node            node_array[100];
<font color='#000088'>+  test_node            search_node;
</font>   int                  id;
   int i;
 
   puts( "\n\n*** TEST OF RTEMS RBTREE API ***" );
 
   puts( "Init - Initialize rbtree empty" );
<font color='#880000'>-  rtems_rbtree_initialize_empty( &rbtree1 );
</font><font color='#000088'>+  rtems_rbtree_initialize_empty( &rbtree1, &test_compare_function );
</font>   
   /* verify that the rbtree insert work */
   puts( "INIT - Verify rtems_rbtree_insert with two nodes" );
   node1.id = 1;
<font color='#880000'>-  node1.Node.value = 1;
</font><font color='#000088'>+  node1.key = 1;
</font>   node2.id = 2;
<font color='#880000'>-  node2.Node.value = 2;
</font><font color='#000088'>+  node2.key = 2;
</font>   rtems_rbtree_insert( &rbtree1, &node1.Node );
   rtems_rbtree_insert( &rbtree1, &node2.Node );
 
<font color='#997700'>@@ -132,7 +147,7 @@
</font>   }
 
   puts("INIT - Verify rtems_rbtree_insert with the same value twice");
<font color='#880000'>-  node2.Node.value = node1.Node.value;
</font><font color='#000088'>+  node2.key = node1.key;
</font>   rtems_rbtree_insert(&rbtree1, &node1.Node);
   rtems_rbtree_insert(&rbtree1, &node2.Node);
   for ( p = rtems_rbtree_get_min(&rbtree1), id = 1 ; p ;
<font color='#997700'>@@ -154,7 +169,7 @@
</font>     puts("INIT - NOT ENOUGH NODES ON RBTREE");
     rtems_test_exit(0);
   }
<font color='#880000'>-  node2.Node.value = 2;
</font><font color='#000088'>+  node2.key = 2;
</font> 
   /* verify that the rbtree is empty */
   puts( "INIT - Verify rtems_rbtree_is_empty" );
<font color='#997700'>@@ -185,21 +200,25 @@
</font>   /* verify that the rbtree insert works after a tree is emptied */
   puts( "INIT - Verify rtems_rbtree_insert after empty tree" );
   node1.id = 2;
<font color='#880000'>-  node1.Node.value = 2;
</font><font color='#000088'>+  node1.key = 2;
</font>   node2.id = 1;
<font color='#880000'>-  node2.Node.value = 1;
</font><font color='#000088'>+  node2.key = 1;
</font>   rtems_rbtree_insert( &rbtree1, &node1.Node );
   rtems_rbtree_insert( &rbtree1, &node2.Node );
 
   puts( "INIT - Verify rtems_rbtree_peek_max/min, rtems_rbtree_extract" );
<font color='#880000'>-  if(rtems_rbtree_peek_max(&rbtree1)->value -<span style="background-color: #FF0000"> </span>
-      rtems_rbtree_peek_min(&rbtree1)->value != 1) {
</font><font color='#000088'>+  test_node *t1 = rtems_rbtree_container_of(rtems_rbtree_peek_max(&rbtree1),
+         test_node,Node);
+  test_node *t2 = rtems_rbtree_container_of(rtems_rbtree_peek_min(&rbtree1),
+         test_node,Node);
+  if (t1->key - t2->key != 1) {
</font>     puts( "INIT - Peek Min - Max failed" );
     rtems_test_exit(0);
   }
   p = rtems_rbtree_peek_max(&rbtree1);
   rtems_rbtree_extract(&rbtree1, p);
<font color='#880000'>-  if (p->value != 2) {
</font><font color='#000088'>+  t1 = rtems_rbtree_container_of(p,test_node,Node);
+  if (t1->key != 2) {
</font>     puts( "INIT - rtems_rbtree_extract failed");
     rtems_test_exit(0);
   }
<font color='#997700'>@@ -221,7 +240,7 @@
</font>   puts( "INIT - Verify rtems_rbtree_insert with 100 nodes value [0,99]" );
   for (i = 0; i < 100; i++) {
     node_array[i].id = i;
<font color='#880000'>-    node_array[i].Node.value = i;
</font><font color='#000088'>+    node_array[i].key = i;
</font>     rtems_rbtree_insert( &rbtree1, &node_array[i].Node );
 
     if (!rb_assert(rbtree1.root) )
<font color='#997700'>@@ -254,7 +273,7 @@
</font>   puts( "INIT - Verify rtems_rbtree_insert with 100 nodes value [99,0]" );
   for (i = 0; i < 100; i++) {
     node_array[i].id = 99-i;
<font color='#880000'>-    node_array[i].Node.value = 99-i;
</font><font color='#000088'>+    node_array[i].key = 99-i;
</font>     rtems_rbtree_insert( &rbtree1, &node_array[i].Node );
 
     if (!rb_assert(rbtree1.root) )
<font color='#997700'>@@ -289,7 +308,7 @@
</font>   puts( "INIT - Verify rtems_rbtree_extract with 100 nodes value [0,99]" );
   for (i = 0; i < 100; i++) {
     node_array[i].id = i;
<font color='#880000'>-    node_array[i].Node.value = i;
</font><font color='#000088'>+    node_array[i].key = i;
</font>     rtems_rbtree_insert( &rbtree1, &node_array[i].Node );
 
     if (!rb_assert(rbtree1.root) )
<font color='#997700'>@@ -340,7 +359,7 @@
</font>    * with two children while target node has a left child only. */
   for ( i = 0; i < 7; i++ ) {
     node_array[i].id = i;
<font color='#880000'>-    node_array[i].Node.value = i;
</font><font color='#000088'>+    node_array[i].key = i;
</font>   }
   rtems_rbtree_insert( &rbtree1, &node_array[3].Node );
   rtems_rbtree_insert( &rbtree1, &node_array[1].Node );
<font color='#997700'>@@ -360,7 +379,7 @@
</font>   puts( "INIT - Verify rtems_rbtree_get_max with 100 nodes value [99,0]" );
   for (i = 0; i < 100; i++) {
     node_array[i].id = 99-i;
<font color='#880000'>-    node_array[i].Node.value = 99-i;
</font><font color='#000088'>+    node_array[i].key = 99-i;
</font>     rtems_rbtree_insert( &rbtree1, &node_array[i].Node );
 
     if (!rb_assert(rbtree1.root) )
<font color='#997700'>@@ -393,7 +412,7 @@
</font>   puts( "INIT - Verify rtems_rbtree_get_max with 100 nodes value [0,99]" );
   for (i = 0; i < 100; i++) {
     node_array[i].id = i;
<font color='#880000'>-    node_array[i].Node.value = i;
</font><font color='#000088'>+    node_array[i].key = i;
</font>     rtems_rbtree_insert( &rbtree1, &node_array[i].Node );
 
     if (!rb_assert(rbtree1.root) )
<font color='#997700'>@@ -401,7 +420,8 @@
</font>   }
 
   puts( "INIT - Verify rtems_rbtree_find" );
<font color='#880000'>-  p = rtems_rbtree_find(&rbtree1, 30);
</font><font color='#000088'>+  search_node.key = 30;
+  p = rtems_rbtree_find(&rbtree1, &search_node.Node);
</font>   if(rtems_rbtree_container_of(p,test_node,Node)->id != 30) {
     puts ("INIT - ERROR ON RBTREE ID MISMATCH");
     rtems_test_exit(0);
<font color='#997700'>@@ -413,14 +433,14 @@
</font>     puts ("INIT - ERROR ON RBTREE ID MISMATCH");
     rtems_test_exit(0);
   }
<font color='#880000'>-  p = rtems_rbtree_find(&rbtree1, 30);
</font><font color='#000088'>+  p = rtems_rbtree_find(&rbtree1, &search_node.Node);
</font>   p = rtems_rbtree_successor(p);
   if(p && rtems_rbtree_container_of(p,test_node,Node)->id < 30) {
     puts ("INIT - ERROR ON RBTREE ID MISMATCH");
     rtems_test_exit(0);
   }
 
<font color='#880000'>-  p = rtems_rbtree_find(&rbtree1, 30);
</font><font color='#000088'>+  p = rtems_rbtree_find(&rbtree1, &search_node.Node);
</font>   puts( "INIT - Verify rtems_rbtree_find_header" );
   if (rtems_rbtree_find_header(p) != &rbtree1) {
     puts ("INIT - ERROR ON RBTREE HEADER MISMATCH");
<font color='#997700'>@@ -469,7 +489,7 @@
</font>   puts("INIT - Insert 20 random numbers");
   for (i = 0; i < 20; i++) {
     node_array[i].id = numbers[i];
<font color='#880000'>-    node_array[i].Node.value = numbers[i];
</font><font color='#000088'>+    node_array[i].key = numbers[i];
</font>     rtems_rbtree_insert( &rbtree1, &node_array[i].Node );
 
     if (!rb_assert(rbtree1.root) )
<font color='#997700'>@@ -502,10 +522,10 @@
</font>   puts( "INIT - Verify rtems_rbtree_initialize with 100 nodes value [0,99]" );
   for (i = 0; i < 100; i++) {
     node_array[i].id = i;
<font color='#880000'>-    node_array[i].Node.value = i;
</font><font color='#000088'>+    node_array[i].key = i;
</font>   }
<font color='#880000'>-  rtems_rbtree_initialize( &rbtree1, &node_array[0].Node, 100,
-                           sizeof(test_node));
</font><font color='#000088'>+  rtems_rbtree_initialize( &rbtree1, &test_compare_function,
+                           &node_array[0].Node, 100, sizeof(test_node));
</font> 
   puts( "INIT - Removing 100 nodes" );
 
</pre>
<p> </p>

<p>--<br />
<small>Generated by <a href="http://www.codewiz.org/projects/index.html#loginfo">Deluxe Loginfo</a> 2.122 by Bernardo Innocenti <bernie@develer.com></small></p>
</body>
</html>