SIS
Symmetric Index Structures
|
00001 #include "base.h" 00002 00003 UINT endiannessOfThisMachine = NO; 00004 UINT endiannessOnWrite = NO; 00005 //UINT endiannessOnWrite = ENDIANNESS_BIG; 00006 00007 UINT SymbolToUINT( const void * symbol, UINT symbolSize ){ 00008 switch( symbolSize ){ 00009 case 1: 00010 return *((U8 *)(symbol)); 00011 break; 00012 case 2: 00013 return *((U16 *)(symbol)); 00014 break; 00015 case 4: 00016 return *((U32 *)(symbol)); 00017 break; 00018 case 8: 00019 return (UINT)(*((U64 *)(symbol))); 00020 break; 00021 } 00022 return NO; 00023 } 00024 00025 void UINTToSymbol( UINT number, void * symbol, UINT symbolSize ){ 00026 switch( symbolSize ){ 00027 case 1: 00028 { 00029 U8 u8; 00030 00031 u8 = (U8)(number); 00032 memcpy( symbol, &u8, symbolSize ); 00033 } 00034 break; 00035 case 2: 00036 { 00037 U16 u16; 00038 00039 u16 = (U16)(number); 00040 memcpy( symbol, &u16, symbolSize ); 00041 } 00042 break; 00043 case 4: 00044 { 00045 U32 u32; 00046 00047 u32 = (U32)(number); 00048 memcpy( symbol, &u32, symbolSize ); 00049 } 00050 break; 00051 case 8: 00052 { 00053 U64 u64; 00054 00055 u64 = (U64)(number); 00056 memcpy( symbol, &u64, symbolSize ); 00057 } 00058 break; 00059 } 00060 } 00061 00062 SINT CmpSymbols( const void * symbol1, const void * symbol2, UINT symbolSize ){ 00063 UINT s1, s2; 00064 00065 s1 = SymbolToUINT( symbol1, symbolSize ); 00066 s2 = SymbolToUINT( symbol2, symbolSize ); 00067 if( s1 < s2 ){ 00068 return -1; 00069 } 00070 if( s1 == s2 ){ 00071 return 0; 00072 } 00073 return 1; 00074 } 00075 00076 void SwapSymbols( void * symbol1, void * symbol2, UINT symbolSize ){ 00077 UINT i; 00078 U8 u8; 00079 U8 * seq1; 00080 U8 * seq2; 00081 00082 seq1 = (U8 *)(symbol1); 00083 seq2 = (U8 *)(symbol2); 00084 for( i = 0; i < symbolSize; i++ ){ 00085 mSwapVariables( seq1[i], seq2[i], u8 ); 00086 } 00087 }