<?xml version="1.0" encoding="UTF-8"?>
<fpdoc-descriptions>
  <package name="lcl">
    <!--
  ====================================================================
    DynHashArray
  ====================================================================
-->
    <module name="DynHashArray">
      <short>Module of managing dynamic sets or associative arrays</short>
      <descr>
        <p>Extends the functionality of Pascal by offering alternative data structure : set like array (the order is not kept) with fast find/delete. Its size can change automatically during the execution of the program.  The price is that it is somewhat slower than a number indexes access of an array. </p>
        <p>This unit defines TDynHashArray, which is very similar to a TList, since
    it also stores pointer/objects. </p>
        <p>It supports Add, Remove, Contains, First, Count and Clear.</p>
        <p>Because of the hashing nature the operations adding, removing and finding is
    done in constant time on average.</p>
        <code>Inner structure:
      There are three parts:
        1. The array itself (FItems). Every entry is a pointer to the first
           TDynHashArrayItem of a list with the same hash index. The first item
           of every same index list is the list beginning and its IsOverflow
           flag is set to false. All other items are overflow items.
           To get all items with the same hash index, do a FindHashItem. Then
           search through all "Next" items until Next is nil or its IsOverflow
           flag is set to false.
        2. The items beginning with FFirstItem is a 2-way-connected list of
           TDynHashArrayItem. This list contains all used items.
        3. To reduce GetMem/FreeMem calls, free items are cached.

  Issues:
    The maximum capacity is the PrimeNumber. You can store more items, but the
    performance decreases. The best idea is to provide your own hash function.
    
    Important: Items in the TDynHashArray must not change their key.
      When changing the key of an item, remove it and add it after the change.
</code>
      </descr>
      <!-- unresolved type reference Visibility: default -->
      <element name="Classes">
        <short/>
        <descr/>
        <seealso/>
      </element>
      <!-- unresolved type reference Visibility: default -->
      <element name="SysUtils">
        <short/>
        <descr/>
        <seealso/>
      </element>
      <!-- unresolved type reference Visibility: default -->
      <element name="LCLProc">
        <short/>
        <descr/>
        <seealso/>
      </element>
      <!-- object Visibility: default -->
      <element name="TDynHashArray">
        <short>Name of the class that store all functions and data for an hashed array.</short>
        <descr/>
        <errors/>
        <seealso/>
      </element>
      <!-- function type Visibility: default -->
      <element name="THashFunction">
        <short>Type for hash function</short>
        <descr>Each hash function specified by the user has to have these parameters</descr>
        <seealso/>
      </element>
      <!-- function result Visibility: default -->
      <element name="THashFunction.Result">
        <short/>
      </element>
      <!-- argument Visibility: default -->
      <element name="THashFunction.Sender">
        <short/>
      </element>
      <!-- argument Visibility: default -->
      <element name="THashFunction.Item">
        <short/>
      </element>
      <!-- function type Visibility: default -->
      <element name="TOwnerHashFunction">
        <short/>
        <descr/>
        <seealso/>
      </element>
      <!-- function result Visibility: default -->
      <element name="TOwnerHashFunction.Result">
        <short/>
      </element>
      <!-- argument Visibility: default -->
      <element name="TOwnerHashFunction.Item">
        <short/>
      </element>
      <!-- function type Visibility: default -->
      <element name="TOnGetKeyForHashItem">
        <short/>
        <descr/>
        <seealso/>
      </element>
      <!-- function result Visibility: default -->
      <element name="TOnGetKeyForHashItem.Result">
        <short/>
      </element>
      <!-- argument Visibility: default -->
      <element name="TOnGetKeyForHashItem.Item">
        <short/>
      </element>
      <!-- pointer type Visibility: default -->
      <element name="PDynHashArrayItem">
        <short/>
        <descr/>
        <seealso/>
      </element>
      <!-- record type Visibility: default -->
      <element name="TDynHashArrayItem">
        <short/>
        <descr/>
        <seealso/>
      </element>
      <!-- variable Visibility: default -->
      <element name="TDynHashArrayItem.Item">
        <short>Pointer to an element to be stored in the array.</short>
        <descr/>
        <seealso/>
      </element>
      <!-- variable Visibility: default -->
      <element name="TDynHashArrayItem.Next">
        <short>It points to the next element in the doubly linked list.</short>
        <descr/>
        <seealso/>
      </element>
      <!-- variable Visibility: default -->
      <element name="TDynHashArrayItem.Prior">
        <short>It points to the previous element in the doubly linked list.</short>
        <descr/>
        <seealso/>
      </element>
      <!-- variable Visibility: default -->
      <element name="TDynHashArrayItem.IsOverflow">
        <short>False if it is the first element of the linked list.</short>
        <descr/>
        <seealso/>
      </element>
      <!-- enumeration type Visibility: default -->
      <element name="TDynHashArrayOption">
        <short>Options for how this class should work.</short>
        <descr/>
        <seealso/>
      </element>
      <!-- enumeration value Visibility: default -->
      <element name="TDynHashArrayOption.dhaoCachingEnabled">
        <short>It will use cached result if available in IndexOfKey</short>
      </element>
      <!-- enumeration value Visibility: default -->
      <element name="TDynHashArrayOption.dhaoCacheContains">
        <short>Turns on a cache for contains operations.</short>
      </element>
      <!-- set type Visibility: default -->
      <element name="TDynHashArrayOptions">
        <short/>
        <descr/>
        <seealso/>
      </element>
      <!-- object Visibility: default -->
      <element name="TDynHashArray">
        <short>Implements set/associative array</short>
        <descr/>
        <errors/>
        <seealso/>
      </element>
      <!-- variable Visibility: private -->
      <element name="TDynHashArray.FItems">
        <short>Array pointing to link lists</short>
        <descr/>
        <seealso/>
      </element>
      <!-- variable Visibility: private -->
      <element name="TDynHashArray.FCount">
        <short>Number of elements stored</short>
        <descr/>
        <seealso/>
      </element>
      <!-- variable Visibility: private -->
      <element name="TDynHashArray.FCapacity">
        <short/>
        <descr/>
        <seealso/>
      </element>
      <!-- variable Visibility: private -->
      <element name="TDynHashArray.FMinCapacity">
        <short>The minimum number of items that will be allocated for an array.</short>
        <descr>The size of the array can be changed anytime. However, even if a size is given by FCapacity is smaller than this minimum number, then this minimum number of items will be allocated. This is done for efficiency and speed.</descr>
        <seealso/>
      </element>
      <!-- variable Visibility: private -->
      <element name="TDynHashArray.FMaxCapacity">
        <short>The size of the array cannot be larger than this number.</short>
        <descr>FCapacity is overridden by this number, if that is larger than this.</descr>
        <seealso/>
      </element>
      <!-- variable Visibility: private -->
      <element name="TDynHashArray.FFirstItem">
        <short/>
        <descr/>
        <seealso/>
      </element>
      <!-- variable Visibility: private -->
      <element name="TDynHashArray.FHashCacheItem">
        <short>It contains the cached key.</short>
        <descr/>
        <seealso/>
      </element>
      <!-- variable Visibility: private -->
      <element name="TDynHashArray.FHashCacheIndex">
        <short>It contains the cached index derived from the key.</short>
        <descr/>
        <seealso/>
      </element>
      <!-- variable Visibility: private -->
      <element name="TDynHashArray.FLowWaterMark">
        <short>The lower element limit for reallocation.</short>
        <descr>The number of elements allocated are halved if the number of elements in the array goes below this number.</descr>
        <seealso/>
      </element>
      <!-- variable Visibility: private -->
      <element name="TDynHashArray.FHighWaterMark">
        <short>The upper element count limit for reallocation.</short>
        <descr>The number of elements allocated are doubled if the number of elements in the array reaches this number.</descr>
        <seealso/>
      </element>
      <!-- variable Visibility: private -->
      <element name="TDynHashArray.FCustomHashFunction">
        <short>The pointer to the user-defined hash function.</short>
        <descr/>
        <seealso/>
      </element>
      <!-- variable Visibility: private -->
      <element name="TDynHashArray.FOnGetKeyForHashItem">
        <short>Optional user-defined function for converting keys.</short>
        <descr/>
        <seealso/>
      </element>
      <!-- variable Visibility: private -->
      <element name="TDynHashArray.FOptions">
        <short/>
        <descr/>
        <seealso/>
      </element>
      <!-- variable Visibility: private -->
      <element name="TDynHashArray.FOwnerHashFunction">
        <short>Optional user-defined hash function which can be SlowAlternativeHashMethod.</short>
        <descr/>
        <seealso/>
      </element>
      <!-- variable Visibility: private -->
      <element name="TDynHashArray.FContainsCache">
        <short/>
        <descr/>
        <seealso/>
      </element>
      <!-- function Visibility: private -->
      <element name="TDynHashArray.NewHashItem">
        <short/>
        <descr/>
        <errors/>
        <seealso/>
      </element>
      <!-- function result Visibility: default -->
      <element name="TDynHashArray.NewHashItem.Result">
        <short/>
      </element>
      <!-- procedure Visibility: private -->
      <element name="TDynHashArray.DisposeHashItem">
        <short/>
        <descr/>
        <errors/>
        <seealso/>
      </element>
      <!-- argument Visibility: default -->
      <element name="TDynHashArray.DisposeHashItem.ADynHashArrayItem">
        <short/>
      </element>
      <!-- procedure Visibility: private -->
      <element name="TDynHashArray.ComputeWaterMarks">
        <short/>
        <descr/>
        <errors/>
        <seealso/>
      </element>
      <!-- procedure Visibility: private -->
      <element name="TDynHashArray.SetCapacity">
        <short>Changes the number of items (pre-)allocated.</short>
        <descr/>
        <errors/>
        <seealso/>
      </element>
      <!-- argument Visibility: default -->
      <element name="TDynHashArray.SetCapacity.NewCapacity">
        <short/>
      </element>
      <!-- procedure Visibility: private -->
      <element name="TDynHashArray.SetCustomHashFunction">
        <short>Specify your own hash function to be used by the class.</short>
        <descr>The hash function has to convert a string into a number in a random fashion.</descr>
        <errors/>
        <seealso/>
      </element>
      <!-- argument Visibility: default -->
      <element name="TDynHashArray.SetCustomHashFunction.AValue">
        <short/>
      </element>
      <!-- procedure Visibility: private -->
      <element name="TDynHashArray.SetOnGetKeyForHashItem">
        <short/>
        <descr/>
        <errors/>
        <seealso/>
      </element>
      <!-- argument Visibility: default -->
      <element name="TDynHashArray.SetOnGetKeyForHashItem.AValue">
        <short/>
      </element>
      <!-- procedure Visibility: private -->
      <element name="TDynHashArray.SetOptions">
        <short/>
        <descr/>
        <errors/>
        <seealso/>
      </element>
      <!-- argument Visibility: default -->
      <element name="TDynHashArray.SetOptions.AValue">
        <short/>
      </element>
      <!-- procedure Visibility: private -->
      <element name="TDynHashArray.SetOwnerHashFunction">
        <short/>
        <descr/>
        <errors/>
        <seealso/>
      </element>
      <!-- argument Visibility: default -->
      <element name="TDynHashArray.SetOwnerHashFunction.AValue">
        <short/>
      </element>
      <!-- procedure Visibility: protected -->
      <element name="TDynHashArray.RebuildItems">
        <short>Rebuilds the internal datastructures.</short>
        <descr>It is called anytime when there is a change that makes it necessary. E.g. hash function changes or because of dynamic reallocation.</descr>
        <errors/>
        <seealso/>
      </element>
      <!-- procedure Visibility: protected -->
      <element name="TDynHashArray.SaveCacheItem">
        <short>Sets the cache.</short>
        <descr>The cache is set as given by the parameters.</descr>
        <errors/>
        <seealso/>
      </element>
      <!-- argument Visibility: default -->
      <element name="TDynHashArray.SaveCacheItem.Item">
        <short/>
      </element>
      <!-- argument Visibility: default -->
      <element name="TDynHashArray.SaveCacheItem.Index">
        <short/>
      </element>
      <!-- constructor Visibility: public -->
      <element name="TDynHashArray.Create">
        <short/>
        <descr/>
        <errors/>
        <seealso/>
      </element>
      <!-- constructor Visibility: public -->
      <element name="TDynHashArray.Create">
        <short/>
        <descr/>
        <errors/>
        <seealso/>
      </element>
      <!-- argument Visibility: default -->
      <element name="TDynHashArray.Create.InitialMinCapacity">
        <short/>
      </element>
      <!-- destructor Visibility: public -->
      <element name="TDynHashArray.Destroy">
        <short/>
        <descr/>
        <errors/>
        <seealso/>
      </element>
      <!-- procedure Visibility: public -->
      <element name="TDynHashArray.Add">
        <short>Adds an item to the set/array.</short>
        <descr><p>An example:</p><code>uses
  {$IFDEF UNIX}{$IFDEF UseCThreads}
 cthreads,
  {$ENDIF}{$ENDIF}
  Classes, dynhasharray,strings;

