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