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