var
  A:TDynHashArray;
  s:pchar;
begin
A:=TDynHashArray.Create;
s:=StrNew ('u');
A.Add(s);
if A.Contains(s) then
  writeln('1:it contains s.');
  writeln('1:count:',A.Count);
A.Clear;

if A.Contains(s) then
  writeln('2:it contains s.');
  writeln('2:count:',A.Count);
ReadLn;
StrDispose(s);   </code>
        </descr>
        <errors/>
        <seealso/>
      </element>
      <!-- argument Visibility: default -->
      <element name="TDynHashArray.Add.Item">
        <short/>
      </element>
      <!-- function Visibility: public -->
      <element name="TDynHashArray.Contains">
        <short>Returns true if the item is in the set.</short>
        <descr><p>An example:</p><code>uses
  {$IFDEF UNIX}{$IFDEF UseCThreads}
 cthreads,
  {$ENDIF}{$ENDIF}
  Classes, dynhasharray,strings;

var
  A:TDynHashArray;
  s:pchar;
begin
A:=TDynHashArray.Create;
s:=StrNew ('u');
A.Add(s);
if A.Contains(s) then
  writeln('1:it contains s.');
  writeln('1:count:',A.Count);
A.Clear;

if A.Contains(s) then
  writeln('2:it contains s.');
  writeln('2:count:',A.Count);
