SIS
Symmetric Index Structures
|
00001 #include "base.h" 00002 00003 static void GetCmd( Command * cmd, const S8 * arg ); 00004 00005 Command * CommandInit(){ 00006 Command * cmd; 00007 00008 cmd = (Command *)Malloc( 1, sizeof(Command) ); 00009 cmd->cmd = NO; 00010 cmd->arguments = NULL; 00011 cmd->numberOfArguments = NO; 00012 return cmd; 00013 } 00014 00015 void CommandFree( Command * cmd ){ 00016 Free( cmd ); 00017 } 00018 00019 void CommandParse( Command * cmd, UINT argc, S8** argv ){ 00020 if( argc < 2 ){ 00021 Throw( "Bad input parameters: command is not specified." ); 00022 } 00023 GetCmd( cmd, argv[1] ); 00024 if( cmd->numberOfArguments == 0 ){ 00025 return; 00026 } 00027 if( argc - 2 < cmd->numberOfArguments ){ 00028 Throw( "Bad input parameters: the specified command requires more arguments." ); 00029 } 00030 cmd->arguments = argv + 2; 00031 } 00032 00033 static void GetCmd( Command * cmd, const S8 * arg ){ 00034 if( strcmp( arg, "reverse_and_sort" ) == 0 ){ 00035 cmd->cmd = CMD_REVERSE_AND_SORT; 00036 cmd->numberOfArguments = 4; 00037 } 00038 else if( strcmp( arg, "build_suffix_tree" ) == 0 ){ 00039 cmd->cmd = CMD_BUILD_SUFFIX_TREE; 00040 cmd->numberOfArguments = 5; 00041 } 00042 else if( strcmp( arg, "generate_suffixes" ) == 0 ){ 00043 cmd->cmd = CMD_GENERATE_SUFFIXES; 00044 cmd->numberOfArguments = 4; 00045 } 00046 else if( strcmp( arg, "compressed_automaton_lang" ) == 0 ){ 00047 cmd->cmd = CMD_COMPRESSED_AUTOMATON_LANG; 00048 cmd->numberOfArguments = 3; 00049 } 00050 else if( strcmp( arg, "build_cdawg" ) == 0 ){ 00051 cmd->cmd = CMD_BUILD_CDAWG; 00052 cmd->numberOfArguments = 5; 00053 } 00054 else if( strcmp( arg, "compressed_automaton_stat" ) == 0 ){ 00055 cmd->cmd = CMD_COMPRESSED_AUTOMATON_STAT; 00056 cmd->numberOfArguments = 2; 00057 } 00058 else if( strcmp( arg, "build_scdawg" ) == 0 ){ 00059 cmd->cmd = CMD_BUILD_SCDAWG; 00060 cmd->numberOfArguments = 5; 00061 } 00062 else if( strcmp( arg, "scdawg_left_lang" ) == 0 ){ 00063 cmd->cmd = CMD_SCDAWG_LEFT_LANG; 00064 cmd->numberOfArguments = 3; 00065 } 00066 else if( strcmp( arg, "compressed_automaton_gv" ) == 0 ){ 00067 cmd->cmd = CMD_COMPRESSED_AUTOMATON_GV; 00068 cmd->numberOfArguments = 3; 00069 } 00070 else if( strcmp( arg, "scdawg_stat" ) == 0 ){ 00071 cmd->cmd = CMD_SCDAWG_STAT; 00072 cmd->numberOfArguments = 2; 00073 } 00074 else if( strcmp( arg, "scdawg_gv" ) == 0 ){ 00075 cmd->cmd = CMD_SCDAWG_GV; 00076 cmd->numberOfArguments = 3; 00077 } 00078 else if( strcmp( arg, "scdawg_gv" ) == 0 ){ 00079 cmd->cmd = CMD_SCDAWG_GV; 00080 cmd->numberOfArguments = 3; 00081 } 00082 else if( strcmp( arg, "help" ) == 0 ){ 00083 cmd->cmd = CMD_HELP; 00084 cmd->numberOfArguments = 0; 00085 } 00086 else{ 00087 S8 msg[MAX_INPUT_STRING_SIZE]; 00088 sprintf( msg, "Unknown command: %s", arg ); 00089 Throw( msg ); 00090 } 00091 } 00092 00093 void CommandExecute( Command * cmd ){ 00094 switch( cmd->cmd ){ 00095 case CMD_REVERSE_AND_SORT: 00096 { 00097 UINT encoding; 00098 U32 bitsPerSymbol; 00099 00100 sscanf( cmd->arguments[2], "%u", &bitsPerSymbol ); 00101 encoding = ( strcmp( cmd->arguments[3], "UTF-8" ) == 0 ) ? ENCODING_UTF8 : ENCODING_PLAIN; 00102 CmdReverseAndSort( cmd->arguments[0], cmd->arguments[1], bitsPerSymbol, encoding ); 00103 } 00104 break; 00105 case CMD_BUILD_SUFFIX_TREE: 00106 { 00107 UINT encoding; 00108 U32 bitsPerSymbol; 00109 boolean tarjanTable; 00110 00111 sscanf( cmd->arguments[2], "%u", &bitsPerSymbol ); 00112 encoding = ( strcmp( cmd->arguments[3], "UTF-8" ) == 0 ) ? ENCODING_UTF8 : ENCODING_PLAIN; 00113 tarjanTable = ( strcmp( cmd->arguments[4], "y" ) == 0 ); 00114 CmdBuildSuffixTree( cmd->arguments[0], cmd->arguments[1], bitsPerSymbol, encoding, tarjanTable ); 00115 } 00116 break; 00117 case CMD_GENERATE_SUFFIXES: 00118 { 00119 UINT encoding; 00120 U32 bitsPerSymbol; 00121 00122 sscanf( cmd->arguments[2], "%u", &bitsPerSymbol ); 00123 encoding = ( strcmp( cmd->arguments[3], "UTF-8" ) == 0 ) ? ENCODING_UTF8 : ENCODING_PLAIN; 00124 CmdGenerateSuffixes( cmd->arguments[0], cmd->arguments[1], bitsPerSymbol, encoding ); 00125 } 00126 break; 00127 case CMD_COMPRESSED_AUTOMATON_LANG: 00128 { 00129 UINT encoding; 00130 00131 encoding = ( strcmp( cmd->arguments[2], "UTF-8" ) == 0 ) ? ENCODING_UTF8 : ENCODING_PLAIN; 00132 CmdCompressedAutomatonLang( cmd->arguments[0], cmd->arguments[1], encoding ); 00133 } 00134 break; 00135 case CMD_BUILD_CDAWG: 00136 { 00137 UINT encoding; 00138 U32 bitsPerSymbol; 00139 boolean tarjanTable; 00140 00141 sscanf( cmd->arguments[2], "%u", &bitsPerSymbol ); 00142 encoding = ( strcmp( cmd->arguments[3], "UTF-8" ) == 0 ) ? ENCODING_UTF8 : ENCODING_PLAIN; 00143 tarjanTable = ( strcmp( cmd->arguments[4], "y" ) == 0 ); 00144 CmdBuildCDAWG( cmd->arguments[0], cmd->arguments[1], bitsPerSymbol, encoding, tarjanTable ); 00145 } 00146 break; 00147 case CMD_COMPRESSED_AUTOMATON_STAT: 00148 CmdCompressedAutomatonStat( cmd->arguments[0], cmd->arguments[1] ); 00149 break; 00150 case CMD_BUILD_SCDAWG: 00151 { 00152 UINT encoding; 00153 U32 bitsPerSymbol; 00154 boolean tarjanTable; 00155 00156 sscanf( cmd->arguments[2], "%u", &bitsPerSymbol ); 00157 encoding = ( strcmp( cmd->arguments[3], "UTF-8" ) == 0 ) ? ENCODING_UTF8 : ENCODING_PLAIN; 00158 tarjanTable = ( strcmp( cmd->arguments[4], "y" ) == 0 ); 00159 CmdBuildSCDAWG( cmd->arguments[0], cmd->arguments[1], bitsPerSymbol, encoding, tarjanTable ); 00160 } 00161 break; 00162 case CMD_SCDAWG_LEFT_LANG: 00163 { 00164 UINT encoding; 00165 00166 encoding = ( strcmp( cmd->arguments[2], "UTF-8" ) == 0 ) ? ENCODING_UTF8 : ENCODING_PLAIN; 00167 SCDAWGLeftLang( cmd->arguments[0], cmd->arguments[1], encoding ); 00168 } 00169 break; 00170 case CMD_COMPRESSED_AUTOMATON_GV: 00171 { 00172 UINT encoding; 00173 00174 encoding = ( strcmp( cmd->arguments[2], "UTF-8" ) == 0 ) ? ENCODING_UTF8 : ENCODING_PLAIN; 00175 CmdCompressedAutomatonDumpGV( cmd->arguments[0], cmd->arguments[1], encoding ); 00176 } 00177 break; 00178 case CMD_SCDAWG_STAT: 00179 CmdSCDAWGStat( cmd->arguments[0], cmd->arguments[1] ); 00180 break; 00181 case CMD_SCDAWG_GV: 00182 { 00183 UINT encoding; 00184 00185 encoding = ( strcmp( cmd->arguments[2], "UTF-8" ) == 0 ) ? ENCODING_UTF8 : ENCODING_PLAIN; 00186 CmdSCDAWGDumpGV( cmd->arguments[0], cmd->arguments[1], encoding ); 00187 } 00188 break; 00189 } 00190 }