1*c7b67985SPhilip Paeps /* Hash table related internal API 2*c7b67985SPhilip Paeps __ __ _ 3*c7b67985SPhilip Paeps ___\ \/ /_ __ __ _| |_ 4*c7b67985SPhilip Paeps / _ \\ /| '_ \ / _` | __| 5*c7b67985SPhilip Paeps | __// \| |_) | (_| | |_ 6*c7b67985SPhilip Paeps \___/_/\_\ .__/ \__,_|\__| 7*c7b67985SPhilip Paeps |_| XML parser 8*c7b67985SPhilip Paeps 9*c7b67985SPhilip Paeps Copyright (c) 2026 Sebastian Pipping <sebastian@pipping.org> 10*c7b67985SPhilip Paeps Licensed under the MIT license: 11*c7b67985SPhilip Paeps 12*c7b67985SPhilip Paeps Permission is hereby granted, free of charge, to any person obtaining 13*c7b67985SPhilip Paeps a copy of this software and associated documentation files (the 14*c7b67985SPhilip Paeps "Software"), to deal in the Software without restriction, including 15*c7b67985SPhilip Paeps without limitation the rights to use, copy, modify, merge, publish, 16*c7b67985SPhilip Paeps distribute, sublicense, and/or sell copies of the Software, and to permit 17*c7b67985SPhilip Paeps persons to whom the Software is furnished to do so, subject to the 18*c7b67985SPhilip Paeps following conditions: 19*c7b67985SPhilip Paeps 20*c7b67985SPhilip Paeps The above copyright notice and this permission notice shall be included 21*c7b67985SPhilip Paeps in all copies or substantial portions of the Software. 22*c7b67985SPhilip Paeps 23*c7b67985SPhilip Paeps THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 24*c7b67985SPhilip Paeps EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 25*c7b67985SPhilip Paeps MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN 26*c7b67985SPhilip Paeps NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, 27*c7b67985SPhilip Paeps DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR 28*c7b67985SPhilip Paeps OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE 29*c7b67985SPhilip Paeps USE OR OTHER DEALINGS IN THE SOFTWARE. 30*c7b67985SPhilip Paeps 31*c7b67985SPhilip Paeps SPDX-License-Identifier: MIT 32*c7b67985SPhilip Paeps */ 33*c7b67985SPhilip Paeps 34*c7b67985SPhilip Paeps #if ! defined(HASH_TABLE_H) 35*c7b67985SPhilip Paeps # define HASH_TABLE_H 1 36*c7b67985SPhilip Paeps 37*c7b67985SPhilip Paeps # include "expat.h" // for XML_Bool, XML_Parser 38*c7b67985SPhilip Paeps # include "internal.h" // for XML_NONTESTING_STATIC 39*c7b67985SPhilip Paeps 40*c7b67985SPhilip Paeps # include <stddef.h> // for size_t 41*c7b67985SPhilip Paeps 42*c7b67985SPhilip Paeps typedef const XML_Char *KEY; 43*c7b67985SPhilip Paeps 44*c7b67985SPhilip Paeps typedef struct { 45*c7b67985SPhilip Paeps KEY name; 46*c7b67985SPhilip Paeps } NAMED; 47*c7b67985SPhilip Paeps 48*c7b67985SPhilip Paeps typedef struct { 49*c7b67985SPhilip Paeps NAMED **v; 50*c7b67985SPhilip Paeps unsigned char power; 51*c7b67985SPhilip Paeps size_t size; 52*c7b67985SPhilip Paeps size_t used; 53*c7b67985SPhilip Paeps XML_Parser parser; 54*c7b67985SPhilip Paeps } HASH_TABLE; 55*c7b67985SPhilip Paeps 56*c7b67985SPhilip Paeps typedef struct { 57*c7b67985SPhilip Paeps NAMED **p; 58*c7b67985SPhilip Paeps NAMED **end; 59*c7b67985SPhilip Paeps } HASH_TABLE_ITER; 60*c7b67985SPhilip Paeps 61*c7b67985SPhilip Paeps XML_NONTESTING_STATIC NAMED *lookupWithLength(XML_Parser parser, 62*c7b67985SPhilip Paeps HASH_TABLE *table, KEY name, 63*c7b67985SPhilip Paeps size_t nameLen, 64*c7b67985SPhilip Paeps size_t createSize); 65*c7b67985SPhilip Paeps XML_NONTESTING_STATIC NAMED *lookup(XML_Parser parser, HASH_TABLE *table, 66*c7b67985SPhilip Paeps KEY name, size_t createSize); 67*c7b67985SPhilip Paeps 68*c7b67985SPhilip Paeps XML_NONTESTING_STATIC void hashTableInit(HASH_TABLE *table, XML_Parser parser); 69*c7b67985SPhilip Paeps XML_NONTESTING_STATIC void hashTableClear(HASH_TABLE *table); 70*c7b67985SPhilip Paeps XML_NONTESTING_STATIC void hashTableDestroy(HASH_TABLE *table); 71*c7b67985SPhilip Paeps XML_NONTESTING_STATIC void hashTableIterInit(HASH_TABLE_ITER *iter, 72*c7b67985SPhilip Paeps const HASH_TABLE *table); 73*c7b67985SPhilip Paeps XML_NONTESTING_STATIC NAMED *hashTableIterNext(HASH_TABLE_ITER *iter); 74*c7b67985SPhilip Paeps 75*c7b67985SPhilip Paeps XML_NONTESTING_STATIC XML_Bool keyeq(KEY s1, size_t s1len, KEY s2); 76*c7b67985SPhilip Paeps XML_NONTESTING_STATIC size_t keylen(KEY s); 77*c7b67985SPhilip Paeps 78*c7b67985SPhilip Paeps #endif // ! defined(HASH_TABLE_H) 79