Blob Blame History Raw
#include "common.h"

#include "wordhash.h"

typedef struct
{
  int count;
}
wh_elt_t;

/* function definitions */

static void word_init(void *vw){
     wh_elt_t *w = (wh_elt_t *)vw;
     w->count = 0;
}

static void
dump_hash (wordhash_t * h)
{
  hashnode_t *p;
  for (p = (hashnode_t *)wordhash_first (h); p != NULL; p = (hashnode_t *)wordhash_next (h))
    {
      word_t *key = p->key;
      (void)word_puts(key, 0, stdout);
      (void)printf (" %d\n", ((wh_elt_t *) p->data)->count);
    }
}

int
main (void)
{
  wordhash_t *h = wordhash_new ();
  char buf[100];
  wh_elt_t *w;

  while (scanf ("%99s", buf) != EOF)
    {
      word_t *t = word_news(buf);
      w = (wh_elt_t *)wordhash_insert(h, t, sizeof (word_t), &word_init);
      w->count++;
    }

  dump_hash (h);
  wordhash_free (h);
  return 0;
}