ReadLn;
StrDispose(s);   </code>
</descr>
        <errors/>
        <seealso/>
      </element>
      <!-- function result Visibility: default -->
      <element name="TDynHashArray.Contains.Result">
        <short/>
      </element>
      <!-- argument Visibility: default -->
      <element name="TDynHashArray.Contains.Item">
        <short/>
      </element>
      <!-- function Visibility: public -->
      <element name="TDynHashArray.ContainsKey">
        <short>Returns true if the item is in the set.(through OnGetKeyForHashItem)</short>
        <descr/>
        <errors/>
        <seealso/>
      </element>
      <!-- function result Visibility: default -->
      <element name="TDynHashArray.ContainsKey.Result">
        <short/>
      </element>
      <!-- argument Visibility: default -->
      <element name="TDynHashArray.ContainsKey.Key">
        <short/>
      </element>
      <!-- procedure Visibility: public -->
      <element name="TDynHashArray.Remove">
        <short>Removes an element from the set/hash array</short>
        <descr><p>An example:</p><code>{$mode objfpc}{$H+}

uses
  {$IFDEF UNIX}{$IFDEF UseCThreads}
 cthreads,
  {$ENDIF}{$ENDIF}
  Classes, dynhasharray,strings;

var
  A:TDynHashArray;
  s:pchar;
  s2:pchar;
begin
A:=TDynHashArray.Create;
s:=StrNew ('u');
s2:=StrNew ('i');
A.Add(s);
A.Add(s2);
if A.Contains(s2) then
  writeln('1:it contains s2.');
  writeln('1:count:',A.Count);
A.Remove(s2);
if A.Contains(s2) then
  writeln('2:it contains s2.');
  writeln('2:count:',A.Count);
ReadLn;
StrDispose(s);StrDispose(s2);
end.
</code>
        </descr>
        <errors/>
        <seealso/>
      </element>
      <!-- argument Visibility: default -->
      <element name="TDynHashArray.Remove.Item">
        <short/>
      </element>
      <!-- procedure Visibility: public -->
      <element name="TDynHashArray.Clear">
        <short>Removes all elements from the set/hash array</short>
        <descr><p>An example:</p><code>uses
  {$IFDEF UNIX}{$IFDEF UseCThreads}
 cthreads,
  {$ENDIF}{$ENDIF}
  Classes, dynhasharray,strings;

var
  A:TDynHashArray;
  s:pchar;
begin
A:=TDynHashArray.Create;
s:=StrNew ('u');
A.Add(s);
if A.Contains(s) then
  writeln('1:it contains s.');
  writeln('1:count:',A.Count);
A.Clear;

if A.Contains(s) then
  writeln('2:it contains s.');
  writeln('2:count:',A.Count);
