📄 key_list.h
字号:
// -*- C++ -*-
// Key_List.h,v 4.16 1999/06/17 23:07:48 schmidt Exp
// 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 KEY_LIST_H
#define KEY_LIST_H
#include "Options.h"
#include "List_Node.h"
#include "Vectors.h"
#if defined (ACE_HAS_GPERF)
class Duplicate_Entry
{
// = TITLE
// Describes a duplicate entry.
//
// = DESCRIPTION
// This is used for generating code by the <Key_List>.
public:
int hash_value;
// Hash value for this particular duplicate set.
int slot;
// Slot into the main keyword storage array.
int count;
// Number of consecutive duplicates at this slot.
};
class Key_List
{
// = TITLE
// Data and function member declarations for the keyword list class.
//
// = DESCRIPTION
// The key word list is a useful abstraction that keeps track of
// various pieces of information that enable that fast generation of
// the Gen_Perf.hash function. A Key_List is a singly-linked list
// of List_Nodes.
public:
Key_List (void);
~Key_List (void);
int keyword_list_length (void);
int max_key_length (void);
void reorder (void);
void sort (void);
void string_sort (void);
int read_keys (void);
int output (void);
List_Node *head;
// Points to the head of the linked list.
int total_duplicates;
// Total number of duplicate hash values.
private:
// = Make hash table 10 times larger than # of keyword entries.
enum
{
TABLE_MULTIPLE = 10
};
static int occurrence (List_Node *ptr);
static int already_determined (List_Node *ptr);
static void determined (List_Node *ptr);
// @@ All of the following methods should be factored out and
// replaced by the use of the Strategy/Bridge pattern so that we can
// easily add new languages.
void output_min_max (void);
void output_switch (int use_keyword_table = 0);
void output_keyword_table (void);
void output_keylength_table (void);
void output_hash_function (void);
void output_lookup_function (void);
int output_binary_search_function(void);
int output_linear_search_function (void);
int output_lookup_array (void);
void output_strcasecmp (void);
int output_types (void);
void dump (void);
char *array_type (void);
char *save_include_src (void);
char *special_input (char delimiter);
List_Node *merge (List_Node *list1, List_Node *list2);
List_Node *merge_sort (List_Node *head);
int count_duplicates (List_Node *link, const char *type);
void update_lookup_array (int lookup_array[],
int i1,
int i2,
Duplicate_Entry *dup_ptr,
int value);
char *array_type_;
// Pointer to the type for word list.
char *return_type;
// Pointer to return type for lookup function.
char *struct_tag;
// Shorthand for user-defined struct tag type.
char *include_src;
// C source code to be included verbatim.
int max_key_len;
// Maximum length of the longest keyword.
int min_key_len;
// Minimum length of the shortest keyword.
int min_hash_value;
// Minimum hash value for all keywords.
int max_hash_value;
// Maximum hash value for all keywords.
int occurrence_sort;
// True if sorting by occurrence.
int hash_sort;
// True if sorting by hash value.
int key_sort;
// True if sorting by key value.
int additional_code;
// True if any additional C code is included.
int list_len;
// Length of head's Key_List, not counting duplicates.
int total_keys;
// Total number of keys, counting duplicates.
static const char *const default_array_type;
// Default type for generated code.
static const char *const default_return_type;
// in_word_set return type, by default.
static int field_width;
// How wide the printed field width must be to contain the maximum
// hash value.
static int determined_[ACE_STANDARD_CHARACTER_SET_SIZE];
// Sets the slot location for all keysig characters that are now
// determined.
};
#endif /* ACE_HAS_GPERF */
#endif /* KEY_LIST_H */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -