1      * Summary: Chained hash tables
2      * Description: This module implements the hash table support used in
3      *              various places in the library.
4      *
5      * Copy: See Copyright for the status of this software.
6      *
7      * Author: Patrick Monnerat <pm@datasphere.ch>, DATASPHERE S.A.
8
9      /if not defined(XML_HASH_H__)
10      /define XML_HASH_H__
11
12      * The hash table.
13
14     d xmlHashTablePtr...
15     d                 s               *   based(######typedef######)
16
17      /include "libxmlrpg/xmlversion"
18      /include "libxmlrpg/parser"
19      /include "libxmlrpg/dict"
20
21      * function types:
22
23      * xmlHashDeallocator:
24      * @payload:  the data in the hash
25      * @name:  the name associated
26      *
27      * Callback to free data from a hash.
28
29     d xmlHashDeallocator...
30     d                 s               *   based(######typedef######)
31     d                                     procptr
32
33      * xmlHashCopier:
34      * @payload:  the data in the hash
35      * @name:  the name associated
36      *
37      * Callback to copy data from a hash.
38      *
39      * Returns a copy of the data or NULL in case of error.
40
41     d xmlHashCopier   s               *   based(######typedef######)
42     d                                     procptr
43
44      * xmlHashScanner:
45      * @payload:  the data in the hash
46      * @data:  extra scannner data
47      * @name:  the name associated
48      *
49      * Callback when scanning data in a hash with the simple scanner.
50
51     d xmlHashScanner  s               *   based(######typedef######)
52     d                                     procptr
53
54      * xmlHashScannerFull:
55      * @payload:  the data in the hash
56      * @data:  extra scannner data
57      * @name:  the name associated
58      * @name2:  the second name associated
59      * @name3:  the third name associated
60      *
61      * Callback when scanning data in a hash with the full scanner.
62
63     d xmlHashScannerFull...
64     d                 s               *   based(######typedef######)
65     d                                     procptr
66
67      * Constructor and destructor.
68
69     d xmlHashCreate   pr                  extproc('xmlHashCreate')
70     d                                     like(xmlHashTablePtr)
71     d  size                         10i 0 value
72
73     d xmlHashCreateDict...
74     d                 pr                  extproc('xmlHashCreateDict')
75     d                                     like(xmlHashTablePtr)
76     d  size                         10i 0 value
77     d  dict                               value like(xmlDictPtr)
78
79     d xmlHashFree     pr                  extproc('xmlHashFree')
80     d  table                              value like(xmlHashTablePtr)
81     d  f                                  value like(xmlHashDeallocator)
82
83      * Add a new entry to the hash table.
84
85     d xmlHashAddEntry...
86     d                 pr            10i 0 extproc('xmlHashAddEntry')
87     d  table                              value like(xmlHashTablePtr)
88     d  name                           *   value options(*string)               const xmlChar *
89     d  userdata                       *   value options(*string)               void *
90
91     d xmlHashUpdateEntry...
92     d                 pr            10i 0 extproc('xmlHashUpdateEntry')
93     d  table                              value like(xmlHashTablePtr)
94     d  name                           *   value options(*string)               const xmlChar *
95     d  userdata                       *   value options(*string)               void *
96     d  f                                  value like(xmlHashDeallocator)
97
98     d xmlHashAddEntry2...
99     d                 pr            10i 0 extproc('xmlHashAddEntry2')
100     d  table                              value like(xmlHashTablePtr)
101     d  name                           *   value options(*string)               const xmlChar *
102     d  name2                          *   value options(*string)               const xmlChar *
103     d  userdata                       *   value options(*string)               void *
104
105     d xmlHashUpdateEntry2...
106     d                 pr            10i 0 extproc('xmlHashUpdateEntry2')
107     d  table                              value like(xmlHashTablePtr)
108     d  name                           *   value options(*string)               const xmlChar *
109     d  name2                          *   value options(*string)               const xmlChar *
110     d  userdata                       *   value options(*string)               void *
111     d  f                                  value like(xmlHashDeallocator)
112
113     d xmlHashAddEntry3...
114     d                 pr            10i 0 extproc('xmlHashAddEntry3')
115     d  table                              value like(xmlHashTablePtr)
116     d  name                           *   value options(*string)               const xmlChar *
117     d  name2                          *   value options(*string)               const xmlChar *
118     d  name3                          *   value options(*string)               const xmlChar *
119     d  userdata                       *   value options(*string)               void *
120
121     d xmlHashUpdateEntry3...
122     d                 pr            10i 0 extproc('xmlHashUpdateEntry3')
123     d  table                              value like(xmlHashTablePtr)
124     d  name                           *   value options(*string)               const xmlChar *
125     d  name2                          *   value options(*string)               const xmlChar *
126     d  name3                          *   value options(*string)               const xmlChar *
127     d  userdata                       *   value options(*string)               void *
128     d  f                                  value like(xmlHashDeallocator)
129
130      * Remove an entry from the hash table.
131
132     d xmlHashRemoveEntry...
133     d                 pr            10i 0 extproc('xmlHashRemoveEntry')
134     d  table                              value like(xmlHashTablePtr)
135     d  name                           *   value options(*string)               const xmlChar *
136     d  f                                  value like(xmlHashDeallocator)
137
138     d xmlHashRemoveEntry2...
139     d                 pr            10i 0 extproc('xmlHashRemoveEntry2')
140     d  table                              value like(xmlHashTablePtr)
141     d  name                           *   value options(*string)               const xmlChar *
142     d  name2                          *   value options(*string)               const xmlChar *
143     d  f                                  value like(xmlHashDeallocator)
144
145     d xmlHashRemoveEntry3...
146     d                 pr            10i 0 extproc('xmlHashRemoveEntry3')
147     d  table                              value like(xmlHashTablePtr)
148     d  name                           *   value options(*string)               const xmlChar *
149     d  name2                          *   value options(*string)               const xmlChar *
150     d  name3                          *   value options(*string)               const xmlChar *
151     d  f                                  value like(xmlHashDeallocator)
152
153      * Retrieve the userdata.
154
155     d xmlHashLookup   pr              *   extproc('xmlHashLookup')             void *
156     d  table                              value like(xmlHashTablePtr)
157     d  name                           *   value options(*string)               const xmlChar *
158
159     d xmlHashLookup2  pr              *   extproc('xmlHashLookup2')            void *
160     d  table                              value like(xmlHashTablePtr)
161     d  name                           *   value options(*string)               const xmlChar *
162     d  name2                          *   value options(*string)               const xmlChar *
163
164     d xmlHashLookup3  pr              *   extproc('xmlHashLookup3')            void *
165     d  table                              value like(xmlHashTablePtr)
166     d  name                           *   value options(*string)               const xmlChar *
167     d  name2                          *   value options(*string)               const xmlChar *
168     d  name3                          *   value options(*string)               const xmlChar *
169
170     d xmlHashQLookup  pr              *   extproc('xmlHashQLookup')            void *
171     d  table                              value like(xmlHashTablePtr)
172     d  name                           *   value options(*string)               const xmlChar *
173     d  prefix                         *   value options(*string)               const xmlChar *
174
175     d xmlHashQLookup2...
176     d                 pr              *   extproc('xmlHashQLookup2')           void *
177     d  table                              value like(xmlHashTablePtr)
178     d  name                           *   value options(*string)               const xmlChar *
179     d  prefix                         *   value options(*string)               const xmlChar *
180     d  name2                          *   value options(*string)               const xmlChar *
181     d  prefix2                        *   value options(*string)               const xmlChar *
182
183     d xmlHashQLookup3...
184     d                 pr              *   extproc('xmlHashQLookup3')           void *
185     d  table                              value like(xmlHashTablePtr)
186     d  name                           *   value options(*string)               const xmlChar *
187     d  prefix                         *   value options(*string)               const xmlChar *
188     d  name2                          *   value options(*string)               const xmlChar *
189     d  prefix2                        *   value options(*string)               const xmlChar *
190     d  name3                          *   value options(*string)               const xmlChar *
191     d  prefix3                        *   value options(*string)               const xmlChar *
192
193      * Helpers.
194
195     d xmlHashCopy     pr                  extproc('xmlHashCopy')
196     d                                     like(xmlHashTablePtr)
197     d  table                              value like(xmlHashTablePtr)
198     d  f                                  value like(xmlHashCopier)
199
200     d xmlHashSize     pr            10i 0 extproc('xmlHashSize')
201     d  table                              value like(xmlHashTablePtr)
202
203     d xmlHashScan     pr                  extproc('xmlHashScan')
204     d  table                              value like(xmlHashTablePtr)
205     d  f                                  value like(xmlHashScanner)
206     d  data                           *   value options(*string)               void *
207
208     d xmlHashScan3    pr                  extproc('xmlHashScan3')
209     d  table                              value like(xmlHashTablePtr)
210     d  name                           *   value options(*string)               const xmlChar *
211     d  name2                          *   value options(*string)               const xmlChar *
212     d  name3                          *   value options(*string)               const xmlChar *
213     d  f                                  value like(xmlHashScanner)
214     d  data                           *   value options(*string)               void *
215
216     d xmlHashScanFull...
217     d                 pr                  extproc('xmlHashScanFull')
218     d  table                              value like(xmlHashTablePtr)
219     d  f                                  value like(xmlHashScannerFull)
220     d  data                           *   value options(*string)               void *
221
222     d xmlHashScanFull3...
223     d                 pr                  extproc('xmlHashScanFull3')
224     d  table                              value like(xmlHashTablePtr)
225     d  name                           *   value options(*string)               const xmlChar *
226     d  name2                          *   value options(*string)               const xmlChar *
227     d  name3                          *   value options(*string)               const xmlChar *
228     d  f                                  value like(xmlHashScannerFull)
229     d  data                           *   value options(*string)               void *
230
231      /endif                                                                    XML_HASH_H__
232