Przejdź do treści

Hashtables

Info

Dependencies:
- PermMem
Implementation:
Hashtable.d on GitHub

Hashtables package is an implementation of hashtables in Gothic. Currently (version 2.8.0) only integers are supported as keys. The Hashtables grow automatically.

Initialization

Initialize with LeGo_PermMem flag.

LeGo_Init(LeGo_PermMem);

Functions

HT_CreateSized

HT_CreateSized

Generates a hashtable of the specified size.

func int HT_CreateSized(var int size)
Parameters
  • var int size
    Size of the hashtable to be created

Return value

The function returns a handle to the created hashtable.

HT_Create

HT_Create

Generates a standard size hashtable.

func int HT_Create()
Return value

The function returns a handle to the created hashtable.

HT_Insert

HT_Insert

Inserts a value into the Hashtable.

func void HT_Insert(var int handle, var int val, var int key)
Parameters
  • var int handle
    Handle of a hashtable
  • var int val
    The value to be inserted
  • var int key
    The key associated with the value

HT_Resize

HT_Resize

Changes the size of the hashtable (usually not necessary as it happens automatically).

func void HT_Resize(var int handle, var int size)
Parameters
  • var int handle
    Handle of a hashtable
  • var int size
    The new size of the hashtable

HT_Get

HT_Get

Reads a value from the hashtable.

func int HT_Get(var int handle, var int key)
Parameters
  • var int handle
    Handle of a hashtable
  • var int key
    The key whose value is to be read

Return value

The function returns the value associated with the key.

HT_Has

HT_Has

Checks if the key already exist in hashtable.

func int HT_Has(var int handle, var int key)
Parameters
  • var int handle
    Handle of a hashtable
  • var int key
    The key to be checked Return value

The function returns TRUE if the key exist, FALSE is returned otherwise.

HT_Remove

HT_Remove

Removes a key from the hashtable.

func void HT_Remove(var int handle, var int key)
Parameters
  • var int handle
    Handle of a hashtable
  • var int key
    The key to be removed

HT_Change

HT_Change

Changes the value of a key already existing in the hashtable.

func void HT_Change(var int handle, var int val, var int key)
Parameters
  • var int handle
    Handle of a hashtable
  • var int val
    The new value
  • var int key
    The key whose value is to be changed

HT_InsertOrChange

HT_InsertOrChange

Inserts a value into the Hashtable, or changes the value if the key already exist into hashtable.

func void HT_InsertOrChange(var int handle, var int val, var int key)
Parameters
  • var int handle
    Handle of a hashtable
  • var int val
    The new value
  • var int key
    The key whose value is to be changed or associated with the value.

HT_GetNumber

HT_GetNumber

Returns the number of entries in a hashtable.

func int HT_GetNumber(var int handle)
Parameters
  • var int handle
    Handle of a hashtable

Return value

The function returns the number of entries in the hashtable.

HT_ForEach

HT_ForEach

Performs a function for each value pair in the hashtable.

func void HT_ForEach(var int handle, var func fnc)
Parameters
  • var int handle
    Handle of a hashtable
  • var func fnc
    A function with signature void (int key, int val)

HT_Destroy

HT_Destroy

Deletes the hashtable.

func void HT_Destroy(var int handle)
Parameters
  • var int handle
    The handle of the hashtable to be deleted

Examples

Simple operations

func void PrintKeyValuePair(var int key, var int val)
{
    Print(ConcatStrings(ConcatStrings("Key: ", IntToString(key)), ConcatStrings(", Value: ", IntToString(val))));
};

func void example()
{
    // Create a new hashtable
    var int hashtableHandle; hashtableHandle = HT_Create();

    // Insert values into the hashtable
    HT_Insert(hashtableHandle, 42, 1);
    HT_Insert(hashtableHandle, 23, 2);
    HT_Insert(hashtableHandle, 56, 3);

    // Get a value from the hashtable
    var int value; value = HT_Get(hashtableHandle, 2);
    Print(ConcatStrings("Value associated with key 2: ", IntToString(value)));

    // Check if a key exists in the hashtable
    if (HT_Has(hashtableHandle, 3))
    {
        Print("Key 3 exists in the hashtable.");
    }
    else
    {
        Print("Key 3 does not exist in the hashtable.");
    };

    // Remove a key from the hashtable
    HT_Remove(hashtableHandle, 1);

    // Change the value associated with a key
    HT_Change(hashtableHandle, 99, 3);

    // Insert a value or change it if the key exists
    HT_InsertOrChange(hashtableHandle, 123, 4);

    // Get the number of entries in the hashtable
    var int numEntries; numEntries = HT_GetNumber(hashtableHandle);
    Print(ConcatStrings("Number of entries in the hashtable: ", IntToString(numEntries)));


    // Iterate through the hashtable and print key-value pairs
    // Function from top of the example is used here
    HT_ForEach(hashtableHandle, PrintKeyValuePair);

    // Destroy the hashtable
    HT_Destroy(hashtableHandle);
};