hash.inc 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. (*
  2. * Summary: Chained hash tables
  3. * Description: This module implements the hash table support used in
  4. * various places in the library.
  5. *
  6. * Copy: See Copyright for the status of this software.
  7. *
  8. * Author: Bjorn Reese <[email protected]>
  9. *)
  10. {$IFDEF POINTER}
  11. xmlHashTablePtr = ^xmlHashTable;
  12. {$ENDIF}
  13. {$IFDEF TYPE}
  14. (*
  15. * The hash table.
  16. *)
  17. xmlHashTable = record end;
  18. (*
  19. * Recent version of gcc produce a warning when a function pointer is assigned
  20. * to an object pointer, or vice versa. The following macro is a dirty hack
  21. * to allow suppression of the warning. If your architecture has function
  22. * pointers which are a different size than a void pointer, there may be some
  23. * serious trouble within the library.
  24. *)
  25. (*
  26. * function types:
  27. *)
  28. (**
  29. * xmlHashDeallocator:
  30. * @payload: the data in the hash
  31. * @name: the name associated
  32. *
  33. * Callback to free data from a hash.
  34. *)
  35. xmlHashDeallocator = procedure(payload: pointer; name: xmlCharPtr); EXTDECL;
  36. (**
  37. * xmlHashCopier:
  38. * @payload: the data in the hash
  39. * @name: the name associated
  40. *
  41. * Callback to copy data from a hash.
  42. *
  43. * Returns a copy of the data or NULL in case of error.
  44. *)
  45. xmlHashCopier = function(payload: pointer; name: xmlCharPtr): pointer; EXTDECL;
  46. (**
  47. * xmlHashScanner:
  48. * @payload: the data in the hash
  49. * @data: extra scannner data
  50. * @name: the name associated
  51. *
  52. * Callback when scanning data in a hash with the simple scanner.
  53. *)
  54. xmlHashScanner = procedure(payload: pointer; data: pointer; name: xmlCharPtr); EXTDECL;
  55. (**
  56. * xmlHashScannerFull:
  57. * @payload: the data in the hash
  58. * @data: extra scannner data
  59. * @name: the name associated
  60. * @name2: the second name associated
  61. * @name3: the third name associated
  62. *
  63. * Callback when scanning data in a hash with the full scanner.
  64. *)
  65. xmlHashScannerFull = procedure(payload: pointer; data: pointer; name, name2, name3: xmlCharPtr); EXTDECL;
  66. {$ENDIF}
  67. {$IFDEF FUNCTION}
  68. (*
  69. * Constructor and destructor.
  70. *)
  71. function xmlHashCreate(size: cint): xmlHashTablePtr; EXTDECL; external xml2lib;
  72. function xmlHashCreateDict(size: cint; dict: xmlDictPtr): xmlHashTablePtr; EXTDECL; external xml2lib;
  73. procedure xmlHashFree(table: xmlHashTablePtr; f: xmlHashDeallocator); EXTDECL; external xml2lib;
  74. (*
  75. * Add a new entry to the hash table.
  76. *)
  77. function xmlHashAddEntry(table: xmlHashTablePtr; name: xmlCharPtr; userdata: pointer): cint; EXTDECL; external xml2lib;
  78. function xmlHashUpdateEntry(table: xmlHashTablePtr; name: xmlCharPtr; userdata: pointer; f: xmlHashDeallocator): cint; EXTDECL; external xml2lib;
  79. function xmlHashAddEntry2(table: xmlHashTablePtr; name, name2: xmlCharPtr; userdata: pointer): cint; EXTDECL; external xml2lib;
  80. function xmlHashUpdateEntry2(table: xmlHashTablePtr; name, name2: xmlCharPtr; userdata: pointer; f: xmlHashDeallocator): cint; EXTDECL; external xml2lib;
  81. function xmlHashAddEntry3(table: xmlHashTablePtr; name, name2, name3: xmlCharPtr; userdata: pointer): cint; EXTDECL; external xml2lib;
  82. function xmlHashUpdateEntry2(table: xmlHashTablePtr; name, name2, name3: xmlCharPtr; userdata: pointer; f: xmlHashDeallocator): cint; EXTDECL; external xml2lib;
  83. (*
  84. * Remove an entry from the hash table.
  85. *)
  86. function xmlHashRemoveEntry(table: xmlHashTablePtr; name: xmlCharPtr; f: xmlHashDeallocator): cint; EXTDECL; external xml2lib;
  87. function xmlHashRemoveEntry2(table: xmlHashTablePtr; name, name2: xmlCharPtr; f: xmlHashDeallocator): cint; EXTDECL; external xml2lib;
  88. function xmlHashRemoveEntry3(table: xmlHashTablePtr; name, name2, name3: xmlCharPtr; f: xmlHashDeallocator): cint; EXTDECL; external xml2lib;
  89. (*
  90. * Retrieve the userdata.
  91. *)
  92. function xmlHashRemoveEntry(table: xmlHashTablePtr; name: xmlCharPtr): pointer; EXTDECL; external xml2lib;
  93. function xmlHashRemoveEntry2(table: xmlHashTablePtr; name, name2: xmlCharPtr): pointer; EXTDECL; external xml2lib;
  94. function xmlHashRemoveEntry3(table: xmlHashTablePtr; name, name2, name3: xmlCharPtr): pointer; EXTDECL; external xml2lib;
  95. function xmlHashQLookup(table: xmlHashTablePtr; name, prefix: xmlCharPtr): pointer; EXTDECL; external xml2lib;
  96. function xmlHashQLookup2(table: xmlHashTablePtr; name, prefix, name2, prefix2: xmlCharPtr): pointer; EXTDECL; external xml2lib;
  97. function xmlHashQLookup3(table: xmlHashTablePtr; name, prefix, name2, prefix2, name3, prefix3: xmlCharPtr): pointer; EXTDECL; external xml2lib;
  98. (*
  99. * Helpers.
  100. *)
  101. function xmlHashCopy(table: xmlHashTablePtr; f: xmlHashCopier): xmlHashTablePtr; EXTDECL; external xml2lib;
  102. function xmlHashSize(table: xmlHashTablePtr): cint; EXTDECL; external xml2lib;
  103. procedure xmlHashScan(table: xmlHashTablePtr; f: xmlHashScanner; data: pointer); EXTDECL; external xml2lib;
  104. procedure xmlHashScan(table: xmlHashTablePtr; name, name2, name3: xmlCharPtr; f: xmlHashScanner; data: pointer); EXTDECL; external xml2lib;
  105. procedure xmlHashScanFull(table: xmlHashTablePtr; f: xmlHashScannerFull; data: pointer); EXTDECL; external xml2lib;
  106. procedure xmlHashScanFull(table: xmlHashTablePtr; name, name2, name3: xmlCharPtr; f: xmlHashScannerFull; data: pointer); EXTDECL; external xml2lib;
  107. {$ENDIF}