in sparseconvnet/SCN/Metadata/sparsehash/internal/densehashtable.h [1132:1161]
bool unserialize(ValueSerializer serializer, INPUT *fp) {
assert(settings.use_empty() && "empty_key not set for read");
clear(); // just to be consistent
MagicNumberType magic_read;
if ( !sparsehash_internal::read_bigendian_number(fp, &magic_read, 4) )
return false;
if ( magic_read != MAGIC_NUMBER ) {
return false;
}
size_type new_num_buckets;
if ( !sparsehash_internal::read_bigendian_number(fp, &new_num_buckets, 8) )
return false;
clear_to_size(new_num_buckets);
if ( !sparsehash_internal::read_bigendian_number(fp, &num_elements, 8) )
return false;
// Read the bitmap of non-empty buckets.
for (size_type i = 0; i < num_buckets; i += 8) {
unsigned char bits;
if ( !sparsehash_internal::read_data(fp, &bits, sizeof(bits)) )
return false;
for ( int bit = 0; bit < 8; ++bit ) {
if ( i + bit < num_buckets && (bits & (1 << bit)) ) { // not empty
if ( !serializer(fp, &table[i + bit]) ) return false;
}
}
}
return true;
}