]> git.openfabrics.org - ~shefty/rdma-win.git/commitdiff
[COMPLIB] add cl_fmap_match() & cl_fmap_get_next() for opensm 3.3.5.
authorStan Smith <stan.smith@intel.com>
Fri, 21 May 2010 19:10:08 +0000 (19:10 +0000)
committerStan Smith <stan.smith@intel.com>
Fri, 21 May 2010 19:10:08 +0000 (19:10 +0000)
git-svn-id: svn://openib.tc.cornell.edu/gen1@2799 ad392aa1-c5ef-ae45-8dd8-e69d62a5ef86

trunk/core/complib/cl_map.c

index 4d94d51fdb284d9ad2a96d8166a7c2bc907bf218..4d897b0ea04ecd27df9e5bbaddeadbf8bd349efc 100644 (file)
@@ -703,7 +703,6 @@ cl_qmap_get(
        return( p_item );\r
 }\r
 \r
-\r
 void\r
 cl_qmap_apply_func(\r
        IN      const cl_qmap_t* const  p_map,\r
@@ -1710,6 +1709,67 @@ cl_fmap_init(
 }\r
 \r
 \r
+cl_fmap_item_t*\r
+cl_fmap_match(\r
+       IN const cl_fmap_t *const       p_map,\r
+    IN const void *const               p_key,\r
+    IN cl_pfn_fmap_cmp_t               pfn_compare)\r
+{\r
+       cl_fmap_item_t *p_item;\r
+       int cmp;\r
+\r
+       CL_ASSERT(p_map);\r
+       CL_ASSERT(p_map->state == CL_INITIALIZED);\r
+\r
+       p_item = __cl_fmap_root(p_map);\r
+\r
+       while (p_item != &p_map->nil) {\r
+               cmp = pfn_compare ? pfn_compare(p_key, p_item->p_key) :\r
+                       p_map->pfn_compare(p_key, p_item->p_key);\r
+\r
+               if (!cmp)\r
+                       break;  /* just right */\r
+\r
+               if (cmp < 0)\r
+                       p_item = p_item->p_left;        /* too small */\r
+               else\r
+                       p_item = p_item->p_right;       /* too big */\r
+       }\r
+\r
+       return (p_item);\r
+}\r
+\r
+\r
+cl_fmap_item_t*\r
+cl_fmap_get_next(\r
+       IN const cl_fmap_t * const      p_map,\r
+       IN const void *const            p_key)\r
+{\r
+       cl_fmap_item_t *p_item;\r
+       cl_fmap_item_t *p_item_found;\r
+       int cmp;\r
+\r
+       CL_ASSERT(p_map);\r
+       CL_ASSERT(p_map->state == CL_INITIALIZED);\r
+\r
+       p_item = __cl_fmap_root(p_map);\r
+       p_item_found = (cl_fmap_item_t *) & p_map->nil;\r
+\r
+       while (p_item != &p_map->nil) {\r
+               cmp = p_map->pfn_compare(p_key, p_item->p_key);\r
+\r
+               if (cmp < 0) {\r
+                       p_item_found = p_item;\r
+                       p_item = p_item->p_left;        /* too small */\r
+               } else {\r
+                       p_item = p_item->p_right;       /* too big or match */\r
+               }\r
+       }\r
+\r
+       return (p_item_found);\r
+}\r
+\r
+\r
 cl_fmap_item_t*\r
 cl_fmap_get(\r
        IN      const cl_fmap_t* const  p_map,\r