1 /* COPYRIGHT: See COPYING in the top level directory
2 * PROJECT: ReactOS system libraries
3 * PURPOSE: Generic Table Implementation
4 * FILE: lib/rtl/genertictbl.c
8 /* INCLUDES *****************************************************************/
15 /* FUNCTIONS *****************************************************************/
22 RtlDeleteElementGenericTable (
23 PRTL_GENERIC_TABLE Table
,
36 RtlDeleteElementGenericTableAvl (
50 RtlEnumerateGenericTable (
51 PRTL_GENERIC_TABLE Table
,
64 RtlEnumerateGenericTableAvl (
78 RtlEnumerateGenericTableLikeADirectory (
79 IN PRTL_AVL_TABLE Table
,
80 IN PRTL_AVL_MATCH_FUNCTION MatchFunction
,
83 IN OUT PVOID
*RestartKey
,
84 IN OUT PULONG DeleteCount
,
97 RtlEnumerateGenericTableWithoutSplaying (
98 PRTL_GENERIC_TABLE Table
,
111 RtlEnumerateGenericTableWithoutSplayingAvl (
112 PRTL_AVL_TABLE Table
,
125 RtlGetElementGenericTable(
126 PRTL_GENERIC_TABLE Table
,
139 RtlGetElementGenericTableAvl (
140 PRTL_AVL_TABLE Table
,
153 RtlInitializeGenericTable(PRTL_GENERIC_TABLE Table
,
154 PRTL_GENERIC_COMPARE_ROUTINE CompareRoutine
,
155 PRTL_GENERIC_ALLOCATE_ROUTINE AllocateRoutine
,
156 PRTL_GENERIC_FREE_ROUTINE FreeRoutine
,
159 /* Initialize the table to default and passed values */
160 InitializeListHead(&Table
->InsertOrderList
);
161 Table
->TableRoot
= NULL
;
162 Table
->NumberGenericTableElements
= 0;
163 Table
->WhichOrderedElement
= 0;
164 Table
->OrderedPointer
= &Table
->InsertOrderList
;
165 Table
->CompareRoutine
= CompareRoutine
;
166 Table
->AllocateRoutine
= AllocateRoutine
;
167 Table
->FreeRoutine
= FreeRoutine
;
168 Table
->TableContext
= TableContext
;
176 RtlInitializeGenericTableAvl(IN OUT PRTL_AVL_TABLE Table
,
177 IN PRTL_AVL_COMPARE_ROUTINE CompareRoutine
,
178 IN PRTL_AVL_ALLOCATE_ROUTINE AllocateRoutine
,
179 IN PRTL_AVL_FREE_ROUTINE FreeRoutine
,
180 IN PVOID TableContext
)
183 sizeof(RTL_AVL_TABLE
));
184 Table
->BalancedRoot
.Parent
= &Table
->BalancedRoot
;
186 Table
->CompareRoutine
= CompareRoutine
;
187 Table
->AllocateRoutine
= AllocateRoutine
;
188 Table
->FreeRoutine
= FreeRoutine
;
189 Table
->TableContext
= TableContext
;
198 RtlInsertElementGenericTable (
199 PRTL_GENERIC_TABLE Table
,
202 PBOOLEAN NewElement OPTIONAL
214 RtlInsertElementGenericTableAvl (
215 PRTL_AVL_TABLE Table
,
218 PBOOLEAN NewElement OPTIONAL
230 RtlInsertElementGenericTableFull (
231 PRTL_GENERIC_TABLE Table
,
234 PBOOLEAN NewElement OPTIONAL
,
236 TABLE_SEARCH_RESULT SearchResult
248 RtlInsertElementGenericTableFullAvl (
249 PRTL_AVL_TABLE Table
,
252 PBOOLEAN NewElement OPTIONAL
,
254 TABLE_SEARCH_RESULT SearchResult
267 RtlIsGenericTableEmpty (
268 PRTL_GENERIC_TABLE Table
280 RtlIsGenericTableEmptyAvl (
294 RtlLookupElementGenericTable (
295 PRTL_GENERIC_TABLE Table
,
308 RtlLookupElementGenericTableAvl (
309 PRTL_AVL_TABLE Table
,
322 RtlLookupElementGenericTableFull (
323 PRTL_GENERIC_TABLE Table
,
325 OUT PVOID
*NodeOrParent
,
326 OUT TABLE_SEARCH_RESULT
*SearchResult
338 RtlLookupElementGenericTableFullAvl (
339 PRTL_AVL_TABLE Table
,
341 OUT PVOID
*NodeOrParent
,
342 OUT TABLE_SEARCH_RESULT
*SearchResult
354 RtlNumberGenericTableElements(IN PRTL_GENERIC_TABLE Table
)
356 return Table
->NumberGenericTableElements
;
364 RtlNumberGenericTableElementsAvl(IN PRTL_AVL_TABLE Table
)
366 return Table
->NumberGenericTableElements
;