Mesh Oriented datABase  (version 5.4.1)
Array-based unstructured mesh datastructure
BitPage.cpp
Go to the documentation of this file.
00001 #include "BitPage.hpp"
00002 #include "moab/Range.hpp"
00003 #include <cstdlib>
00004 #include <cstring>
00005 
00006 namespace moab
00007 {
00008 
00009 void BitPage::search( unsigned char value, int offset, int count, int per_ent, Range& results, EntityHandle start )
00010     const
00011 {
00012     const int end        = offset + count;
00013     Range::iterator hint = results.begin();
00014     while( offset != end )
00015     {
00016         if( get_bits( offset, per_ent ) == value ) hint = results.insert( hint, start );
00017         ++offset;
00018         ++start;
00019     }
00020 }
00021 
00022 BitPage::BitPage( int per_ent, unsigned char init_val )
00023 {
00024     unsigned char mask = (unsigned char)( 1 << per_ent ) - 1;  // 2^per_ent - 1
00025     init_val &= (unsigned char)mask;
00026     switch( per_ent )
00027     {
00028         default:
00029             assert( false );
00030             abort();
00031             break;  // must be power of two
00032 
00033             // Note: fall through such that all bits in init_val are set, but with odd structure to avoid
00034         // fall-through warnings
00035         case 1:
00036             init_val |= (unsigned char)( init_val << 1 );
00037             // fall through
00038         case 2:
00039             init_val |= (unsigned char)( init_val << 2 );
00040             // fall through
00041         case 4:
00042             init_val |= (unsigned char)( init_val << 4 );
00043             // fall through
00044         case 8:;
00045     }
00046     memset( byteArray, init_val, BitTag::PageSize );
00047 }
00048 
00049 }  // namespace moab
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines