#ifndef COMMANDS_H #define COMMANDS_H 1 #pragma interface #include "value.h" #include <String.h> #include <iostream.h> #include <fstream.h> /************************************************************************ ************ CommandList: a complex parse table ************************ ************************************************************************/ extern class Value; class CommandNode{ friend class CommandList; public: CommandNode(Val_List* key, String* indata, CommandNode* nextnode = NULL); ~CommandNode(); protected: Val_List* key_list; String* data; CommandNode* next; }; class CommandList { public: CommandList(); ~CommandList(); String* add (Val_List* key, String* indata); int remove (String* pattern); void purge (); String* lookup (String* pattern); Val_List* lookup_all (String* pattern); Value* list_cmds(); char* pack_cmds(char* buf); char* unpack (char* buf); void dump_to_stdout(); friend Value* list_lookup (Val_List* parse_list, String* pattern, String** error_string = NULL); protected: CommandNode* clist; }; int is_command_constant(String*); String* match_command_constant(String* key, String& pattern); void initialize_command_constants(); // call this once at startup time. Regex* get_command_constant(String* key); void sub_special (String& instr); /************************************************************************ ************ StringReHash: a String-->Regexp hash table *************** ************************************************************************/ #define SSH_WIDTH 32 class StringPtrList { friend class StringPtrHash; protected: String* key; void* data; StringPtrList* next; public: StringPtrList (String* inkey, void* indata, StringPtrList* next_node = NULL); ~StringPtrList (); }; class StringPtrHash { protected: StringPtrList* slists[SSH_WIDTH]; public: StringPtrHash(); ~StringPtrHash(); void add (String*, void*); void* lookup (String*); }; class StringReHash : public StringPtrHash { public: void add (String*, Regex*); Regex* lookup (String*); }; #endif /* COMMANDS_H */