Main Page | Namespace List | Class Hierarchy | Class List | File List | Namespace Members | Class Members | File Members | Related Pages

utility_AMOS.hh

Go to the documentation of this file.
00001 00002 00003 00004 00005 00006 00007 00008 00009 00010 #ifndef __utility_AMOS_HH 00011 #define __utility_AMOS_HH 1 00012 00013 #include "inttypes_AMOS.hh" 00014 #include "exceptions_AMOS.hh" 00015 #include <new> 00016 #include <cstdlib> 00017 #include <cstring> 00018 #include <iostream> 00019 #include <cassert> 00020 #include <errno.h> 00021 00022 //-- Include hash_map 00023 #ifdef __GNUC__ 00024 #if __GNUC__ < 3 00025 #include <hash_map.h> 00026 namespace Sgi { using ::hash_map; }; // inherit globals 00027 #define HASHMAP std 00028 #else 00029 #include <ext/hash_map> 00030 #if __GNUC_MINOR__ == 0 00031 namespace Sgi = std; // GCC 3.0 00032 #define HASHMAP std 00033 #else 00034 namespace Sgi = ::__gnu_cxx; // GCC 3.1 and later 00035 #define HASHMAP __gnu_cxx 00036 #endif 00037 #endif 00038 #else // ... there are other compilers, right? 00039 namespace Sgi = std; 00040 #define HASHMAP std 00041 #endif 00042 00043 00044 00045 00046 namespace AMOS { 00047 00048 //--------------------------------------------------- SafeCalloc --------------- 00060 inline void * SafeCalloc (size_t num, size_t size) 00061 { 00062 void * Q = calloc (num, size); 00063 if ( Q == NULL ) 00064 AMOS_THROW_ALLOC ("calloc failed"); 00065 00066 return Q; 00067 } 00068 00069 00070 //--------------------------------------------------- SafeMalloc --------------- 00081 inline void * SafeMalloc (size_t size) 00082 { 00083 void * Q = malloc (size); 00084 if ( Q == NULL ) 00085 AMOS_THROW_ALLOC ("malloc failed"); 00086 00087 return Q; 00088 } 00089 00090 00091 //--------------------------------------------------- SafeRealloc -------------- 00105 inline void * SafeRealloc (void * P, size_t size) 00106 { 00107 void * Q = realloc (P, size); 00108 if ( Q == NULL && size != 0 ) 00109 AMOS_THROW_ALLOC ("realloc failed"); 00110 00111 return Q; 00112 } 00113 00114 00115 //--------------------------------------------------- SafeStrdup --------------- 00126 inline char * SafeStrdup (const char * str) 00127 { 00128 char * Q = strdup (str); 00129 if ( Q == NULL ) 00130 AMOS_THROW_ALLOC ("strdup failed"); 00131 return Q; 00132 } 00133 00134 00135 //--------------------------------------------------- Complement --------------- 00146 char Complement (char ch); 00147 00148 00149 //--------------------------------------------------- ReverseComplement -------- 00160 void ReverseComplement (std::string & str); 00161 00162 00163 //--------------------------------------------------- ReverseComplement -------- 00174 void ReverseComplement (char * str); 00175 00176 00177 //--------------------------------------------------- Reverse ------------------ 00185 void Reverse (std::string & str); 00186 00187 00188 //--------------------------------------------------- Reverse ------------------ 00194 void Reverse (char * str); 00195 00196 00197 //------------------------------------------------- writeLE ------------------ 00205 inline void writeLE (std::ostream & out, const uint8_t * i) 00206 { 00207 out . put ((char)(*i)); 00208 } 00209 inline void writeLE (std::ostream & out, const int8_t * i) 00210 { 00211 writeLE (out, (const uint8_t *)(i)); 00212 } 00213 inline void writeLE (std::ostream & out, const BankFlags_t * i) 00214 { 00215 assert ( sizeof (BankFlags_t) == 1 ); 00216 writeLE (out, (const uint8_t *)(i)); 00217 } 00218 00219 00220 //------------------------------------------------- writeLE ------------------ 00228 inline void writeLE (std::ostream & out, const uint16_t * i) 00229 { 00230 union {uint16_t i; char c[sizeof (uint16_t)];} u16; 00231 u16.i = htol16 (*i); 00232 out . write (u16.c, sizeof (uint16_t)); 00233 } 00234 inline void writeLE (std::ostream & out, const int16_t * i) 00235 { 00236 writeLE (out, (const uint16_t *)(i)); 00237 } 00238 00239 00240 //------------------------------------------------- writeLE ------------------ 00248 inline void writeLE (std::ostream & out, const uint32_t * i) 00249 { 00250 union {uint32_t i; char c[sizeof (uint32_t)];} u32; 00251 u32.i = htol32 (*i); 00252 out . write (u32.c, sizeof (uint32_t)); 00253 } 00254 inline void writeLE (std::ostream & out, const int32_t * i) 00255 { 00256 writeLE (out, (const uint32_t *)(i)); 00257 } 00258 00259 00260 //------------------------------------------------- writeLE ------------------ 00268 inline void writeLE (std::ostream & out, const uint64_t * i) 00269 { 00270 union {uint64_t i; char c[sizeof (uint64_t)];} u64; 00271 u64.i = htol64 (*i); 00272 out . write (u64.c, sizeof (uint64_t)); 00273 } 00274 inline void writeLE (std::ostream & out, const int64_t * i) 00275 { 00276 writeLE (out, (const uint64_t *)(i)); 00277 } 00278 00279 00280 //------------------------------------------------- readLE ------------------- 00288 inline void readLE (std::istream & in, uint8_t * i) 00289 { 00290 *i = in . get( ); 00291 } 00292 inline void readLE (std::istream & in, int8_t * i) 00293 { 00294 readLE (in, (uint8_t *)(i)); 00295 } 00296 inline void readLE (std::istream & in, BankFlags_t * i) 00297 { 00298 assert ( sizeof (BankFlags_t) == 1 ); 00299 readLE (in, (uint8_t *)(i)); 00300 } 00301 00302 00303 //------------------------------------------------- readLE ------------------- 00311 inline void readLE (std::istream & in, uint16_t * i) 00312 { 00313 union {uint16_t i; char c[sizeof (uint16_t)];} u16; 00314 in . read (u16.c, sizeof (uint16_t)); 00315 *i = ltoh16 (u16.i); 00316 } 00317 inline void readLE (std::istream & in, int16_t * i) 00318 { 00319 readLE (in, (uint16_t *)(i)); 00320 } 00321 00322 00323 //------------------------------------------------- readLE ------------------- 00331 inline void readLE (std::istream & in, uint32_t * i) 00332 { 00333 union {uint32_t i; char c[sizeof (uint32_t)];} u32; 00334 in . read (u32.c, sizeof (uint32_t)); 00335 *i = ltoh32 (u32.i); 00336 } 00337 inline void readLE (std::istream & in, int32_t * i) 00338 { 00339 readLE (in, (uint32_t *)(i)); 00340 } 00341 00342 00343 //------------------------------------------------- readLE ------------------- 00351 inline void readLE (std::istream & in, uint64_t * i) 00352 { 00353 union {uint64_t i; char c[sizeof (uint64_t)];} u64; 00354 in . read (u64.c, sizeof (uint64_t)); 00355 *i = ltoh64 (u64.i); 00356 } 00357 inline void readLE (std::istream & in, int64_t * i) 00358 { 00359 readLE (in, (uint64_t *)(i)); 00360 } 00361 00362 } // namespace AMOS 00363 00364 #endif // #ifndef __utility_AMOS_HH

Generated on Tue May 17 15:19:02 2005 for libAMOS by doxygen 1.3.8