Main Page | Class Hierarchy | Alphabetical List | Data Structures | File List | Data Fields | Globals

utility.cpp

Go to the documentation of this file.
00001 // utility.cpp
00002 //////////////////////////////////////////////////////////////////////
00003 //          (c) Copyright 2001-2002 Brown Deer Technology, LLC.
00004 //                        All rights reserved.
00005 //////////////////////////////////////////////////////////////////////
00006 
00007 #ifdef USE_STD
00008 #include <iostream>
00009 #include <string>
00010 #include <algorithm>
00011 using namespace std;
00012 #else
00013 #include <iostream.h>
00014 #include <string.h>
00015 #include <algorithm.h>
00016 #endif
00017 
00018 #include "utility.h"
00019 
00020 void inttohex( int num, char* ptc, int len ) {
00021    const char* hexdigit="0123456789ABCDEF";
00022    char* pttmp=(char*)(&num);
00023    unsigned char c;
00024    int j=0;
00025 
00026    for(int i = 0; i < min( len, int(sizeof(int) ) ); i++ ) {
00027 #ifdef STORM_RS6000_AIX
00028       c=pttmp[ sizeof(int) - len + i ];
00029 #endif
00030 #ifdef STORM_x86_LINUX
00031       c=pttmp[ len - 1 - i ];
00032 #endif
00033 #ifdef STORM_SGI_IRIX
00034       c=pttmp[ sizeof(int) - len + i ];
00035 #endif
00036       ptc[j++] = hexdigit[ int( ( c & 0xF0 ) >> 4 ) ];
00037       ptc[j++] = hexdigit[ int( ( c & 0x0F ) ) ];
00038    }
00039 
00040    ptc[j]='\0';
00041 
00042 }
00043 
00044 
00045 bytepack::bytepack( const int sizemax ) 
00046   : _sizemax(sizemax), _size(0) 
00047 {
00048    _data = new char[ _sizemax + 1 ]; 
00049    _data[0] = 0;
00050 }
00051 
00052 bytepack::bytepack( const bytepack& rhs ) 
00053   : _sizemax(rhs._sizemax), _size(rhs._size) 
00054 {
00055    _data = new char[ _sizemax + 1 ]; 
00056    for( int i = 0; i < rhs._sizemax; ++i ) _data[i] = rhs._data[i];
00057 }
00058 
00059 bytepack::~bytepack() { delete [] _data; _data = 0; }
00060 
00061 bytepack& bytepack::operator()( const char data, const int size ) 
00062 {
00063    for( int i = 0; i <= size; i++ ) _data[i] = 0;
00064    _data[0] = data;
00065    _size = 1;
00066    return *this;
00067 }
00068 
00069 bytepack& bytepack::operator()( const int data0, const int size ) {
00070    int data = data0;
00071    char* ptdata = (char*)(&data);
00072    for(int i=0;i<=size;i++) _data[i] = 0;
00073 #ifdef STORM_RS6000_AIX
00074    for(int i = 0; i < min( size, int(sizeof(int)) ); i++ ) {
00075       _data[i] = ptdata[ sizeof(int) - 1 - i ]; 
00076    }
00077    _size = size;
00078 #endif
00079 #ifdef STORM_x86_LINUX
00080    for( int i = 0; i < min( size, int(sizeof(int)) ); i++ ) {
00081       _data[i] = ptdata[i]; 
00082    }
00083    _size = size;
00084 #endif
00085 #ifdef STORM_SGI_IRIX
00086    for( int i = 0; i < min( size, int(sizeof(int)) ); i++ ) {
00087       _data[i] = ptdata[ sizeof(int) - 1 - i ]; 
00088    }
00089    _size = size;
00090 #endif
00091    return *this;
00092 }
00093 
00094 bytepack& bytepack::operator()( const float data0, const int size ) {
00095    float data = data0;
00096    char* ptdata = (char*)(&data);
00097    for( int i = 0; i <= size; i++ ) _data[i] = 0;
00098 #ifdef STORM_RS6000_AIX
00099    for( int i = 0; i < min( size, int(sizeof(float)) ); i++ ) {
00100       _data[i] = ptdata[i]; 
00101    }
00102    _size = size;
00103 #endif
00104 #ifdef STORM_x86_LINUX
00105    for( int i = 0 ; i < min( size, int(sizeof(float)) ); i++ ) {
00106       _data[i] = ptdata[ sizeof(float) - 1 - i ]; 
00107    }
00108    _size = size;
00109 #endif
00110 #ifdef STORM_SGI_IRIX
00111    for( i = 0; i < min( size, int(sizeof(float)) ); i++ ) {
00112       _data[i] = ptdata[i]; 
00113    }
00114    _size = size;
00115 #endif
00116    return *this;
00117 }
00118 
00119 bytepack& bytepack::operator()( const double data0, const int size ) {
00120    double data = data0;
00121    char* ptdata = (char*)(&data);
00122    for( int i = 0; i <= size; i++ ) _data[i] = 0;
00123 #ifdef STORM_RS6000_AIX
00124    for( int i = 0; i < min( size, int(sizeof(double)) ); i++ ) {
00125       _data[i] = ptdata[i]; 
00126    }
00127    _size = size;
00128 #endif
00129 #ifdef STORM_x86_LINUX
00130    for( int i = 0; i < min( size, int(sizeof(double)) ); i++ ) {
00131       _data[i] = ptdata[ sizeof(double) - 1 - i ]; 
00132    }
00133    _size = size;
00134 #endif
00135 #ifdef STORM_SGI_IRIX
00136    for( int i = 0; i < min( size, int(sizeof(double)) ); i++ ) {
00137       _data[i] = ptdata[i]; 
00138    }
00139    _size = size;
00140 #endif
00141    return *this;
00142 }
00143 
00144 bytepack& bytepack::operator = ( const bytepack bp ) 
00145 {
00146    _sizemax = bp._sizemax;
00147    if ( _data != 0 ) delete [] _data;
00148    _data = new char[ _sizemax + 1 ]; 
00149    _size = bp._size;
00150    for( int i = 0; i < ( _sizemax + 1); ++i ) _data[i] = bp._data[i];
00151    return *this;
00152 }
00153 
00154 bytepack::operator char() { return char(_data[0]); }
00155 
00156 bytepack::operator int() {
00157    int data;
00158    char* ptdata = (char*)(&data);
00159    if ((_data[_size-1]&0x80)) {
00160       for( int i = 0; i < (int)sizeof(int); i++ ) ptdata[i] = 0xFF; 
00161    }
00162    else {
00163       for( int i = 0; i < (int)sizeof(int); i++ ) ptdata[i] = 0x00; 
00164    }
00165 #ifdef STORM_RS6000_AIX
00166    for( int i = 0; i < min( _size, int(sizeof(int)) ); i++ ) { 
00167       ptdata[ sizeof(int) - 1 - i ] = _data[i]; 
00168    }
00169 #endif
00170 #ifdef STORM_x86_LINUX
00171    for( int i = 0; i < min( _size, int(sizeof(int)) ); i++ ) { 
00172       ptdata[i] = _data[i]; 
00173    }
00174 #endif
00175 #ifdef STORM_SGI_IRIX
00176    for( int i = 0; i < min( _size, int(sizeof(int)) ); i++ ) { 
00177       ptdata[ sizeof(int) - 1 - i ] = _data[i]; 
00178    }
00179 #endif
00180    return data;
00181 }
00182 
00183 bytepack::operator float() {
00184    float data = 0;
00185    char* ptdata = (char*)(&data);
00186 #ifdef STORM_RS6000_AIX
00187    for( int i = 0; i < min( _size, int(sizeof(float)) ); i++ ) { 
00188       ptdata[i] = _data[i]; 
00189    }
00190 #endif
00191 #ifdef STORM_x86_LINUX
00192    for( int i = 0; i < min( _size, int(sizeof(float)) ); i++ ) { 
00193       ptdata[ sizeof(float) - 1 - i ] = _data[i];
00194    }
00195 #endif
00196 #ifdef STORM_SGI_IRIX
00197    for( int i = 0; i < min( _size, int(sizeof(float)) ); i++ ) { 
00198       ptdata[i] = _data[i]; 
00199    }
00200 #endif
00201    return data;
00202 }
00203 
00204 bytepack::operator double() {
00205    double data=0;
00206    char* ptdata = (char*)(&data);
00207 #ifdef STORM_RS6000_AIX
00208    for( int i = 0; i < min( _size, int(sizeof(double)) ); i++ ) { 
00209       ptdata[i] = _data[i]; 
00210    }
00211 #endif
00212 #ifdef STORM_x86_LINUX
00213    for( int i = 0; i < min( _size, int(sizeof(double)) ); i++ ) { 
00214       ptdata[ sizeof(double) - 1 - i ] = _data[i];
00215    }
00216 #endif
00217 #ifdef STORM_SGI_IRIX
00218    for( int i = 0; i < min( _size, int(sizeof(double)) ); i++ ) { 
00219       ptdata[i] = _data[i]; 
00220    }
00221 #endif
00222    return data;
00223 }
00224 
00225 void bytepack::write( ostream& os ) 
00226 {
00227    for( int i = 0; i < _size; i++ ) os.put( _data[i] );
00228 }
00229 
00230 void bytepack::read( istream& is ) 
00231 {
00232    for( int i = 0; i < _size; i++ ) is.get( _data[i] );
00233    _data[ _size ] = 0;
00234 }
00235 
00236 ostream& operator << ( ostream& os, bytepack& bp ) 
00237 {
00238    bp.write( os );
00239    return os;
00240 }
00241 
00242 istream& operator >> ( istream& is, bytepack& bp ) {
00243    bp.read( is );
00244    return is;
00245 }
00246 

Generated on Mon May 31 21:38:53 2004 for SR2k4 Assembler by doxygen 1.3.6