Branch data Line data Source code
1 : : #include "SysUtil.hpp"
2 : :
3 : : #include <fstream>
4 : : #include <algorithm>
5 : : #include <assert.h>
6 : :
7 : : #include "moab/EntityHandle.hpp"
8 : :
9 : : namespace moab
10 : : {
11 : :
12 : : namespace SysUtil
13 : : {
14 : :
15 : 10346 : void setmem( void* mem, const void* value, unsigned value_size, size_t num_elem )
16 : : {
17 [ - + ]: 10346 : if( !num_elem ) return;
18 : :
19 : 10346 : char* array = reinterpret_cast< char* >( mem );
20 : 10346 : memcpy( array, value, value_size );
21 : : size_t count;
22 [ + + ]: 20542 : for( count = 1; count * 2 < num_elem; count *= 2 )
23 : 10196 : memcpy( array + count * value_size, array, count * value_size );
24 : 10346 : memcpy( array + count * value_size, array, ( num_elem - count ) * value_size );
25 : : }
26 : :
27 : 1 : long filesize( FILE* filp )
28 : : {
29 : 1 : long curr_pos = ftell( filp );
30 [ - + ]: 1 : if( fseek( filp, 0, SEEK_END ) ) return -1;
31 : :
32 : 1 : long length = ftell( filp );
33 [ - + ]: 1 : if( fseek( filp, curr_pos, SEEK_SET ) )
34 : : {
35 : 0 : assert( 0 );
36 : : return -2;
37 : : }
38 : :
39 : 1 : return length;
40 : : }
41 : :
42 : 0 : long filesize( std::ifstream& str )
43 : : {
44 [ # # ]: 0 : std::istream::pos_type curr_pos = str.tellg();
45 [ # # ][ # # ]: 0 : if( !str.seekg( 0, std::ios_base::end ) ) return -1;
[ # # ]
46 : :
47 [ # # ][ # # ]: 0 : long length = static_cast< long >( str.tellg() );
48 [ # # ][ # # ]: 0 : if( !str.seekg( curr_pos, std::ios_base::beg ) )
[ # # ][ # # ]
49 : : {
50 : 0 : assert( 0 );
51 : : return -2;
52 : : }
53 : :
54 : 0 : return length;
55 : : }
56 : :
57 : 0 : void byteswap( void* data, unsigned value_size, size_t num_elem )
58 : : {
59 : 0 : char* mem = reinterpret_cast< char* >( data );
60 : 0 : char* const end = mem + value_size * num_elem;
61 [ # # ]: 0 : for( ; mem < end; mem += value_size )
62 : : {
63 : 0 : unsigned i = 0, j = value_size - 1;
64 [ # # ]: 0 : while( i < j )
65 : 0 : std::swap( mem[i++], mem[j--] );
66 : : }
67 : 0 : }
68 : :
69 : 0 : inline static uint16_t swap_bytes( uint16_t value )
70 : : {
71 : 0 : return ( value >> 8 ) | ( value << 8 );
72 : : }
73 : :
74 : 1 : inline static uint32_t swap_bytes( uint32_t value )
75 : : {
76 : 2 : return ( ( value /*& (uint32_t)0xFF000000*/ ) >> 24 ) | ( ( value & (uint32_t)0x00FF0000 ) >> 8 ) |
77 : 1 : ( ( value & (uint32_t)0x0000FF00 ) << 8 ) | ( ( value /*& (uint32_t)0X000000FF*/ ) << 24 );
78 : : }
79 : :
80 : : const uint64_t m64b1 = 0xFF;
81 : : const uint64_t m64b2 = m64b1 << 8;
82 : : const uint64_t m64b3 = m64b1 << 16;
83 : : const uint64_t m64b4 = m64b1 << 24;
84 : : const uint64_t m64b5 = m64b1 << 32;
85 : : const uint64_t m64b6 = m64b1 << 40;
86 : : const uint64_t m64b7 = m64b1 << 48;
87 : : // const uint64_t m64b8 = m64b1 << 56;
88 : :
89 : 0 : inline static uint64_t swap_bytes( uint64_t value )
90 : : {
91 : 0 : return ( ( value /*& m64b8*/ ) >> 56 ) | ( ( value & m64b7 ) >> 40 ) | ( ( value & m64b6 ) >> 24 ) |
92 : 0 : ( ( value & m64b5 ) >> 8 ) | ( ( value & m64b4 ) << 8 ) | ( ( value & m64b3 ) << 24 ) |
93 : 0 : ( ( value & m64b2 ) << 40 ) | ( ( value /*& m64b1*/ ) << 56 );
94 : : }
95 : : /*
96 : : inline static uint32_t swap_byte_pairs( uint32_t value )
97 : : {
98 : : return ((value & (uint32_t)0xFF000000) >> 8) |
99 : : ((value & (uint32_t)0x00FF0000) << 8) |
100 : : ((value & (uint32_t)0x0000FF00) >> 8) |
101 : : ((value & (uint32_t)0X000000FF) << 8);
102 : : }
103 : :
104 : : inline static uint64_t swap_byte_quads( uint64_t value )
105 : : {
106 : : return ((value & m64b8) >> 24) |
107 : : ((value & m64b7) >> 8) |
108 : : ((value & m64b6) << 8) |
109 : : ((value & m64b5) << 24) |
110 : : ((value & m64b4) >> 24) |
111 : : ((value & m64b3) >> 8) |
112 : : ((value & m64b2) << 8) |
113 : : ((value & m64b1) << 24);
114 : : }
115 : :
116 : : inline static uint64_t swap_byte_pairs( uint64_t value )
117 : : {
118 : : return ((value & m64b8) >> 8) |
119 : : ((value & m64b7) << 8) |
120 : : ((value & m64b6) >> 8) |
121 : : ((value & m64b5) << 8) |
122 : : ((value & m64b4) >> 8) |
123 : : ((value & m64b3) << 8) |
124 : : ((value & m64b2) >> 8) |
125 : : ((value & m64b1) << 8);
126 : : }
127 : : */
128 : 0 : void byteswap2( void* data, size_t num_elem )
129 : : {
130 : 0 : uint16_t* mem = reinterpret_cast< uint16_t* >( data );
131 : 0 : uint16_t* end = mem + num_elem;
132 [ # # ]: 0 : for( ; mem < end; ++mem )
133 : 0 : *mem = swap_bytes( *mem );
134 : 0 : }
135 : :
136 : 1 : void byteswap4( void* data, size_t num_elem )
137 : : {
138 : 1 : uint32_t* mem = reinterpret_cast< uint32_t* >( data );
139 : 1 : uint32_t* end = mem + num_elem;
140 [ + + ]: 2 : for( ; mem < end; ++mem )
141 : 1 : *mem = swap_bytes( *mem );
142 : 1 : }
143 : :
144 : 0 : void byteswap8( void* data, size_t num_elem )
145 : : {
146 : : if( sizeof( void* ) >= 8 )
147 : : {
148 : 0 : uint64_t* mem = reinterpret_cast< uint64_t* >( data );
149 : 0 : uint64_t* end = mem + num_elem;
150 [ # # ]: 0 : for( ; mem < end; ++mem )
151 : 0 : *mem = swap_bytes( *mem );
152 : : }
153 : : else
154 : : {
155 : : uint32_t* mem = reinterpret_cast< uint32_t* >( data );
156 : : uint32_t* end = mem + 2 * num_elem;
157 : : for( ; mem < end; mem += 2 )
158 : : {
159 : : uint32_t tmp = swap_bytes( mem[0] );
160 : : mem[0] = swap_bytes( mem[1] );
161 : : mem[1] = tmp;
162 : : }
163 : : }
164 : 0 : }
165 : :
166 : : } // namespace SysUtil
167 : :
168 : : } // namespace moab
|