ReadLn;
StrDispose(s);   </code>
        </descr>
        <errors/>
        <seealso/>
      </element>
      <!-- procedure Visibility: public -->
      <element name="TDynHashArray.ClearCache">
        <short>Clears the FContainsCache cache</short>
        <descr/>
        <errors/>
        <seealso/>
      </element>
      <!-- function Visibility: public -->
      <element name="TDynHashArray.First">
        <short>Returns the first item or nil</short>
        <descr/>
        <errors/>
        <seealso/>
      </element>
      <!-- function result Visibility: default -->
      <element name="TDynHashArray.First.Result">
        <short/>
      </element>
      <!-- property Visibility: public -->
      <element name="TDynHashArray.Count">
        <short>Number of elements stored in the set/array.</short>
        <descr><p>An example:</p><code>uses
  {$IFDEF UNIX}{$IFDEF UseCThreads}
 cthreads,
  {$ENDIF}{$ENDIF}
  Classes, dynhasharray,strings;

var
  A:TDynHashArray;
  s:pchar;
begin
A:=TDynHashArray.Create;
s:=StrNew ('u');
A.Add(s);
if A.Contains(s) then
  writeln('1:it contains s.');
  writeln('1:count:',A.Count);
A.Clear;

if A.Contains(s) then
  writeln('2:it contains s.');
  writeln('2:count:',A.Count);
ReadLn;
StrDispose(s);   </code>
        </descr>
        <seealso/>
      </element>
      <!-- function Visibility: public -->
      <element name="TDynHashArray.IndexOf">
        <short>Returns calculated index from Item through OnGetKeyForHashItem</short>
        <descr/>
        <errors/>
        <seealso/>
      </element>
      <!-- function result Visibility: default -->
      <element name="TDynHashArray.IndexOf.Result"/>
      <!-- argument Visibility: default -->
      <element name="TDynHashArray.IndexOf.AnItem">
        <short/>
      </element>
      <!-- function Visibility: public -->
      <element name="TDynHashArray.IndexOfKey">
        <short>Returns calculated index from Item</short>
        <descr>It uses user-defined hash functions or built-in algorithm</descr>
        <errors/>
        <seealso/>
      </element>
      <!-- function result Visibility: default -->
      <element name="TDynHashArray.IndexOfKey.Result">
        <short/>
      </element>
      <!-- argument Visibility: default -->
      <element name="TDynHashArray.IndexOfKey.Key">
        <short/>
      </element>
      <!-- function Visibility: public -->
      <element name="TDynHashArray.FindHashItem">
        <short>Finds an item as PDynHashArrayItem among all items</short>
        <descr/>
        <errors/>
        <seealso/>
      </element>
      <!-- function result Visibility: default -->
      <element name="TDynHashArray.FindHashItem.Result">
        <short/>
      </element>
      <!-- argument Visibility: default -->
      <element name="TDynHashArray.FindHashItem.Item">
        <short/>
      </element>
      <!-- function Visibility: public -->
      <element name="TDynHashArray.FindHashItemWithKey">
        <short>Finds an item as PDynHashArrayItem among all items (through OnGetKeyForHashItem)</short>
        <descr/>
        <errors/>
        <seealso/>
      </element>
      <!-- function result Visibility: default -->
      <element name="TDynHashArray.FindHashItemWithKey.Result">
        <short/>
      </element>
      <!-- argument Visibility: default -->
      <element name="TDynHashArray.FindHashItemWithKey.Key">
        <short/>
      </element>
      <!-- function Visibility: public -->
      <element name="TDynHashArray.FindItemWithKey">
        <short>Finds an item among all items (through OnGetKeyForHashItem)</short>
        <descr/>
        <errors/>
        <seealso/>
      </element>
      <!-- function result Visibility: default -->
      <element name="TDynHashArray.FindItemWithKey.Result">
        <short/>
      </element>
      <!-- argument Visibility: default -->
      <element name="TDynHashArray.FindItemWithKey.Key">
        <short/>
      </element>
      <!-- function Visibility: public -->
      <element name="TDynHashArray.GetHashItem">
        <short>Gets a link list from the "main" array FItems by index</short>
        <descr>So it returns a link list which can be processed.</descr>
        <errors/>
        <seealso/>
      </element>
      <!-- function result Visibility: default -->
      <element name="TDynHashArray.GetHashItem.Result">
        <short/>
      </element>
      <!-- argument Visibility: default -->
      <element name="TDynHashArray.GetHashItem.HashIndex">
        <short/>
      </element>
      <!-- procedure Visibility: public -->
      <element name="TDynHashArray.Delete">
        <short>Deletes a PDynHashArrayItem from link list</short>
        <descr/>
        <errors/>
        <seealso/>
      </element>
      <!-- argument Visibility: default -->
      <element name="TDynHashArray.Delete.ADynHashArrayItem">
        <short/>
      </element>
      <!-- procedure Visibility: public -->
      <element name="TDynHashArray.AssignTo">
        <short>Copies all items into a given TList</short>
        <descr/>
        <errors/>
        <seealso/>
      </element>
      <!-- argument Visibility: default -->
      <element name="TDynHashArray.AssignTo.List">
        <short/>
      </element>
      <!-- function Visibility: public -->
      <element name="TDynHashArray.SlowAlternativeHashMethod">
        <short>Another hash function that can be used.</short>
        <descr/>
        <errors/>
        <seealso/>
      </element>
      <!-- function result Visibility: default -->
      <element name="TDynHashArray.SlowAlternativeHashMethod.Result">
        <short/>
      </element>
      <!-- argument Visibility: default -->
      <element name="TDynHashArray.SlowAlternativeHashMethod.Sender">
        <short/>
      </element>
      <!-- argument Visibility: default -->
      <element name="TDynHashArray.SlowAlternativeHashMethod.Item">
        <short/>
      </element>
      <!-- function Visibility: public -->
      <element name="TDynHashArray.ConsistencyCheck">
        <short>Check if data in TDynHashArray are ok</short>
        <descr>Returns a number indicating the nature of inconsistency. 0
         means OK.
