Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

258 lines
8.5 KiB

  1. /*++
  2. Copyright (c) 1998 Microsoft Corporation
  3. Module Name:
  4. growlist.h
  5. Abstract:
  6. Implements a dynamic array-indexed list of binary objects. Typically,
  7. the binary objects are strings. The list uses a GROWBUF for the array,
  8. and a pool for the binary data of each list item.
  9. Author:
  10. Jim Schmidt (jimschm) 08-Aug-1997
  11. Revision History:
  12. <alias> <date> <comments>
  13. --*/
  14. #pragma once
  15. typedef struct {
  16. GROWBUFFER ListArray;
  17. POOLHANDLE ListData;
  18. } GROWLIST, *PGROWLIST;
  19. #define GROWLIST_INIT {GROWBUF_INIT, NULL}
  20. #define GrowListGetPtrArray(listptr) ((PVOID *) ((listptr)->ListArray.Buf))
  21. #define GrowListGetStringPtrArrayA(listptr) ((PCSTR *) ((listptr)->ListArray.Buf))
  22. #define GrowListGetStringPtrArrayW(listptr) ((PCWSTR *) ((listptr)->ListArray.Buf))
  23. PBYTE
  24. RealGrowListAppend (
  25. IN OUT PGROWLIST GrowList,
  26. IN PBYTE DataToAppend, OPTIONAL
  27. IN UINT SizeOfData
  28. );
  29. #define GrowListAppend(list,data,size) SETTRACKCOMMENT(PBYTE,"GrowListAppend",__FILE__,__LINE__)\
  30. RealGrowListAppend (list,data,size)\
  31. CLRTRACKCOMMENT
  32. PBYTE
  33. RealGrowListAppendAddNul (
  34. IN OUT PGROWLIST GrowList,
  35. IN PBYTE DataToAppend, OPTIONAL
  36. IN UINT SizeOfData
  37. );
  38. #define GrowListAppendAddNul(list,data,size) SETTRACKCOMMENT(PBYTE,"GrowListAppendAddNul",__FILE__,__LINE__)\
  39. RealGrowListAppendAddNul (list,data,size)\
  40. CLRTRACKCOMMENT
  41. VOID
  42. FreeGrowList (
  43. IN PGROWLIST GrowList
  44. );
  45. PBYTE
  46. GrowListGetItem (
  47. IN PGROWLIST GrowList,
  48. IN UINT Index
  49. );
  50. UINT
  51. GrowListGetSize (
  52. IN PGROWLIST GrowList
  53. );
  54. PBYTE
  55. RealGrowListInsert (
  56. IN OUT PGROWLIST GrowList,
  57. IN UINT Index,
  58. IN PBYTE DataToAppend, OPTIONAL
  59. IN UINT SizeOfData
  60. );
  61. #define GrowListInsert(list,index,data,size) SETTRACKCOMMENT(PBYTE,"GrowListInsert",__FILE__,__LINE__)\
  62. RealGrowListInsert (list,index,data,size)\
  63. CLRTRACKCOMMENT
  64. PBYTE
  65. RealGrowListInsertAddNul (
  66. IN OUT PGROWLIST GrowList,
  67. IN UINT Index,
  68. IN PBYTE DataToAppend, OPTIONAL
  69. IN UINT SizeOfData
  70. );
  71. #define GrowListInsertAddNul(list,index,data,size) SETTRACKCOMMENT(PBYTE,"GrowListInsertAddNul",__FILE__,__LINE__)\
  72. RealGrowListInsertAddNul (list,index,data,size)\
  73. CLRTRACKCOMMENT
  74. BOOL
  75. GrowListDeleteItem (
  76. IN OUT PGROWLIST GrowList,
  77. IN UINT Index
  78. );
  79. BOOL
  80. GrowListResetItem (
  81. IN OUT PGROWLIST GrowList,
  82. IN UINT Index
  83. );
  84. PBYTE
  85. RealGrowListSetItem (
  86. IN OUT PGROWLIST GrowList,
  87. IN UINT Index,
  88. IN PBYTE DataToSet, OPTIONAL
  89. IN UINT SizeOfData
  90. );
  91. #define GrowListSetItem(list,index,data,size) SETTRACKCOMMENT(PBYTE,"GrowListSetItem",__FILE__,__LINE__)\
  92. RealGrowListSetItem (list,index,data,size)\
  93. CLRTRACKCOMMENT
  94. __inline
  95. PCSTR
  96. RealGrowListAppendStringABA (
  97. IN OUT PGROWLIST GrowList,
  98. IN PCSTR String,
  99. IN PCSTR End
  100. )
  101. {
  102. DEBUGMSG_IF ((String > End, DBG_WHOOPS, "Start is greater than End in GrowListAppendStringABA"));
  103. return (PCSTR) GrowListAppendAddNul (
  104. GrowList,
  105. (PBYTE) String,
  106. String < End ? (UINT) (UINT_PTR) ((PBYTE) End - (PBYTE) String) : 0
  107. );
  108. }
  109. __inline
  110. PCWSTR
  111. RealGrowListAppendStringABW (
  112. IN OUT PGROWLIST GrowList,
  113. IN PCWSTR String,
  114. IN PCWSTR End
  115. )
  116. {
  117. DEBUGMSG_IF ((String > End, DBG_WHOOPS, "Start is greater than End in GrowListAppendStringABW"));
  118. return (PCWSTR) GrowListAppendAddNul (
  119. GrowList,
  120. (PBYTE) String,
  121. String < End ? (UINT) (UINT_PTR) ((PBYTE) End - (PBYTE) String) : 0
  122. );
  123. }
  124. __inline
  125. PCSTR
  126. RealGrowListInsertStringABA (
  127. IN OUT PGROWLIST GrowList,
  128. IN UINT Index,
  129. IN PCSTR String,
  130. IN PCSTR End
  131. )
  132. {
  133. DEBUGMSG_IF ((String > End, DBG_WHOOPS, "Start is greater than End in GrowListInsertStringABA"));
  134. return (PCSTR) GrowListInsertAddNul (
  135. GrowList,
  136. Index,
  137. (PBYTE) String,
  138. String < End ? (UINT) (UINT_PTR) ((PBYTE) End - (PBYTE) String) : 0
  139. );
  140. }
  141. __inline
  142. PCWSTR
  143. RealGrowListInsertStringABW (
  144. IN OUT PGROWLIST GrowList,
  145. IN UINT Index,
  146. IN PCWSTR String,
  147. IN PCWSTR End
  148. )
  149. {
  150. DEBUGMSG_IF ((String > End, DBG_WHOOPS, "Start is greater than End in GrowListInsertStringABW"));
  151. return (PCWSTR) GrowListInsertAddNul (
  152. GrowList,
  153. Index,
  154. (PBYTE) String,
  155. String < End ? (UINT) (UINT_PTR) ((PBYTE) End - (PBYTE) String) : 0
  156. );
  157. }
  158. #define GrowListAppendStringABA(list,a,b) SETTRACKCOMMENT(PCSTR,"GrowListAppendStringABA", __FILE__, __LINE__)\
  159. RealGrowListAppendStringABA(list,a,b)\
  160. CLRTRACKCOMMENT
  161. #define GrowListAppendStringABW(list,a,b) SETTRACKCOMMENT(PCWSTR,"GrowListAppendStringABW", __FILE__, __LINE__)\
  162. RealGrowListAppendStringABW(list,a,b)\
  163. CLRTRACKCOMMENT
  164. #define GrowListInsertStringABA(list,index,a,b) SETTRACKCOMMENT(PCSTR,"GrowListInsertStringABA", __FILE__, __LINE__)\
  165. RealGrowListInsertStringABA(list,index,a,b)\
  166. CLRTRACKCOMMENT
  167. #define GrowListInsertStringABW(list,index,a,b) SETTRACKCOMMENT(PCWSTR,"GrowListInsertStringABW", __FILE__, __LINE__)\
  168. RealGrowListInsertStringABW(list,index,a,b)\
  169. CLRTRACKCOMMENT
  170. #define GrowListAppendStringA(list,str) GrowListAppendStringABA(list,str,GetEndOfStringA(str))
  171. #define GrowListAppendStringW(list,str) GrowListAppendStringABW(list,str,GetEndOfStringW(str))
  172. #define GrowListInsertStringA(list,index,str) GrowListInsertStringABA(list,index,str,GetEndOfStringA(str))
  173. #define GrowListInsertStringW(list,index,str) GrowListInsertStringABW(list,index,str,GetEndOfStringW(str))
  174. #define GrowListAppendStringNA(list,str,len) GrowListAppendStringABA(list,str,CharCountToPointerA(str,len))
  175. #define GrowListAppendStringNW(list,str,len) GrowListAppendStringABW(list,str,CharCountToPointerW(str,len))
  176. #define GrowListInsertStringNA(list,index,str,len) GrowListInsertStringABA(list,index,str,CharCountToPointerA(str,len))
  177. #define GrowListInsertStringNW(list,index,str,len) GrowListInsertStringABW(list,index,str,CharCountToPointerW(str,len))
  178. #define GrowListGetStringA(list,index) (PCSTR)(GrowListGetItem(list,index))
  179. #define GrowListGetStringW(list,index) (PCWSTR)(GrowListGetItem(list,index))
  180. #define GrowListAppendEmptyItem(list) GrowListAppend (list,NULL,0)
  181. #define GrowListInsertEmptyItem(list,index) GrowListInsert (list,index,NULL,0)
  182. #ifdef UNICODE
  183. #define GrowListAppendString GrowListAppendStringW
  184. #define GrowListInsertString GrowListInsertStringW
  185. #define GrowListAppendStringAB GrowListAppendStringABW
  186. #define GrowListInsertStringAB GrowListInsertStringABW
  187. #define GrowListAppendStringN GrowListAppendStringNW
  188. #define GrowListInsertStringN GrowListInsertStringNW
  189. #define GrowListGetString GrowListGetStringW
  190. #define GrowListGetStringPtrArray GrowListGetStringPtrArrayW
  191. #else
  192. #define GrowListAppendString GrowListAppendStringA
  193. #define GrowListInsertString GrowListInsertStringA
  194. #define GrowListAppendStringAB GrowListAppendStringABA
  195. #define GrowListInsertStringAB GrowListInsertStringABA
  196. #define GrowListAppendStringN GrowListAppendStringNA
  197. #define GrowListInsertStringN GrowListInsertStringNA
  198. #define GrowListGetString GrowListGetStringA
  199. #define GrowListGetStringPtrArray GrowListGetStringPtrArrayA
  200. #endif