view anagram/agcore/dict.h @ 12:aab9ff6af791

Strengthen the build hack for non-DOS targets.
author David A. Holland
date Tue, 31 May 2022 00:58:42 -0400
parents 13d2b8934445
children
line wrap: on
line source

/*
 * AnaGram, A System for Syntax Directed Programming
 * Copyright 1993 Parsifal Software. All Rights Reserved.
 * See the file COPYING for license and usage terms.
 *
 * dict.h - old dictionary module
 */

#ifndef DICT_H
#define DICT_H

struct string_dict {
  unsigned *ndx;                        /* index array */
  unsigned  nsx;                        /* number of strings */
  unsigned  nxs;                        /* number of indices allocated */
  char *text;                           /* text */
  unsigned  ntc;                        /* number of text characters */
  unsigned  nts;                        /* length of test storage */
  //unsigned short *ht;                 /* pointer to hash table */
  unsigned *ht;                         /* pointer to hash table */
  unsigned  nhs;                        /* number of hash table slots */
  unsigned *st;                         /* sort table */
  unsigned  nss;                        /* number of entries sorted */
  unsigned *pt;                         /* permutation table */
  unsigned ignore_case : 1;             /* ignore case flag */
};

struct list_dict {
  unsigned *ndx;                        /* index array */
  unsigned  nsx;                        /* number of lists */
  unsigned  nxs;                        /* number of indices allocated */
  int  *text;                           /* text */
  unsigned  ntc;                        /* number of text characters */
  unsigned  nts;                        /* length of test storage */
  //unsigned short *ht;                 /* pointer to hash table */
  unsigned *ht;                         /* pointer to hash table */
  unsigned  nhs;                        /* number of hash table slots */
  unsigned *st;                         /* sort table */
  unsigned  nss;                        /* number of entries sorted */
  unsigned *pt;                         /* permutation table */
};

struct tuple_dict {
  unsigned *ndx;                        /* index array */
  unsigned  nsx;                        /* number of lists */
  unsigned  nxs;                        /* number of indices allocated */
  int  *text;                           /* text */
  unsigned  ntc;                        /* number of text characters */
  unsigned  nts;                        /* length of test storage */
  //unsigned short *ht;                 /* pointer to hash table */
  unsigned *ht;                         /* pointer to hash table */
  unsigned  nhs;                        /* number of hash table slots */
  unsigned *st;                         /* sort table */
  unsigned  nss;                        /* number of entries sorted */
  unsigned *pt;                         /* permutation table */
  unsigned  tw;                         /* tuple width */
};

#define dict_str(d,n) ((d)->text+(d)->ndx[n])

int           add_list_dict(const int *s, int n, list_dict *d);
int           add_string_dict(const char *s, string_dict *d);
int           add_tuple_dict_new(tuple_dict *d, ...);
list_dict    *delete_list_dict(list_dict *da);
string_dict  *delete_string_dict(string_dict *da);
tuple_dict   *delete_tuple_dict(tuple_dict *da);
void          empty_tuple_dict(tuple_dict *);
void          extract_tuple_dict(tuple_dict *d, unsigned k, ...);
int           identify_string(const char *, string_dict *d);
int           insert_tuple_dict(tuple_dict *d, ...);
int           list_in_dict(int*, int, list_dict *);
list_dict    *reset_list_dict(list_dict *d);
tuple_dict   *reset_tuple_dict(tuple_dict *d);
list_dict    *null_list_dict(void);
string_dict  *null_str_dict(void);
tuple_dict   *null_tuple_dict(int tw);

//string_dict *restore_string_dict(char *text, int ntc, int ne, int ic,
//				   int byte_swap_required);
//void         sort_string_dict(string_dict *d);

#endif /* DICT_H */