</descr>
        <errors/>
        <seealso/>
      </element>
      <!-- function result Visibility: default -->
      <element name="TDynHashArray.ConsistencyCheck.Result">
        <short/>
      </element>
      <!-- procedure Visibility: public -->
      <element name="TDynHashArray.WriteDebugReport">
        <short>Prints out essential data to aid debugging TDynHashArray.</short>
        <descr/>
        <errors/>
        <seealso/>
      </element>
      <!-- property Visibility: public -->
      <element name="TDynHashArray.FirstHashItem">
        <short/>
        <descr/>
        <seealso/>
      </element>
      <!-- property Visibility: public -->
      <element name="TDynHashArray.MinCapacity">
        <short>The minimum number of items that will be allocated for an array.</short>
        <descr>The size of the array can be changed anytime. However, even if a size is given by FCapacity is smaller than this minimum number, then this minimum number of items will be allocated. This is done for efficiency and speed.</descr>
        <seealso/>
      </element>
      <!-- property Visibility: public -->
      <element name="TDynHashArray.MaxCapacity">
        <short>The size of the array cannot be larger than this number.</short>
        <descr>FCapacity is overridden by this number, if that is larger than this.</descr>
        <seealso/>
      </element>
      <!-- property Visibility: public -->
      <element name="TDynHashArray.Capacity">
        <short>Space is allocated for this number of items.</short>
        <descr/>
        <seealso/>
      </element>
      <!-- property Visibility: public -->
      <element name="TDynHashArray.CustomHashFunction">
        <short>The pointer to the user-defined hash function.</short>
        <descr/>
        <seealso/>
      </element>
      <!-- property Visibility: public -->
      <element name="TDynHashArray.OwnerHashFunction">
        <short>THe pointer to the user-defined hash function.</short>
        <descr/>
        <seealso/>
      </element>
      <!-- property Visibility: public -->
      <element name="TDynHashArray.OnGetKeyForHashItem">
        <short>User-defined function to obtain a key from an item</short>
        <descr>If this function is specified,then it is possible to use this class as
         an associative array. Otherwise, it implements a set.</descr>
        <seealso/>
      </element>
      <!-- property Visibility: public -->
      <element name="TDynHashArray.Options">
        <short/>
        <descr/>
        <seealso/>
      </element>
      <!-- object Visibility: default -->
      <element name="TDynHashArrayItemMemManager">
        <short/>
        <descr/>
        <errors/>
        <seealso/>
      </element>
      <!-- variable Visibility: private -->
      <element name="TDynHashArrayItemMemManager.FFirstFree">
        <short/>
        <descr/>
        <seealso/>
      </element>
      <!-- variable Visibility: private -->
      <element name="TDynHashArrayItemMemManager.FFreeCount">
        <short/>
        <descr/>
        <seealso/>
      </element>
      <!-- variable Visibility: private -->
      <element name="TDynHashArrayItemMemManager.FCount">
        <short/>
        <descr/>
        <seealso/>
      </element>
      <!-- variable Visibility: private -->
      <element name="TDynHashArrayItemMemManager.FMinFree">
        <short/>
        <descr/>
        <seealso/>
      </element>
      <!-- variable Visibility: private -->
      <element name="TDynHashArrayItemMemManager.FMaxFreeRatio">
        <short/>
        <descr/>
        <seealso/>
      </element>
      <!-- procedure Visibility: private -->
      <element name="TDynHashArrayItemMemManager.SetMaxFreeRatio">
        <short/>
        <descr/>
        <errors/>
        <seealso/>
      </element>
      <!-- argument Visibility: default -->
      <element name="TDynHashArrayItemMemManager.SetMaxFreeRatio.NewValue">
        <short/>
      </element>
      <!-- procedure Visibility: private -->
      <element name="TDynHashArrayItemMemManager.SetMinFree">
        <short/>
        <descr/>
        <errors/>
        <seealso/>
      </element>
      <!-- argument Visibility: default -->
      <element name="TDynHashArrayItemMemManager.SetMinFree.NewValue">
        <short/>
      </element>
      <!-- procedure Visibility: private -->
      <element name="TDynHashArrayItemMemManager.DisposeFirstFreeItem">
        <short/>
        <descr/>
        <errors/>
        <seealso/>
      </element>
      <!-- procedure Visibility: public -->
      <element name="TDynHashArrayItemMemManager.DisposeItem">
        <short/>
        <descr/>
        <errors/>
        <seealso/>
      </element>
      <!-- argument Visibility: default -->
      <element name="TDynHashArrayItemMemManager.DisposeItem.ADynHashArrayItem">
        <short/>
      </element>
      <!-- function Visibility: public -->
      <element name="TDynHashArrayItemMemManager.NewItem">
        <short/>
        <descr/>
        <errors/>
        <seealso/>
      </element>
      <!-- function result Visibility: default -->
      <element name="TDynHashArrayItemMemManager.NewItem.Result">
        <short/>
      </element>
      <!-- property Visibility: public -->
      <element name="TDynHashArrayItemMemManager.MinimumFreeCount">
        <short/>
        <descr/>
        <seealso/>
      </element>
      <!-- property Visibility: public -->
      <element name="TDynHashArrayItemMemManager.MaximumFreeRatio">
        <short/>
        <descr/>
        <seealso/>
      </element>
      <!-- property Visibility: public -->
      <element name="TDynHashArrayItemMemManager.Count">
        <short/>
        <descr/>
        <seealso/>
      </element>
      <!-- procedure Visibility: public -->
      <element name="TDynHashArrayItemMemManager.Clear">
        <short/>
        <descr/>
        <errors/>
        <seealso/>
      </element>
      <!-- constructor Visibility: public -->
      <element name="TDynHashArrayItemMemManager.Create">
        <short/>
        <descr/>
        <errors/>
        <seealso/>
      </element>
      <!-- destructor Visibility: public -->
      <element name="TDynHashArrayItemMemManager.Destroy">
        <short/>
        <descr/>
        <errors/>
        <seealso/>
      </element>
      <!-- function Visibility: public -->
      <element name="TDynHashArrayItemMemManager.ConsistencyCheck">
        <short/>
        <descr/>
        <errors/>
        <seealso/>
      </element>
      <!-- function result Visibility: default -->
      <element name="TDynHashArrayItemMemManager.ConsistencyCheck.Result">
        <short/>
      </element>
      <!-- procedure Visibility: public -->
      <element name="TDynHashArrayItemMemManager.WriteDebugReport">
        <short>Prints out essential data to aid debugging DynHashArrayItemMemManager.</short>
        <descr/>
        <errors/>
        <seealso/>
      </element>
      <!-- object Visibility: default -->
      <element name="EDynHashArrayException">
        <short>Raised if index is invalid in IndexOfKey.</short>
        <descr>The index can be invalid if user-defined/custom function are faulty.</descr>
        <errors/>
        <seealso/>
      </element>
      <!-- constant Visibility: default -->
      <element name="ItemMemManager">
        <short>A small memory manager</short>
        <descr/>
        <seealso/>
      </element>
    </module>
    <!-- DynHashArray -->
  </package>
</fpdoc-descriptions>
