in sparseconvnet/SCN/Metadata/sparsehash/internal/densehashtable.h [1103:1127]
bool serialize(ValueSerializer serializer, OUTPUT *fp) {
squash_deleted(); // so we don't have to worry about delkey
if ( !sparsehash_internal::write_bigendian_number(fp, MAGIC_NUMBER, 4) )
return false;
if ( !sparsehash_internal::write_bigendian_number(fp, num_buckets, 8) )
return false;
if ( !sparsehash_internal::write_bigendian_number(fp, num_elements, 8) )
return false;
// Now write a bitmap of non-empty buckets.
for ( size_type i = 0; i < num_buckets; i += 8 ) {
unsigned char bits = 0;
for ( int bit = 0; bit < 8; ++bit ) {
if ( i + bit < num_buckets && !test_empty(i + bit) )
bits |= (1 << bit);
}
if ( !sparsehash_internal::write_data(fp, &bits, sizeof(bits)) )
return false;
for ( int bit = 0; bit < 8; ++bit ) {
if ( bits & (1 << bit) ) {
if ( !serializer(fp, table[i + bit]) ) return false;
}
}
}
return true;
}