Reactos
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

at listview 54 lines 1.9 kB view raw
1/* 2 * PROJECT: Skiplist implementation for the ReactOS Project 3 * LICENSE: GPL-2.0+ (https://spdx.org/licenses/GPL-2.0+) 4 * PURPOSE: Interfaces for the Skiplist 5 * COPYRIGHT: Copyright 2015 Colin Finck (colin@reactos.org) 6 */ 7 8#ifndef _REACTOS_SKIPLIST_H 9#define _REACTOS_SKIPLIST_H 10 11// Define SKIPLIST_LEVELS to a value between 1 and 31 before including this header. 12// This specifies the maximum number of levels you want your Skiplist to have. 13// A value of X is recommended for handling up to 2^X elements. 14#ifndef SKIPLIST_LEVELS 15#error Please define SKIPLIST_LEVELS to a value between 1 and 31. 16#endif 17 18C_ASSERT(SKIPLIST_LEVELS >= 1); 19C_ASSERT(SKIPLIST_LEVELS <= 31); 20 21// Function pointer definitions 22typedef PVOID (WINAPI *PSKIPLIST_ALLOCATE_ROUTINE)(DWORD); 23typedef int (WINAPI *PSKIPLIST_COMPARE_ROUTINE)(PVOID, PVOID); 24typedef void (WINAPI *PSKIPLIST_FREE_ROUTINE)(PVOID); 25 26// Structure definitions 27typedef struct _SKIPLIST_NODE 28{ 29 DWORD Distance[SKIPLIST_LEVELS]; 30 struct _SKIPLIST_NODE* Next[SKIPLIST_LEVELS]; 31 PVOID Element; 32} 33SKIPLIST_NODE, *PSKIPLIST_NODE; 34 35typedef struct _SKIPLIST 36{ 37 SKIPLIST_NODE Head; 38 CHAR MaximumLevel; 39 DWORD NodeCount; 40 PSKIPLIST_ALLOCATE_ROUTINE AllocateRoutine; 41 PSKIPLIST_COMPARE_ROUTINE CompareRoutine; 42 PSKIPLIST_FREE_ROUTINE FreeRoutine; 43} 44SKIPLIST, *PSKIPLIST; 45 46// Function prototypes 47void InitializeSkiplist(PSKIPLIST Skiplist, PSKIPLIST_ALLOCATE_ROUTINE AllocateRoutine, PSKIPLIST_COMPARE_ROUTINE CompareRoutine, PSKIPLIST_FREE_ROUTINE FreeRoutine); 48BOOL InsertElementSkiplist(PSKIPLIST Skiplist, PVOID Element); 49BOOL InsertTailElementSkiplist(PSKIPLIST Skiplist, PVOID Element); 50PVOID DeleteElementSkiplist(PSKIPLIST Skiplist, PVOID Element); 51PVOID LookupElementSkiplist(PSKIPLIST Skiplist, PVOID Element, PDWORD ElementIndex); 52PSKIPLIST_NODE LookupNodeByIndexSkiplist(PSKIPLIST Skiplist, DWORD ElementIndex); 53 54#endif