SIS
Symmetric Index Structures
/Users/dbr/ma/src/bas/lml/cmd/cmdCompressedAutomatonLang.c
Go to the documentation of this file.
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 */