Branch data Line data Source code
1 : : #include "BitPage.hpp"
2 : : #include "moab/Range.hpp"
3 : : #include <stdlib.h>
4 : : #include <string.h>
5 : :
6 : : namespace moab
7 : : {
8 : :
9 : 6 : void BitPage::search( unsigned char value, int offset, int count, int per_ent, Range& results,
10 : : EntityHandle start ) const
11 : : {
12 : 6 : const int end = offset + count;
13 [ + - ]: 6 : Range::iterator hint = results.begin();
14 [ + + ]: 30022 : while( offset != end )
15 : : {
16 [ + - ][ + + ]: 30016 : if( get_bits( offset, per_ent ) == value ) hint = results.insert( hint, start );
[ + - ]
17 : 30016 : ++offset;
18 : 30016 : ++start;
19 : : }
20 : 6 : }
21 : :
22 : 188 : BitPage::BitPage( int per_ent, unsigned char init_val )
23 : : {
24 : 188 : unsigned char mask = (unsigned char)( 1 << per_ent ) - 1; // 2^per_ent - 1
25 : 188 : init_val &= (unsigned char)mask;
26 [ - + + + : 188 : switch( per_ent )
+ ]
27 : : {
28 : : default:
29 : 0 : assert( false );
30 : : abort();
31 : : break; // must be power of two
32 : : // Note: no breaks. fall through such that all bits in init_val are set
33 : : case 1:
34 : 171 : init_val |= (unsigned char)( init_val << 1 );
35 : : case 2:
36 : 178 : init_val |= (unsigned char)( init_val << 2 );
37 : : case 4:
38 : 186 : init_val |= (unsigned char)( init_val << 4 );
39 : : case 8:;
40 : : }
41 : 188 : memset( byteArray, init_val, BitTag::PageSize );
42 : 188 : }
43 : :
44 : : } // namespace moab
|