return( p_item );\r
}\r
\r
-\r
void\r
cl_qmap_apply_func(\r
IN const cl_qmap_t* const p_map,\r
}\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