📄 options.cpp
字号:
// -*- C++ -*-// Options.cpp,v 4.43 2004/04/24 04:21:49 ossama Exp// Handles parsing the Options provided to the user.// 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.#include "Options.h"ACE_RCSID(src, Options, "Options.cpp,v 4.43 2004/04/24 04:21:49 ossama Exp")#if defined (ACE_HAS_GPERF)#include "ace/Get_Opt.h"#include "Iterator.h"#include "ace/OS_NS_stdio.h"#include "ace/OS_NS_string.h"#include "ace/OS_NS_stdlib.h"// Global option coordinator for the entire program.Options option;// Current program version.extern const char *version_string;// Size to jump on a collision.static const int DEFAULT_JUMP_VALUE = 5;// Default name for generated lookup function.static const char *const DEFAULT_NAME = "in_word_set";// Default filler for keyword table.static const char *const DEFAULT_FILL = "";// Default name for the key component.static const char *const DEFAULT_KEY = "name";// Default name for the generated class.static const char *const DEFAULT_CLASS_NAME = "Perfect_Hash";// Default name for generated hash function.static const char *const DEFAULT_HASH_NAME = "hash";// Default delimiters that separate keywords from their attributes.static const char *const DEFAULT_DELIMITERS = ",\n";int Options::option_word_;int Options::total_switches_;u_int Options::total_keysig_size_;int Options::size_;int Options::key_pos_;int Options::jump_;int Options::initial_asso_value_;int Options::argc_;char **Options::argv_;int Options::iterations_;const char *Options::function_name_;const char *Options::fill_default_;const char *Options::key_name_;const char *Options::class_name_;const char *Options::hash_name_;const char *Options::delimiters_;char Options::key_positions_[MAX_KEY_POS];// Prints program usage to standard error stream.voidOptions::usage (void){ ACE_ERROR ((LM_ERROR, "Usage: %n [-abBcCdDef[num]gGhH<hashname>i<init>IjJ" "k<keys>K<keyname>lL<language>mMnN<function name>o" "Oprs<size>S<switches>tTvVZ<class name>].\n" "(type %n -h for help)\n"));}// Output command-line Options.voidOptions::print_options (void){ int i; ACE_OS::printf ("/* Command-line: "); for (i = 0; i < argc_; i++) ACE_OS::printf ("%s ", argv_[i]); ACE_OS::printf (" */");}// Sorts the key positions *IN REVERSE ORDER!!* This makes further// routines more efficient. Especially when generating code. Uses a// simple Insertion Sort since the set is probably ordered. Returns 1// if there are no duplicates, 0 otherwise.intOptions::key_sort (char *base, int len){ int i, j; for (i = 0, j = len - 1; i < j; i++) { int curr, tmp; for (curr = i + 1, tmp = base[curr]; curr > 0 && tmp >= base[curr - 1]; curr--) if ((base[curr] = base[curr - 1]) == tmp) // Oh no, a duplicate!!! return 0; base[curr] = tmp; } return 1;}// Sets the default Options.Options::Options (void){ key_positions_[0] = WORD_START; key_positions_[1] = WORD_END; key_positions_[2] = EOS; total_keysig_size_ = 2; delimiters_ = DEFAULT_DELIMITERS; jump_ = DEFAULT_JUMP_VALUE; option_word_ = DEFAULTCHARS | C; function_name_ = DEFAULT_NAME; fill_default_ = DEFAULT_FILL; key_name_ = DEFAULT_KEY; hash_name_ = DEFAULT_HASH_NAME; class_name_ = DEFAULT_CLASS_NAME; total_switches_ = size_ = 1; initial_asso_value_ = iterations_ = 0;}// Dumps option status when debug is set.Options::~Options (void){ if (ACE_BIT_ENABLED (option_word_, DEBUGGING)) { char *ptr; ACE_OS::fprintf (stderr, "\ndumping Options:" "\nDEBUGGING is...: %s" "\nORDER is.......: %s" "\nANSI is........: %s" "\nTYPE is........: %s" "\nINLINE is......: %s" "\nRANDOM is......: %s" "\nDEFAULTCHARS is: %s" "\nSWITCH is......: %s" "\nPOINTER is.....: %s" "\nNOLENGTH is....: %s" "\nLENTABLE is....: %s" "\nDUP is.........: %s" "\nFAST is........: %s" "\nCOMP is........: %s" "\nNOTYPE is......: %s" "\nGLOBAL is......: %s" "\nCONSTANT is....: %s" "\nCPLUSPLUS is...: %s" "\nC is...........: %s" "\nENUM is........: %s" "\nSTRCASECMP is..: %s" "\nOPTIMIZE is....: %s" "\nLINEARSEARCH is: %s" "\nBINARYSEARCH is: %s" "\niterations = %d" "\nlookup function name = %s" "\nfill default = %s" "\nhash function name = %s" "\nkey name = %s" "\njump value = %d" "\nmax associcated value = %d" "\ninitial associated value = %d" "\ndelimiters = %s" "\nnumber of switch statements = %d" "\n", ACE_BIT_ENABLED (option_word_, DEBUGGING) ? "enabled" : "disabled", ACE_BIT_ENABLED (option_word_, ORDER) ? "enabled" : "disabled", ACE_BIT_ENABLED (option_word_, ANSI) ? "enabled" : "disabled", ACE_BIT_ENABLED (option_word_, TYPE) ? "enabled" : "disabled", ACE_BIT_ENABLED (option_word_, INLINE) ? "enabled" : "disabled", ACE_BIT_ENABLED (option_word_, RANDOM) ? "enabled" : "disabled", ACE_BIT_ENABLED (option_word_, DEFAULTCHARS) ? "enabled" : "disabled", ACE_BIT_ENABLED (option_word_, SWITCH) ? "enabled" : "disabled", ACE_BIT_ENABLED (option_word_, POINTER) ? "enabled" : "disabled", ACE_BIT_ENABLED (option_word_, NOLENGTH) ? "enabled" : "disabled", ACE_BIT_ENABLED (option_word_, LENTABLE) ? "enabled" : "disabled", ACE_BIT_ENABLED (option_word_, DUP) ? "enabled" : "disabled", ACE_BIT_ENABLED (option_word_, FAST) ? "enabled" : "disabled", ACE_BIT_ENABLED (option_word_, COMP) ? "enabled" : "disabled", ACE_BIT_ENABLED (option_word_, NOTYPE) ? "enabled" : "disabled", ACE_BIT_ENABLED (option_word_, GLOBAL) ? "enabled" : "disabled", ACE_BIT_ENABLED (option_word_, CONSTANT) ? "enabled" : "disabled", ACE_BIT_ENABLED (option_word_, CPLUSPLUS) ? "enabled" : "disabled", ACE_BIT_ENABLED (option_word_, C) ? "enabled" : "disabled", ACE_BIT_ENABLED (option_word_, ENUM) ? "enabled" : "disabled", ACE_BIT_ENABLED (option_word_, STRCASECMP) ? "enabled" : "disabled", ACE_BIT_ENABLED (option_word_, OPTIMIZE) ? "enabled" : "disabled", ACE_BIT_ENABLED (option_word_, LINEARSEARCH) ? "enabled" : "disabled", ACE_BIT_ENABLED (option_word_, BINARYSEARCH) ? "enabled" : "disabled", iterations_, function_name_, fill_default_, hash_name_, key_name_, jump_, size_ - 1, initial_asso_value_, delimiters_, total_switches_); if (ACE_BIT_ENABLED (option_word_, ALLCHARS)) ACE_OS::fprintf (stderr, "all characters are used in the hash function\n"); ACE_OS::fprintf (stderr, "maximum keysig size = %d\nkey positions are: \n", total_keysig_size_); for (ptr = key_positions_; *ptr != EOS; ptr++) if (*ptr == WORD_END) ACE_OS::fprintf (stderr, "$\n"); else ACE_OS::fprintf (stderr, "%d\n", *ptr); ACE_OS::fprintf (stderr, "finished dumping Options\n"); }}// Parses the command line Options and sets appropriate flags in// option_word_.intOptions::parse_args (int argc, char *argv[]){ if (ACE_LOG_MSG->open (argv[0]) == -1) return -1; ACE_Get_Opt getopt (argc, argv, "abBcCdDe:Ef:F:gGhH:i:IJj:k:K:lL:mMnN:oOprs:S:tTvVZ:"); int option_char; argc_ = argc; argv_ = argv; while ((option_char = getopt ()) != -1) { switch (option_char) { // Generated coded uses the ANSI prototype format. case 'a': { ACE_SET_BITS (option_word_, ANSI); break; } // Generate code for Linear Search. case 'b': { ACE_SET_BITS (option_word_, LINEARSEARCH); break; } // Generate code for Binary Search. case 'B': { ACE_SET_BITS (option_word_, BINARYSEARCH); break; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -