williamr@4: /* williamr@4: * Summary: string dictionnary williamr@4: * Description: dictionary of reusable strings, just used to avoid allocation williamr@4: * and freeing operations. williamr@4: * williamr@4: * Copy: See Copyright for the status of this software. williamr@4: * williamr@4: * Author: Daniel Veillard williamr@4: * Portion Copyright © 2009 Nokia Corporation and/or its subsidiary(-ies). All rights reserved. williamr@4: */ williamr@4: williamr@4: /** @file williamr@4: @publishedAll williamr@4: @released williamr@4: */ williamr@4: williamr@4: #ifndef XML_DICT_H williamr@4: #define XML_DICT_H williamr@4: williamr@4: #include "libxml2_xmlstring.h" williamr@4: williamr@4: #ifdef __cplusplus williamr@4: extern "C" { williamr@4: #endif williamr@4: williamr@4: typedef struct _xmlDictStrings xmlDictStrings; williamr@4: typedef xmlDictStrings* xmlDictStringsPtr; williamr@4: williamr@4: struct _xmlDictStrings { williamr@4: xmlDictStringsPtr next; williamr@4: xmlChar* free; williamr@4: xmlChar* end; williamr@4: int size; williamr@4: int nbStrings; williamr@4: xmlChar array[1]; williamr@4: }; williamr@4: williamr@4: /* williamr@4: * An entry in the dictionnary williamr@4: */ williamr@4: typedef struct _xmlDictEntry xmlDictEntry; williamr@4: typedef xmlDictEntry* xmlDictEntryPtr; williamr@4: struct _xmlDictEntry { williamr@4: xmlDictEntryPtr next; williamr@4: const xmlChar* name; williamr@4: int len; williamr@4: int valid; williamr@4: }; williamr@4: /* williamr@4: * The dictionnary. williamr@4: */ williamr@4: typedef struct _xmlDict xmlDict; williamr@4: typedef xmlDict* xmlDictPtr; williamr@4: williamr@4: /* williamr@4: * The entire dictionnary williamr@4: */ williamr@4: struct _xmlDict { williamr@4: int ref_counter; williamr@4: williamr@4: xmlDictEntryPtr dict; williamr@4: int size; williamr@4: int nbElems; williamr@4: xmlDictStringsPtr strings; williamr@4: williamr@4: xmlDictPtr subdict; williamr@4: }; williamr@4: williamr@4: /* williamr@4: * Constructor and destructor. williamr@4: */ williamr@4: XMLPUBFUN xmlDictPtr XMLCALL williamr@4: xmlDictCreate (void); williamr@4: williamr@4: XMLPUBFUN xmlDictPtr XMLCALL xmlDictCreateSub(xmlDictPtr sub); williamr@4: williamr@4: XMLPUBFUN int XMLCALL williamr@4: xmlDictReference(xmlDictPtr dict); williamr@4: XMLPUBFUN void XMLCALL williamr@4: xmlDictFree (xmlDictPtr dict); williamr@4: williamr@4: /* williamr@4: * Lookup of entry in the dictionnary. williamr@4: */ williamr@4: XMLPUBFUN const xmlChar* XMLCALL williamr@4: xmlDictLookup (xmlDictPtr dict, williamr@4: const xmlChar *name, williamr@4: int len); williamr@4: williamr@4: XMLPUBFUN const xmlChar * XMLCALL williamr@4: xmlDictQLookup (xmlDictPtr dict, williamr@4: const xmlChar *prefix, williamr@4: const xmlChar *name); williamr@4: williamr@4: #ifndef XMLENGINE_EXCLUDE_UNUSED williamr@4: XMLPUBFUN int XMLCALL williamr@4: xmlDictSize (xmlDictPtr dict); williamr@4: #endif /* ifndef XMLENGINE_EXCLUDE_UNUSED */ williamr@4: williamr@4: XMLPUBFUN int XMLCALL williamr@4: xmlDictOwns (xmlDictPtr dict, williamr@4: const xmlChar *str); williamr@4: #ifdef __cplusplus williamr@4: } williamr@4: #endif williamr@4: #endif /* XML_DICT_H */ williamr@4: