SIS
Symmetric Index Structures
|
00001 #ifndef CMDCOMPRESSEDAUTOMATONLANG_C 00002 #define CMDCOMPRESSEDAUTOMATONLANG_C 00003 00004 #include "../base.h" 00005 00006 void DumpSequenceOfLabels( FILE * fp, const VoidSequence * suffix, UINT encoding ){ 00007 if( suffix->seqStored > 0 ){ 00008 UINT i; 00009 00010 for( i = 0; i < suffix->seqStored-1; i++ ){ 00011 PrintSymbol( mVoidSequenceElement(suffix, i), fp, suffix->elementSize, encoding ); 00012 } 00013 PrintLine( fp, suffix->elementSize, encoding ); 00014 } 00015 } 00016 00017 void CmdCompressedAutomatonLang( const S8 * fileNameInput, const S8 * fileNameOutput, UINT encoding ){ 00018 FILE * fpInput; 00019 FILE * fpOutput; 00020 CompressedAutomaton * aut; 00021 00022 fpInput = Fopen( fileNameInput, "rb" ); 00023 aut = CompressedAutomatonRead( fpInput ); 00024 Fclose( fpInput ); 00025 00026 fpOutput = Fopen( fileNameOutput, "wb" ); 00027 CompressedAutomatonGenerateLanguage( aut, fpOutput, DumpSequenceOfLabels, encoding ); 00028 Fclose( fpOutput ); 00029 CompressedAutomatonFree( aut ); 00030 } 00031 00032 void CmdCompressedAutomatonStat( const S8 * fileNameInput, const S8 * fileNameOutput ){ 00033 FILE * fpInput; 00034 FILE * fpOutput; 00035 CompressedAutomaton * aut; 00036 00037 fpInput = Fopen( fileNameInput, "rb" ); 00038 aut = CompressedAutomatonRead( fpInput ); 00039 Fclose( fpInput ); 00040 00041 fpOutput = Fopen( fileNameOutput, "wt" ); 00042 CompressedAutomatonDumpStat( aut, fpOutput ); 00043 Fclose( fpOutput ); 00044 CompressedAutomatonFree( aut ); 00045 } 00046 00047 void CmdSCDAWGStat( const S8 * fileNameInput, const S8 * fileNameOutput ){ 00048 FILE * fpInput; 00049 FILE * fpOutput; 00050 SCDAWG * aut; 00051 00052 fpInput = Fopen( fileNameInput, "rb" ); 00053 aut = SCDAWGRead( fpInput ); 00054 Fclose( fpInput ); 00055 00056 fpOutput = Fopen( fileNameOutput, "wt" ); 00057 SCDAWGDumpStat( aut, fpOutput ); 00058 Fclose( fpOutput ); 00059 SCDAWGFree( aut ); 00060 } 00061 00062 void DumpLabel( const CompressedAutomaton * aut, FILE * fp, UINT tr, UINT encoding ){ 00063 UINT i, end; 00064 const void * symbol; 00065 mSymbolAndVariables( dollar ) 00066 00067 mSymbolAssignValue( dollar, '$', aut->data->elementSize ) 00068 end = aut->statesEnd->seq[aut->transitionsTo->seq[tr]]; 00069 for( i = aut->transitionsStart->seq[tr]; i <= end; i++ ){ 00070 symbol = mVoidSequenceElement(aut->data, i); 00071 if( SymbolToUINT( symbol, aut->data->elementSize ) == 0 ){ 00072 PrintSymbol( dollar, fp, aut->data->elementSize, encoding ); 00073 } 00074 else{ 00075 PrintSymbol( symbol, fp, aut->data->elementSize, encoding ); 00076 } 00077 } 00078 } 00079 00080 void CmdCompressedAutomatonDumpGV( const S8 * fileNameInput, const S8 * fileNameOutput, UINT encoding ){ 00081 FILE * fpInput; 00082 FILE * fpOutput; 00083 CompressedAutomaton * aut; 00084 00085 fpInput = Fopen( fileNameInput, "rb" ); 00086 aut = CompressedAutomatonRead( fpInput ); 00087 Fclose( fpInput ); 00088 00089 fpOutput = Fopen( fileNameOutput, "wt" ); 00090 CompressedAutomatonDumpGV( aut, fpOutput, DumpLabel, encoding ); 00091 Fclose( fpOutput ); 00092 CompressedAutomatonFree( aut ); 00093 } 00094 00096 //static 00097 void DumpSCDAWGLabel( const SCDAWG * aut, FILE * fp, UINT tr, boolean right, UINT encoding ){ 00098 UINT i, n, end; 00099 const void * symbol; 00100 mSymbolAndVariables( dollar ) 00101 mSymbolAndVariables( sharp ) 00102 00103 mSymbolAssignValue( dollar, '$', aut->right->data->elementSize ) 00104 mSymbolAssignValue( sharp, '#', aut->right->data->elementSize ) 00105 if( right ){ 00106 end = aut->right->statesEnd->seq[aut->right->transitionsTo->seq[tr]]; 00107 for( i = aut->right->transitionsStart->seq[tr]; i <= end; i++ ){ 00108 symbol = mVoidSequenceElement(aut->right->data, i); 00109 n = SymbolToUINT( symbol, aut->right->data->elementSize ); 00110 if( n == 0 ){ 00111 PrintSymbol( dollar, fp, aut->right->data->elementSize, encoding ); 00112 } 00113 else if( n == 1 ){ 00114 PrintSymbol( sharp, fp, aut->right->data->elementSize, encoding ); 00115 } 00116 else{ 00117 PrintSymbol( symbol, fp, aut->right->data->elementSize, encoding ); 00118 } 00119 } 00120 } 00121 else{ 00122 end = aut->left->statesEnd->seq[aut->left->transitionsTo->seq[tr]]; 00123 for( i = aut->left->transitionsStart->seq[tr] + 1; i > end; i-- ){ 00124 symbol = mVoidSequenceElement(aut->right->data, i-1); 00125 n = SymbolToUINT( symbol, aut->right->data->elementSize ); 00126 if( n == 0 ){ 00127 PrintSymbol( dollar, fp, aut->right->data->elementSize, encoding ); 00128 } 00129 else if( n == 1 ){ 00130 PrintSymbol( sharp, fp, aut->right->data->elementSize, encoding ); 00131 } 00132 else{ 00133 PrintSymbol( symbol, fp, aut->right->data->elementSize, encoding ); 00134 } 00135 } 00136 } 00137 } 00138 00139 void CmdSCDAWGDumpGV( const S8 * fileNameInput, const S8 * fileNameOutput, UINT encoding ){ 00140 FILE * fpInput; 00141 FILE * fpOutput; 00142 SCDAWG * aut; 00143 00144 fpInput = Fopen( fileNameInput, "rb" ); 00145 aut = SCDAWGRead( fpInput ); 00146 Fclose( fpInput ); 00147 00148 fpOutput = Fopen( fileNameOutput, "wt" ); 00149 SCDAWGDumpGV( aut, fpOutput, DumpSCDAWGLabel, encoding ); 00150 Fclose( fpOutput ); 00151 SCDAWGFree( aut ); 00152 } 00153 00154 void DumpSequenceOfLabels2( FILE * fp, const VoidSequence * suffix, UINT encoding ){ 00155 UINT i; 00156 00157 if( suffix->seqStored == 0 ){ 00158 return; 00159 } 00160 if( SymbolToUINT( mVoidSequenceElement(suffix, 0), suffix->elementSize ) == 0 ){ 00161 return; 00162 } 00163 for( i = 0; i < suffix->seqStored-1; i++ ){ 00164 PrintSymbol( mVoidSequenceElement(suffix, i), fp, suffix->elementSize, encoding ); 00165 } 00166 PrintLine( fp, suffix->elementSize, encoding ); 00167 } 00168 00169 void SCDAWGLeftLang( const S8 * fileNameInput, const S8 * fileNameOutput, UINT encoding ){ 00170 FILE * fpInput; 00171 FILE * fpOutput; 00172 SCDAWG * aut; 00173 00174 fpInput = Fopen( fileNameInput, "rb" ); 00175 aut = SCDAWGRead( fpInput ); 00176 Fclose( fpInput ); 00177 00178 fpOutput = Fopen( fileNameOutput, "wb" ); 00179 aut->left->data = aut->right->data; 00180 CompressedLeftAutomatonGenerateLanguage( aut->left, fpOutput, DumpSequenceOfLabels2, encoding ); 00181 aut->left->data = NULL; 00182 Fclose( fpOutput ); 00183 SCDAWGFree( aut ); 00184 } 00185 00186 #endif /* end of include guard: CMDCOMPRESSEDAUTOMATONLANG_C */