typedef struct single_table_ent
{
  struct single_table_ent *next;
  unsigned long long val;
  char name[4];
} single_table_ent;

typedef struct double_table_ent
{
  struct double_table_ent *next;
  unsigned long long val1, val2;
  char name[4];
} double_table_ent;

typedef struct long_table_ent
{
  struct long_table_ent *next;
  unsigned long long val;
  unsigned long name;
} long_table_ent;

typedef struct generic_table_ent
{
  struct generic_table_ent *next;
  unsigned long long val;
} generic_table_ent;

typedef struct
{
  char *name;
  unsigned long size, used, ents, longest;
  generic_table_ent **data;
} table;

int table_init (table *t, unsigned long size, char *name);
void single_table_inc (table *t, char *v, unsigned long amt);
void double_table_inc (table *t, char *v,
		       unsigned long amt1, unsigned long amt2);
void long_table_inc (table *t, unsigned long v, unsigned long amt);
void table_info (table *t);
int table_select (table *t, int n,
                  generic_table_ent **indexes, unsigned long long *scratch);
int table_select_min (table *t, int n,
		      generic_table_ent **indexes, unsigned long long *scratch);
