summaryrefslogtreecommitdiff
path: root/ACE/apps/gperf/src/Options.h
diff options
context:
space:
mode:
Diffstat (limited to 'ACE/apps/gperf/src/Options.h')
-rw-r--r--ACE/apps/gperf/src/Options.h190
1 files changed, 190 insertions, 0 deletions
diff --git a/ACE/apps/gperf/src/Options.h b/ACE/apps/gperf/src/Options.h
new file mode 100644
index 00000000000..a8daaafb2cc
--- /dev/null
+++ b/ACE/apps/gperf/src/Options.h
@@ -0,0 +1,190 @@
+// -*- C++ -*-
+
+// $Id$
+
+// Copyright (C) 1989 Free Software Foundation, Inc.
+// written by Douglas C. Schmidt (schmidt@cs.wustl.edu)
+
+// This file is part of GNU GPERF.
+
+// This program 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 2
+// of the License, or (at your option) any later version.
+
+// This program 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 this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+#ifndef OPTIONS_H
+#define OPTIONS_H
+
+#include "ace/Log_Msg.h"
+
+#if !defined (ACE_LACKS_PRAGMA_ONCE)
+# pragma once
+#endif /* ACE_LACKS_PRAGMA_ONCE */
+
+#if defined (ACE_HAS_GPERF)
+
+// Enumerate the potential debugging Options.
+
+enum Option_Type
+{
+ DEBUGGING = 01, // Enable debugging (prints diagnostics to stderr).
+ ORDER = 02, // Apply ordering heuristic to speed-up search time.
+ ANSI = 04, // Generate ANSI prototypes.
+ ALLCHARS = 010, // Use all characters in hash function.
+ INLINE = 020, // Generate code for inline functions.
+ 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.
+ CONSTANT = 0400000, // Make the generated tables readonly (const).
+ CPLUSPLUS = 01000000, // Generate C++ code.
+ C = 02000000, // Generate C code.
+ ENUM = 04000000, // Use enum for constants.
+ STRCASECMP = 010000000, // Use the case insensitive comparison.
+ OPTIMIZE = 020000000, // Assume all input keywords are in the keyset.
+ ADA = 040000000, // Generate Ada code.
+ MUTE = 0100000000, // Dont print the warnings.
+ SKIPCLASS = 0200000000, // Skip the class definition part in the output while in C++ mode.
+ SKIPSTRINGH = 0400000000, // Skip including the header file string.h.
+ BINARYSEARCH = 01000000000, // Generates Binary Search code.
+ LINEARSEARCH = 02000000000 // Generates Linear Search code.
+};
+
+// Define some useful constants (these don't really belong here, but
+// I'm not sure where else to put them!). These should be consts, but
+// g++ doesn't seem to do the right thing with them at the
+// moment... ;-(
+
+// PharLap ETS defines EOS as well... so if building for ETS, clear out
+// their EOS.
+#if defined (ACE_HAS_PHARLAP) && defined (EOS)
+# undef EOS
+#endif /* ACE_HAS_PHARLAP && EOS */
+
+enum
+{
+ MAX_KEY_POS = 128 - 1, // Max size of each word's key set.
+ WORD_START = 1, // Signals the start of a word.
+ WORD_END = 0, // Signals the end of a word.
+ EOS = MAX_KEY_POS // Signals end of the key list.
+};
+
+// @@ The Options class should be changed to use the Singleton pattern.
+class Options
+{
+ // = TITLE
+ // This class provides a uniform interface to the various options
+ // available to a user of the gperf hash function generator.
+ //
+ // = DESCRIPTION
+ // In addition to the run-time options, found in the <Option_Type>
+ // 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.
+public:
+ Options (void);
+ ~Options (void);
+ int operator[] (Option_Type option);
+ int parse_args (int argc, char *argv[]);
+ void operator= (enum Option_Type);
+ bool operator!= (enum Option_Type);
+ static void print_options (void);
+ static void asso_max (int r);
+ static int asso_max (void);
+ static void reset (void);
+ static int get (void);
+ static int iterations (void);
+ static u_int max_keysig_size (void);
+ static void keysig_size (u_int);
+ static int jump (void);
+ static int initial_value (void);
+ static int total_switches (void);
+ static const char *function_name (void);
+ static const char *fill_default (void);
+ static const char *key_name (void);
+ static const char *class_name (void);
+ static const char *hash_name (void);
+ static const char *delimiter (void);
+
+private:
+ static int option_word_;
+ // Holds the user-specified Options.
+
+ static int total_switches_;
+ // Number of switch statements to generate.
+
+ static u_int total_keysig_size_;
+ // Total number of distinct key_positions.
+
+ static int size_;
+ // Range of the hash table.
+
+ static int key_pos_;
+ // Tracks current key position for Iterator.
+
+ static int jump_;
+ // Jump length when trying alternative values.
+
+ static int initial_asso_value_;
+ // Initial value for asso_values table.
+
+ static int iterations_;
+ // Amount to iterate when a collision occurs.
+
+ static int argc_;
+ // Records count of command-line arguments.
+
+ static char **argv_;
+ // Stores a pointer to command-line vector.
+
+ static const char *function_name_;
+ // Names used for generated lookup function.
+
+ static const char *fill_default_;
+ // Expression used to assign default values in keyword table.
+
+ static const char *key_name_;
+ // Name used for keyword key.
+
+ static const char *class_name_;
+ // Name used for generated C++ class.
+
+ static const char *hash_name_;
+ // Name used for generated hash function.
+
+ static const char *delimiters_;
+ // Separates keywords from other attributes.
+
+ static char key_positions_[MAX_KEY_POS];
+ // Contains user-specified key choices.
+
+ static int key_sort (char *base, int len);
+ // Sorts key positions in REVERSE order.
+
+ static void usage (void);
+ // Prints proper program usage.
+};
+
+// Global option coordinator for the entire program.
+extern Options option;
+
+#endif /* ACE_HAS_GPERF */
+#endif /* OPTIONS_H */