- Delete mc (stoneage old, there is a standalone win32 port now).
[reactos.git] / rosapps / applications / net / roshttpd / common / list.cpp
1 /*
2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS HTTP Daemon
4 * FILE: list.cpp
5 * PURPOSE: A doubly linked list implementation
6 * PROGRAMMERS: Casper S. Hornstrup (chorns@users.sourceforge.net)
7 * REVISIONS:
8 * CSH 01/09/2000 Created
9 * NOTES: The linked list does it's own heap management for
10 * better performance
11 * TODO: - InsertBefore(), InsertAfter(), Move()
12 */
13 #include <windows.h>
14 #include <list.h>
15
16 // **************************** CListNode ****************************
17
18 HANDLE CListNode::hHeap = NULL;
19 INT CListNode::nRef = 0;
20
21 // Default constructor
22 CListNode::CListNode()
23 {
24 Element = NULL;
25 Next = NULL;
26 Prev = NULL;
27 }
28
29 // Constructor with element and next as starter values
30 CListNode::CListNode(PVOID element, CListNode *next, CListNode *prev)
31 {
32 Element = element;
33 Next = next;
34 Prev = prev;
35 }
36
37 void* CListNode::operator new(/*size_t*/ UINT size)
38 {
39 PVOID p;
40 if (hHeap == NULL) {
41 SYSTEM_INFO inf;
42 GetSystemInfo(&inf);
43 hHeap = HeapCreate(0, inf.dwAllocationGranularity, 0);
44 }
45 if ((p = HeapAlloc(hHeap, 0, size)) != NULL)
46 nRef++;
47 return p;
48 }
49
50 VOID CListNode::operator delete(void* p)
51 {
52 if (HeapFree(hHeap, 0, p) != FALSE)
53 nRef--;
54 if (nRef == 0) {
55 HeapDestroy(hHeap);
56 hHeap = NULL;
57 }
58 }
59
60 // Set element
61 VOID CListNode::SetElement(PVOID element)
62 {
63 Element = element;
64 }
65
66 // Set pointer to next node in list
67 VOID CListNode::SetNext(CListNode *next)
68 {
69 Next = next;
70 }
71
72 // Set pointer to previous node in list
73 VOID CListNode::SetPrev(CListNode *prev)
74 {
75 Prev = prev;
76 }
77
78 // Get element of node
79 PVOID CListNode::GetElement()
80 {
81 return Element;
82 }
83
84 // Get pointer to next node in list
85 CListNode *CListNode::GetNext()
86 {
87 return Next;
88 }
89
90 // Get pointer to previous node in list
91 CListNode *CListNode::GetPrev()
92 {
93 return Prev;
94 }