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 #elif __GNUC__ == 3
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 #elif __GNUC__ > 3
00038   #include <ext/hash_map>
00039   namespace Sgi = ::__gnu_cxx;         // GCC 4.0 and later
00040   #define HASHMAP __gnu_cxx
00041 #endif
00042 #else      // ...  there are other compilers, right?
00043   namespace Sgi = std;
00044   #define HASHMAP std
00045 #endif
00046 
00047 
00048 
00049 
00050 namespace AMOS {
00051 
00052 //--------------------------------------------------- SafeCalloc ---------------
00064 inline void * SafeCalloc (size_t num, size_t size)
00065 {
00066   void * Q = calloc (num, size);
00067   if ( Q == NULL )
00068     AMOS_THROW_ALLOC ("calloc failed");
00069 
00070   return Q;
00071 }
00072 
00073 
00074 //--------------------------------------------------- SafeMalloc ---------------
00085 inline void * SafeMalloc (size_t size)
00086 {
00087   void * Q = malloc (size);
00088   if ( Q == NULL )
00089     AMOS_THROW_ALLOC ("malloc failed");
00090 
00091   return Q;
00092 }
00093 
00094 
00095 //--------------------------------------------------- SafeRealloc --------------
00109 inline void * SafeRealloc (void * P, size_t size)
00110 {
00111   void * Q = realloc (P, size);
00112   if ( Q == NULL  &&  size != 0 )
00113     AMOS_THROW_ALLOC ("realloc failed");
00114 
00115   return Q;
00116 }
00117 
00118 
00119 //--------------------------------------------------- SafeStrdup ---------------
00130 inline char * SafeStrdup (const char * str)
00131 {
00132   char * Q = strdup (str);
00133   if ( Q == NULL )
00134     AMOS_THROW_ALLOC ("strdup failed");
00135   return Q;
00136 }
00137 
00138 
00139 //--------------------------------------------------- Complement ---------------
00150 char Complement (char ch);
00151 
00152 
00153 //--------------------------------------------------- ReverseComplement --------
00164 void ReverseComplement (std::string & str);
00165 
00166 
00167 //--------------------------------------------------- ReverseComplement --------
00178 void ReverseComplement (char * str);
00179 
00180 
00181 //--------------------------------------------------- Reverse ------------------
00189 void Reverse (std::string & str);
00190 
00191 
00192 //--------------------------------------------------- Reverse ------------------
00198 void Reverse (char * str);
00199 
00200 
00201 //------------------------------------------------- writeLE ------------------
00209 inline void writeLE (std::ostream & out, const uint8_t * i)
00210 {
00211   out . put ((char)(*i));
00212 }
00213 inline void writeLE (std::ostream & out, const int8_t * i)
00214 {
00215   writeLE (out, (const uint8_t *)(i));
00216 }
00217 inline void writeLE (std::ostream & out, const BankFlags_t * i)
00218 {
00219   assert ( sizeof (BankFlags_t) == 1 );
00220   writeLE (out, (const uint8_t *)(i));
00221 }
00222 
00223 
00224 //------------------------------------------------- writeLE ------------------
00232 inline void writeLE (std::ostream & out, const uint16_t * i)
00233 {
00234   union {uint16_t i; char c[sizeof (uint16_t)];} u16;
00235   u16.i = htol16 (*i);
00236   out . write (u16.c, sizeof (uint16_t));
00237 }
00238 inline void writeLE (std::ostream & out, const int16_t * i)
00239 {
00240   writeLE (out, (const uint16_t *)(i));
00241 }
00242 
00243 
00244 //------------------------------------------------- writeLE ------------------
00252 inline void writeLE (std::ostream & out, const uint32_t * i)
00253 {
00254   union {uint32_t i; char c[sizeof (uint32_t)];} u32;
00255   u32.i = htol32 (*i);
00256   out . write (u32.c, sizeof (uint32_t));
00257 }
00258 inline void writeLE (std::ostream & out, const int32_t * i)
00259 {
00260   writeLE (out, (const uint32_t *)(i));
00261 }
00262 
00263 
00264 //------------------------------------------------- writeLE ------------------
00272 inline void writeLE (std::ostream & out, const uint64_t * i)
00273 {
00274   union {uint64_t i; char c[sizeof (uint64_t)];} u64;
00275   u64.i = htol64 (*i);
00276   out . write (u64.c, sizeof (uint64_t));
00277 }
00278 inline void writeLE (std::ostream & out, const int64_t * i)
00279 {
00280   writeLE (out, (const uint64_t *)(i));
00281 }
00282 
00283 
00284 //------------------------------------------------- readLE -------------------
00292 inline void readLE (std::istream & in, uint8_t * i)
00293 {
00294   *i = in . get( );
00295 }
00296 inline void readLE (std::istream & in, int8_t * i)
00297 {
00298   readLE (in, (uint8_t *)(i));
00299 }
00300 inline void readLE (std::istream & in, BankFlags_t * i)
00301 {
00302   assert ( sizeof (BankFlags_t) == 1 );
00303   readLE (in, (uint8_t *)(i));
00304 }
00305 
00306 
00307 //------------------------------------------------- readLE -------------------
00315 inline void readLE (std::istream & in, uint16_t * i)
00316 {
00317   union {uint16_t i; char c[sizeof (uint16_t)];} u16;
00318   in . read (u16.c, sizeof (uint16_t));
00319   *i = ltoh16 (u16.i);
00320 }
00321 inline void readLE (std::istream & in, int16_t * i)
00322 {
00323   readLE (in, (uint16_t *)(i));
00324 }
00325 
00326 
00327 //------------------------------------------------- readLE -------------------
00335 inline void readLE (std::istream & in, uint32_t * i)
00336 {
00337   union {uint32_t i; char c[sizeof (uint32_t)];} u32;
00338   in . read (u32.c, sizeof (uint32_t));
00339   *i = ltoh32 (u32.i);
00340 }
00341 inline void readLE (std::istream & in, int32_t * i)
00342 {
00343   readLE (in, (uint32_t *)(i));
00344 }
00345 
00346 
00347 //------------------------------------------------- readLE -------------------
00355 inline void readLE (std::istream & in, uint64_t * i)
00356 {
00357   union {uint64_t i; char c[sizeof (uint64_t)];} u64;
00358   in . read (u64.c, sizeof (uint64_t));
00359   *i = ltoh64 (u64.i);
00360 }
00361 inline void readLE (std::istream & in, int64_t * i)
00362 {
00363   readLE (in, (uint64_t *)(i));
00364 }
00365 
00366 } // namespace AMOS
00367 
00368 #endif // #ifndef __utility_AMOS_HH

Generated on Mon Feb 22 17:36:27 2010 for libAMOS by  doxygen 1.4.7