- Organize file by AVL/Splay routines.

- Add RtlLookupFirstMatchingElementGenericTableAvl stub.
- Fixup some formatting/tag spacing and prototype definitions.

svn path=/trunk/; revision=24540
This commit is contained in:
Alex Ionescu 2006-10-16 02:49:23 +00:00
parent d280d7f5a7
commit 693525bd5a

View file

@ -1,61 +1,195 @@
/* COPYRIGHT: See COPYING in the top level directory /*
* PROJECT: ReactOS system libraries * PROJECT: ReactOS Kernel
* PURPOSE: Generic Table Implementation * LICENSE: GPL - See COPYING in the top level directory
* FILE: lib/rtl/genertictbl.c * FILE: lib/rtl/generictable.c
* PROGRAMMERS: arty * PURPOSE: Splay Tree and AVL Tree Generic Table Implementation
*/ * PROGRAMMERS: Alex Ionescu (alex.ionescu@reactos.org)
* Art Yerks (ayerkes@speakeasy.net)
*/
/* INCLUDES *****************************************************************/ /* INCLUDES ******************************************************************/
#include <rtl.h> #include <rtl.h>
#include "austin/avl.h" #include "austin/avl.h"
#define NDEBUG #define NDEBUG
#include <debug.h> #include <debug.h>
/* FUNCTIONS *****************************************************************/ /* FUNCTIONS *****************************************************************/
/* /*
* @unimplemented * @implemented
*/ */
PVOID VOID
NTAPI NTAPI
RtlLookupElementGenericTable ( RtlInitializeGenericTable(IN PRTL_GENERIC_TABLE Table,
PRTL_GENERIC_TABLE Table, IN PRTL_GENERIC_COMPARE_ROUTINE CompareRoutine,
PVOID Buffer IN PRTL_GENERIC_ALLOCATE_ROUTINE AllocateRoutine,
) IN PRTL_GENERIC_FREE_ROUTINE FreeRoutine,
IN PVOID TableContext)
{ {
UNIMPLEMENTED; /* Initialize the table to default and passed values */
return 0; InitializeListHead(&Table->InsertOrderList);
Table->TableRoot = NULL;
Table->NumberGenericTableElements = 0;
Table->WhichOrderedElement = 0;
Table->OrderedPointer = &Table->InsertOrderList;
Table->CompareRoutine = CompareRoutine;
Table->AllocateRoutine = AllocateRoutine;
Table->FreeRoutine = FreeRoutine;
Table->TableContext = TableContext;
} }
/* /*
* @unimplemented * @unimplemented
*/ */
PVOID PVOID
NTAPI NTAPI
RtlLookupElementGenericTableFull ( RtlInsertElementGenericTable(IN PRTL_GENERIC_TABLE Table,
PRTL_GENERIC_TABLE Table, IN PVOID Buffer,
PVOID Buffer, IN ULONG BufferSize,
OUT PVOID *NodeOrParent, OUT PBOOLEAN NewElement OPTIONAL)
OUT TABLE_SEARCH_RESULT *SearchResult
)
{ {
UNIMPLEMENTED; UNIMPLEMENTED;
return 0; return 0;
} }
/* /*
* @implemented * @unimplemented
*/ */
PVOID PVOID
NTAPI NTAPI
RtlLookupElementGenericTableFullAvl ( RtlInsertElementGenericTableFull(IN PRTL_GENERIC_TABLE Table,
PRTL_AVL_TABLE Table, IN PVOID Buffer,
PVOID Buffer, IN ULONG BufferSize,
OUT PVOID *NodeOrParent, OUT PBOOLEAN NewElement OPTIONAL,
OUT TABLE_SEARCH_RESULT *SearchResult IN PVOID NodeOrParent,
) IN TABLE_SEARCH_RESULT SearchResult)
{
UNIMPLEMENTED;
return 0;
}
/*
* @unimplemented
*/
BOOLEAN
NTAPI
RtlIsGenericTableEmpty(IN PRTL_GENERIC_TABLE Table)
{
UNIMPLEMENTED;
return FALSE;
}
/*
* @implemented
*/
ULONG
NTAPI
RtlNumberGenericTableElements(IN PRTL_GENERIC_TABLE Table)
{
return Table->NumberGenericTableElements;
}
/*
* @unimplemented
*/
PVOID
NTAPI
RtlLookupElementGenericTable(IN PRTL_GENERIC_TABLE Table,
IN PVOID Buffer)
{
UNIMPLEMENTED;
return 0;
}
/*
* @unimplemented
*/
PVOID
NTAPI
RtlLookupElementGenericTableFull(IN PRTL_GENERIC_TABLE Table,
IN PVOID Buffer,
OUT PVOID *NodeOrParent,
OUT TABLE_SEARCH_RESULT *SearchResult)
{
UNIMPLEMENTED;
return 0;
}
/*
* @unimplemented
*/
BOOLEAN
NTAPI
RtlDeleteElementGenericTable(IN PRTL_GENERIC_TABLE Table,
IN PVOID Buffer)
{
UNIMPLEMENTED;
return FALSE;
}
/*
* @unimplemented
*/
PVOID
NTAPI
RtlEnumerateGenericTable(IN PRTL_GENERIC_TABLE Table,
IN BOOLEAN Restart)
{
UNIMPLEMENTED;
return 0;
}
/*
* @unimplemented
*/
PVOID
NTAPI
RtlEnumerateGenericTableLikeADirectory(IN PRTL_AVL_TABLE Table,
IN PRTL_AVL_MATCH_FUNCTION MatchFunction,
IN PVOID MatchData,
IN ULONG NextFlag,
IN OUT PVOID *RestartKey,
IN OUT PULONG DeleteCount,
IN OUT PVOID Buffer)
{
UNIMPLEMENTED;
return 0;
}
/*
* @unimplemented
*/
PVOID
NTAPI
RtlEnumerateGenericTableWithoutSplaying(IN PRTL_GENERIC_TABLE Table,
IN OUT PVOID *RestartKey)
{
UNIMPLEMENTED;
return 0;
}
/*
* @unimplemented
*/
PVOID
NTAPI
RtlGetElementGenericTable(IN PRTL_GENERIC_TABLE Table,
IN ULONG I)
{
UNIMPLEMENTED;
return 0;
}
/*
* @implemented
*/
PVOID
NTAPI
RtlLookupElementGenericTableFullAvl(IN PRTL_AVL_TABLE Table,
IN PVOID Buffer,
IN OUT PVOID *NodeOrParent,
IN OUT TABLE_SEARCH_RESULT *SearchResult)
{ {
PRTL_BALANCED_LINKS OurNodeOrParent; PRTL_BALANCED_LINKS OurNodeOrParent;
TABLE_SEARCH_RESULT OurSearchResult; TABLE_SEARCH_RESULT OurSearchResult;
@ -80,16 +214,13 @@ RtlLookupElementGenericTableFullAvl (
return NULL; return NULL;
} }
/* /*
* @implemented * @implemented
*/ */
PVOID PVOID
NTAPI NTAPI
RtlLookupElementGenericTableAvl ( RtlLookupElementGenericTableAvl(IN PRTL_AVL_TABLE Table,
PRTL_AVL_TABLE Table, IN PVOID Buffer)
PVOID Buffer
)
{ {
PRTL_BALANCED_LINKS OurNodeOrParent; PRTL_BALANCED_LINKS OurNodeOrParent;
TABLE_SEARCH_RESULT OurSearchResult; TABLE_SEARCH_RESULT OurSearchResult;
@ -97,30 +228,13 @@ RtlLookupElementGenericTableAvl (
(Table, Buffer, (PVOID *)&OurNodeOrParent, &OurSearchResult); (Table, Buffer, (PVOID *)&OurNodeOrParent, &OurSearchResult);
} }
/* /*
* @unimplemented * @implemented
*/ */
BOOLEAN BOOLEAN
NTAPI NTAPI
RtlDeleteElementGenericTable ( RtlDeleteElementGenericTableAvl(IN PRTL_AVL_TABLE Table,
PRTL_GENERIC_TABLE Table, IN PVOID Buffer)
PVOID Buffer
)
{
UNIMPLEMENTED;
return FALSE;
}
/*
* @implemented
*/
BOOLEAN
NTAPI
RtlDeleteElementGenericTableAvl (
PRTL_AVL_TABLE Table,
PVOID Buffer
)
{ {
TABLE_SEARCH_RESULT Result; TABLE_SEARCH_RESULT Result;
PRTL_BALANCED_LINKS Node; PRTL_BALANCED_LINKS Node;
@ -143,28 +257,12 @@ RtlDeleteElementGenericTableAvl (
} }
/* /*
* @unimplemented * @implemented
*/ */
PVOID PVOID
NTAPI NTAPI
RtlEnumerateGenericTable ( RtlEnumerateGenericTableAvl(IN PRTL_AVL_TABLE Table,
PRTL_GENERIC_TABLE Table, IN BOOLEAN Restart)
BOOLEAN Restart
)
{
UNIMPLEMENTED;
return 0;
}
/*
* @implemented
*/
PVOID
NTAPI
RtlEnumerateGenericTableAvl (
PRTL_AVL_TABLE Table,
BOOLEAN Restart
)
{ {
if( Table->NumberGenericTableElements == 0 ) if( Table->NumberGenericTableElements == 0 )
return NULL; return NULL;
@ -184,74 +282,23 @@ RtlEnumerateGenericTableAvl (
} }
/* /*
* @unimplemented * @implemented
*/ */
PVOID PVOID
NTAPI NTAPI
RtlEnumerateGenericTableLikeADirectory ( RtlEnumerateGenericTableWithoutSplayingAvl(IN PRTL_AVL_TABLE Table,
IN PRTL_AVL_TABLE Table, IN OUT PVOID *RestartKey)
IN PRTL_AVL_MATCH_FUNCTION MatchFunction,
IN PVOID MatchData,
IN ULONG NextFlag,
IN OUT PVOID *RestartKey,
IN OUT PULONG DeleteCount,
IN OUT PVOID Buffer
)
{
UNIMPLEMENTED;
return 0;
}
/*
* @unimplemented
*/
PVOID
NTAPI
RtlEnumerateGenericTableWithoutSplaying (
PRTL_GENERIC_TABLE Table,
PVOID *RestartKey
)
{
UNIMPLEMENTED;
return 0;
}
/*
* @implemented
*/
PVOID
NTAPI
RtlEnumerateGenericTableWithoutSplayingAvl (
PRTL_AVL_TABLE Table,
PVOID *RestartKey
)
{ {
return RtlEnumerateGenericTableWithoutSplayingAvl(Table, RestartKey); return RtlEnumerateGenericTableWithoutSplayingAvl(Table, RestartKey);
} }
/* /*
* @unimplemented * @implemented
*/ */
PVOID PVOID
NTAPI NTAPI
RtlGetElementGenericTable( RtlGetElementGenericTableAvl(IN PRTL_AVL_TABLE Table,
PRTL_GENERIC_TABLE Table, IN ULONG I)
ULONG I
)
{
UNIMPLEMENTED;
return 0;
}
/*
* @implemented
*/
PVOID
NTAPI
RtlGetElementGenericTableAvl (
PRTL_AVL_TABLE Table,
ULONG I
)
{ {
PRTL_BALANCED_LINKS Node; PRTL_BALANCED_LINKS Node;
@ -264,97 +311,36 @@ RtlGetElementGenericTableAvl (
} }
} }
/*
* @implemented
*/
VOID
NTAPI
RtlInitializeGenericTable(PRTL_GENERIC_TABLE Table,
PRTL_GENERIC_COMPARE_ROUTINE CompareRoutine,
PRTL_GENERIC_ALLOCATE_ROUTINE AllocateRoutine,
PRTL_GENERIC_FREE_ROUTINE FreeRoutine,
PVOID TableContext)
{
/* Initialize the table to default and passed values */
InitializeListHead(&Table->InsertOrderList);
Table->TableRoot = NULL;
Table->NumberGenericTableElements = 0;
Table->WhichOrderedElement = 0;
Table->OrderedPointer = &Table->InsertOrderList;
Table->CompareRoutine = CompareRoutine;
Table->AllocateRoutine = AllocateRoutine;
Table->FreeRoutine = FreeRoutine;
Table->TableContext = TableContext;
}
/* /*
* @implemented * @implemented
*/ */
VOID NTAPI VOID
NTAPI
RtlInitializeGenericTableAvl(IN OUT PRTL_AVL_TABLE Table, RtlInitializeGenericTableAvl(IN OUT PRTL_AVL_TABLE Table,
IN PRTL_AVL_COMPARE_ROUTINE CompareRoutine, IN PRTL_AVL_COMPARE_ROUTINE CompareRoutine,
IN PRTL_AVL_ALLOCATE_ROUTINE AllocateRoutine, IN PRTL_AVL_ALLOCATE_ROUTINE AllocateRoutine,
IN PRTL_AVL_FREE_ROUTINE FreeRoutine, IN PRTL_AVL_FREE_ROUTINE FreeRoutine,
IN PVOID TableContext) IN PVOID TableContext)
{ {
RtlZeroMemory(Table, RtlZeroMemory(Table, sizeof(RTL_AVL_TABLE));
sizeof(RTL_AVL_TABLE)); Table->BalancedRoot.Parent = &Table->BalancedRoot;
Table->BalancedRoot.Parent = &Table->BalancedRoot; Table->CompareRoutine = CompareRoutine;
Table->CompareRoutine = CompareRoutine; Table->AllocateRoutine = AllocateRoutine;
Table->AllocateRoutine = AllocateRoutine; Table->FreeRoutine = FreeRoutine;
Table->FreeRoutine = FreeRoutine; Table->TableContext = TableContext;
Table->TableContext = TableContext;
}
/*
* @unimplemented
*/
PVOID
NTAPI
RtlInsertElementGenericTable (
PRTL_GENERIC_TABLE Table,
PVOID Buffer,
ULONG BufferSize,
PBOOLEAN NewElement OPTIONAL
)
{
UNIMPLEMENTED;
return 0;
} }
/* /*
* @unimplemented * @implemented
*/ */
PVOID PVOID
NTAPI NTAPI
RtlInsertElementGenericTableFull ( RtlInsertElementGenericTableFullAvl(IN PRTL_AVL_TABLE Table,
PRTL_GENERIC_TABLE Table, IN PVOID Buffer,
PVOID Buffer, IN ULONG BufferSize,
ULONG BufferSize, OUT PBOOLEAN NewElement OPTIONAL,
PBOOLEAN NewElement OPTIONAL, IN OUT PVOID *NodeOrParent,
PVOID NodeOrParent, IN OUT TABLE_SEARCH_RESULT *SearchResult)
TABLE_SEARCH_RESULT SearchResult
)
{
UNIMPLEMENTED;
return 0;
}
/*
* @implemented
*/
PVOID
NTAPI
RtlInsertElementGenericTableFullAvl (
PRTL_AVL_TABLE Table,
PVOID Buffer,
ULONG BufferSize,
PBOOLEAN NewElement OPTIONAL,
PVOID *NodeOrParent,
TABLE_SEARCH_RESULT *SearchResult
)
{ {
PRTL_BALANCED_LINKS OurNodeOrParent; PRTL_BALANCED_LINKS OurNodeOrParent;
TABLE_SEARCH_RESULT OurSearchResult; TABLE_SEARCH_RESULT OurSearchResult;
@ -400,16 +386,14 @@ RtlInsertElementGenericTableFullAvl (
} }
/* /*
* @implemented * @implemented
*/ */
PVOID PVOID
NTAPI NTAPI
RtlInsertElementGenericTableAvl ( RtlInsertElementGenericTableAvl(IN PRTL_AVL_TABLE Table,
PRTL_AVL_TABLE Table, IN PVOID Buffer,
PVOID Buffer, IN ULONG BufferSize,
ULONG BufferSize, OUT PBOOLEAN NewElement OPTIONAL)
PBOOLEAN NewElement OPTIONAL
)
{ {
PVOID NodeOrParent; PVOID NodeOrParent;
TABLE_SEARCH_RESULT SearchResult; TABLE_SEARCH_RESULT SearchResult;
@ -418,50 +402,37 @@ RtlInsertElementGenericTableAvl (
(Table, Buffer, BufferSize, NewElement, &NodeOrParent, &SearchResult); (Table, Buffer, BufferSize, NewElement, &NodeOrParent, &SearchResult);
} }
/* /*
* @unimplemented * @implemented
*/ */
BOOLEAN BOOLEAN
NTAPI NTAPI
RtlIsGenericTableEmpty ( RtlIsGenericTableEmptyAvl(PRTL_AVL_TABLE Table)
PRTL_GENERIC_TABLE Table
)
{ {
UNIMPLEMENTED; return Table->NumberGenericTableElements == 0;
return FALSE;
} }
/*
* @unimplemented
*/
BOOLEAN
NTAPI
RtlIsGenericTableEmptyAvl (
PRTL_AVL_TABLE Table
)
{
return Table->NumberGenericTableElements == 0;
}
/* /*
* @implemented * @implemented
*/ */
ULONG NTAPI ULONG
RtlNumberGenericTableElements(IN PRTL_GENERIC_TABLE Table) NTAPI
{
return Table->NumberGenericTableElements;
}
/*
* @implemented
*/
ULONG NTAPI
RtlNumberGenericTableElementsAvl(IN PRTL_AVL_TABLE Table) RtlNumberGenericTableElementsAvl(IN PRTL_AVL_TABLE Table)
{ {
return Table->NumberGenericTableElements; return Table->NumberGenericTableElements;
}
/*
* @unimplemented
*/
PVOID
NTAPI
RtlLookupFirstMatchingElementGenericTableAvl(IN PRTL_AVL_TABLE Table,
IN PVOID Buffer,
OUT PVOID *RestartKey)
{
UNIMPLEMENTED;
return NULL;
} }
/* EOF */ /* EOF */