Skip to content
Snippets Groups Projects
hashtable-test.c 1.09 KiB
Newer Older
Bruce Cowan's avatar
Bruce Cowan committed
#include <stdio.h>
Bruce Cowan's avatar
Bruce Cowan committed
#include <stdlib.h>
#include <string.h>

#include <hashtable.h>
Bruce Cowan's avatar
Bruce Cowan committed

static void
add_data (HashTable *table)
{
Bruce Cowan's avatar
Bruce Cowan committed
  char key[20];
  char value[20];

  printf ("Input the key ");
  scanf ("%s", key);
  printf ("Input the value ");
  scanf ("%s", value);

  hash_table_insert (table, strdup (key), strdup (value));

  char *key_lookup = strndup (key, strlen (key));
  printf ("The last one inserted was: {'%s': ", key_lookup);
  const char *val = hash_table_lookup (table, key);
  printf ("'%s'}\n", val);

  free (key_lookup);
}

static void
print_all (void *key,
           void *value,
           void *user_data)
{
  printf ("%s:%s\n", (const char *) key, (const char *) value);
}
Bruce Cowan's avatar
Bruce Cowan committed
static unsigned
str_hash (const void *data)
{
  const char *str = (const char *) data;
  return (unsigned) str[0];
}
Bruce Cowan's avatar
Bruce Cowan committed
static bool
str_equal (const void *a,
           const void *b)
{
  return !strcmp (a, b);
Bruce Cowan's avatar
Bruce Cowan committed
}

int
main (void)
{
Bruce Cowan's avatar
Bruce Cowan committed
  HashTable *table;
Bruce Cowan's avatar
Bruce Cowan committed
  table = hash_table_new (str_hash, str_equal, free, free);
Bruce Cowan's avatar
Bruce Cowan committed
  while (1)
  {
    add_data (table);
    hash_table_foreach (table, print_all, NULL);
  }
Bruce Cowan's avatar
Bruce Cowan committed
  return 0;