summaryrefslogtreecommitdiffstats
path: root/contrib/gperf/src/options.h
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/gperf/src/options.h')
-rw-r--r--contrib/gperf/src/options.h153
1 files changed, 153 insertions, 0 deletions
diff --git a/contrib/gperf/src/options.h b/contrib/gperf/src/options.h
new file mode 100644
index 0000000..1928c73
--- /dev/null
+++ b/contrib/gperf/src/options.h
@@ -0,0 +1,153 @@
+/* Handles parsing the Options provided to the user.
+
+ Copyright (C) 1989 Free Software Foundation, Inc.
+ written by Douglas C. Schmidt (schmidt@ics.uci.edu)
+
+This file is part of GNU GPERF.
+
+GNU GPERF is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 1, or (at your option)
+any later version.
+
+GNU GPERF is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU GPERF; see the file COPYING. If not, write to
+the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
+
+/* This module provides a uniform interface to the various Options available
+ to a user of the Perfect.hash function generator. In addition to the
+ run-time Options, found in the Option_Type below, there is also the
+ hash table Size and the Keys to be used in the hashing.
+ The overall design of this module was an experiment in using C++
+ classes as a mechanism to enhance centralization of option and
+ and error handling, which tend to get out of hand in a C program. */
+
+#ifndef _options_h
+#define _options_h
+
+#include <stdio.h>
+#include "prototype.h"
+
+/* Enumerate the potential debugging Options. */
+
+enum option_type
+{
+ DEBUG = 01, /* Enable debugging (prints diagnostics to Std_Err). */
+ ORDER = 02, /* Apply ordering heuristic to speed-up search time. */
+ ANSI = 04, /* Generate ANSI prototypes. */
+ ALLCHARS = 010, /* Use all characters in hash function. */
+ GNU = 020, /* Assume GNU extensions (primarily function inline). */
+ TYPE = 040, /* Handle user-defined type structured keyword input. */
+ RANDOM = 0100, /* Randomly initialize the associated values table. */
+ DEFAULTCHARS = 0200, /* Make default char positions be 1,$ (end of keyword). */
+ SWITCH = 0400, /* Generate switch output to save space. */
+ POINTER = 01000, /* Have in_word_set function return pointer, not boolean. */
+ NOLENGTH = 02000, /* Don't include keyword length in hash computations. */
+ LENTABLE = 04000, /* Generate a length table for string comparison. */
+ DUP = 010000, /* Handle duplicate hash values for keywords. */
+ FAST = 020000, /* Generate the hash function ``fast.'' */
+ NOTYPE = 040000, /* Don't include user-defined type definition
+ in output -- it's already defined elsewhere. */
+ COMP = 0100000, /* Generate strncmp rather than strcmp. */
+ GLOBAL = 0200000, /* Make the keyword table a global variable. */
+ CONST = 0400000, /* Make the generated tables readonly (const). */
+};
+
+/* Define some useful constants. */
+
+/* Max size of each word's key set. */
+#define MAX_KEY_POS (128 - 1)
+
+/* Signals the start of a word. */
+#define WORD_START 1
+
+/* Signals the end of a word. */
+#define WORD_END 0
+
+/* Signals end of the key list. */
+#define EOS MAX_KEY_POS
+
+/* Returns TRUE if option O is enabled. */
+#define OPTION_ENABLED(OW,O) (OW.option_word & (int)O)
+
+/* Enables option O in OPTION_WORD. */
+#define SET_OPTION(OW,O) (OW.option_word |= (int)O)
+
+/* Disable option O in OPTION_WORD. */
+#define UNSET_OPTION(OW,O) (OW.option_word &= ~(int)(O))
+
+/* Returns total distinct key positions. */
+#define GET_CHARSET_SIZE(O) (O.total_charset_size)
+
+/* Set the total distinct key positions. */
+#define SET_CHARSET_SIZE(O,S) (O.total_charset_size = (S))
+
+/* Initializes the key Iterator. */
+#define RESET(O) (O.key_pos = 0)
+
+/* Returns current key_position and advances index. */
+#define GET(O) (O.key_positions[O.key_pos++])
+
+/* Sets the size of the table size. */
+#define SET_ASSO_MAX(O,R) (O.size = (R))
+
+/* Returns the size of the table size. */
+#define GET_ASSO_MAX(O) (O.size)
+
+/* Returns the jump value. */
+#define GET_JUMP(O) (O.jump)
+
+/* Returns the iteration value. */
+#define GET_ITERATIONS(O) (O.iterations)
+
+/* Returns the lookup function name. */
+#define GET_FUNCTION_NAME(O) (O.function_name)
+
+/* Returns the keyword key name. */
+#define GET_KEY_NAME(O) (O.key_name)
+
+/* Returns the hash function name. */
+#define GET_HASH_NAME(O) (O.hash_name)
+
+/* Returns the initial associated character value. */
+#define INITIAL_VALUE(O) (O.initial_asso_value)
+
+/* Returns the string used to delimit keywords from other attributes. */
+#define GET_DELIMITER(O) (O.delimiters)
+
+/* Sets the keyword/attribute delimiters with value of D. */
+#define SET_DELIMITERS(O,D) (O.delimiters = (D))
+
+/* Gets the total number of switch statements to generate. */
+#define GET_TOTAL_SWITCHES(O) (O.total_switches)
+
+/* Class manager for gperf program options. */
+
+typedef struct options
+{
+ int option_word; /* Holds the user-specified Options. */
+ int total_charset_size; /* Total number of distinct key_positions. */
+ int size; /* Range of the hash table. */
+ int key_pos; /* Tracks current key position for Iterator. */
+ int jump; /* Jump length when trying alternative values. */
+ int initial_asso_value; /* Initial value for asso_values table. */
+ int argument_count; /* Records count of command-line arguments. */
+ int iterations; /* Amount to iterate when a collision occurs. */
+ int total_switches; /* Number of switch statements to generate. */
+ char **argument_vector; /* Stores a pointer to command-line vector. */
+ char *function_name; /* Name used for generated lookup function. */
+ char *key_name; /* Name used for keyword key. */
+ char *hash_name; /* Name used for generated hash function. */
+ char *delimiters; /* Separates keywords from other attributes. */
+ char key_positions[MAX_KEY_POS]; /* Contains user-specified key choices. */
+} OPTIONS;
+
+extern void options_init P ((int argc, char *argv[]));
+extern void options_destroy P ((void));
+extern OPTIONS option;
+#endif /* _options_h */
OpenPOWER on IntegriCloud