SIS
Symmetric Index Structures
|
00001 #ifndef _HEADER_FILE_TYPICAL_ 00002 #define _HEADER_FILE_TYPICAL_ 00003 00004 typedef int boolean; 00005 #define bFALSE ( ( boolean )( 0 == 1 ) ) 00006 #define bTRUE ( ( boolean )( 1 == 1 ) ) 00007 00008 typedef unsigned char U8; 00009 typedef unsigned short int U16; 00010 typedef unsigned int U32; 00011 typedef unsigned long long U64; 00012 00013 typedef char S8; 00014 typedef short int S16; 00015 typedef int S32; 00016 typedef long long S64; 00017 00018 typedef U32 UINT; 00019 typedef S32 SINT; 00020 00021 typedef float FLOAT; 00022 00023 #define NO ((UINT)(-1)) 00024 00025 #define mSwapVariables( var1, var2, temp )\ 00026 {\ 00027 temp = var1;\ 00028 var1 = var2;\ 00029 var2 = temp;\ 00030 } 00031 00032 #define mABS( x ) ( ((x) < 0) ? -(x) : (x) ) 00033 00034 #define mMAX( a, b ) ( ((a) < (b)) ? (b) : (a) ) 00035 00036 #define mMIN( a, b ) ( ((a) > (b)) ? (b) : (a) ) 00037 00038 #define MAX_INPUT_STRING_SIZE (1024) 00039 #define mGETS( str )\ 00040 {\ 00041 fgets( (str), MAX_INPUT_STRING_SIZE, stdin );\ 00042 (str)[strlen((str)) - 1] = 0;\ 00043 } 00044 00045 #define log2( x ) ( (1.4426950408889634073599246810019)*log( x ) ) 00046 #define exp2( x ) ( exp( (0.69314718055994530941723212145818)*(x) ) ) 00047 #define LOG_OF_ZERO (-1.0E300) 00048 #define PI ((double)(3.1415926535897932384626433832795)) 00049 00050 typedef struct tAutomaton Automaton; 00051 00052 UINT SymbolToUINT( const void * symbol, UINT symbolSize ); 00053 void UINTToSymbol( UINT number, void * symbol, UINT symbolSize ); 00054 SINT CmpSymbols( const void * symbol1, const void * symbol2, UINT symbolSize ); 00055 void SwapSymbols( void * symbol1, void * symbol2, UINT symbolSize ); 00056 00057 #define mSymbolAndVariables( name ) \ 00058 void * name = NULL; \ 00059 U8 u8##name; \ 00060 U16 u16##name; \ 00061 U32 u32##name; \ 00062 U64 u64##name; 00063 00064 #define mSymbolAssignValue( name, value, symbolSize )\ 00065 {\ 00066 switch( symbolSize ){\ 00067 case 1:\ 00068 u8##name = (value);\ 00069 name = &u8##name;\ 00070 break;\ 00071 case 2:\ 00072 u16##name = (value);\ 00073 name = &u16##name;\ 00074 break;\ 00075 case 4:\ 00076 u32##name = (value);\ 00077 name = &u32##name;\ 00078 break;\ 00079 case 8:\ 00080 u64##name = (value);\ 00081 name = &u64##name;\ 00082 break;\ 00083 }\ 00084 } 00085 00086 #define mValidateBitsPerSymbol( bitsPerSymbol )\ 00087 {\ 00088 if( (bitsPerSymbol) != 8 && (bitsPerSymbol) != 16 && (bitsPerSymbol) != 32 && (bitsPerSymbol) != 64 ){\ 00089 Throw( "Unsupported number of bits per symbol." );\ 00090 }\ 00091 } 00092 00093 extern UINT endiannessOfThisMachine; 00094 extern UINT endiannessOnWrite; 00095 #define ENDIANNESS_BIG (0) 00096 #define ENDIANNESS_LITTLE (1) 00097 #define ENDIANNESS_DETERMINER (0xFFFE) 00098 #define ENDIANNESS_MORE_SIGNIFICANT (0xFF) 00099 #define ENDIANNESS_LESS_SIGNIFICANT (0xFE) 00100 00101 #define mSetEndianness(){\ 00102 if( endiannessOfThisMachine == NO ){\ 00103 U16 u16 = ENDIANNESS_DETERMINER;\ 00104 U8 * ptr;\ 00105 ptr = (U8 *)(&u16);\ 00106 if( (*ptr) == ENDIANNESS_MORE_SIGNIFICANT ){\ 00107 endiannessOfThisMachine = ENDIANNESS_BIG;\ 00108 }\ 00109 else if( (*ptr) == ENDIANNESS_LESS_SIGNIFICANT ){\ 00110 endiannessOfThisMachine = ENDIANNESS_LITTLE;\ 00111 }\ 00112 else{\ 00113 Throw( "Error occured while trying to detect the endianness of this machine." );\ 00114 }\ 00115 if( endiannessOnWrite == NO ){\ 00116 endiannessOnWrite = endiannessOfThisMachine;\ 00117 }\ 00118 }\ 00119 } 00120 00121 #define mWriteEndianness( fp, endianness ){\ 00122 U8 u8;\ 00123 if( (endianness) == ENDIANNESS_BIG ){\ 00124 u8 = ENDIANNESS_MORE_SIGNIFICANT;\ 00125 Fwrite( &u8, sizeof(U8), 1, (fp) );\ 00126 }\ 00127 else{\ 00128 u8 = ENDIANNESS_LESS_SIGNIFICANT;\ 00129 Fwrite( &u8, sizeof(U8), 1, (fp) );\ 00130 }\ 00131 } 00132 00133 #define mReadEndianness( fp, endianness ){\ 00134 U8 u8;\ 00135 Fread( &u8, sizeof(U8), 1, (fp) );\ 00136 if( u8 == ENDIANNESS_MORE_SIGNIFICANT ){\ 00137 (endianness) = ENDIANNESS_BIG;\ 00138 }\ 00139 else{\ 00140 (endianness) = ENDIANNESS_LITTLE;\ 00141 }\ 00142 } 00143 00144 #define mReverseBytes( element, numberOfBytes ){\ 00145 UINT i, m;\ 00146 U8 tmp;\ 00147 m = (numberOfBytes)/2;\ 00148 for( i = 0; i < m; i++ ){\ 00149 mSwapVariables( (element)[i], (element)[(numberOfBytes)-1-i], tmp );\ 00150 }\ 00151 } 00152 #endif