moab
|
00001 #ifndef MB_SYS_UTIL_HPP 00002 #define MB_SYS_UTIL_HPP 00003 00004 #include <string.h> // for size_t 00005 #include <stdio.h> 00006 #include <iosfwd> 00007 00008 namespace moab { 00009 00010 namespace SysUtil 00011 { 00012 00022 void setmem( void* mem, const void* value, unsigned value_size, size_t num_elem ); 00023 00032 long filesize( FILE* filp ); 00033 00042 long filesize( std::ifstream& str ); 00043 00049 inline bool little_endian() 00050 { 00051 const unsigned one = 1; 00052 return !*((char*)&one); 00053 } 00054 00060 inline bool big_endian() 00061 { 00062 const unsigned one = 1; 00063 return !(((char*)&one)[sizeof(unsigned)-1]); 00064 } 00065 00073 void byteswap( void* data, unsigned value_size, size_t num_elem ); 00074 00076 void byteswap2( void* data, size_t num_elem ); 00078 void byteswap4( void* data, size_t num_elem ); 00080 void byteswap8( void* data, size_t num_elem ); 00081 00083 template <typename T> 00084 inline void byteswap( T* data, size_t num_elem ) 00085 { 00086 switch (sizeof(T)) { 00087 case 1: 00088 break; 00089 case 2: 00090 byteswap2( data, num_elem ); 00091 break; 00092 case 4: 00093 byteswap4( data, num_elem ); 00094 break; 00095 case 8: 00096 byteswap8( data, num_elem ); 00097 break; 00098 default: 00099 byteswap( data, sizeof(T), num_elem ); 00100 break; 00101 } 00102 } 00103 00104 00105 } // namespace SysUtil 00106 00107 } // namespace moab 00108 00109 00110 #endif