moab
SysUtil.hpp
Go to the documentation of this file.
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
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines