A number of tweaks of the serialization code.

This commit is contained in:
Matthias Vallentin 2013-06-10 20:15:13 -07:00
parent 4c21576c12
commit 22afbe42dd
5 changed files with 20 additions and 19 deletions

View file

@ -8,7 +8,7 @@
/** /**
* A vector of bits. * A vector of bits.
*/ */
class BitVector : SerialObj { class BitVector : public SerialObj {
public: public:
typedef size_t block_type; typedef size_t block_type;
typedef size_t size_type; typedef size_t size_type;

View file

@ -55,7 +55,7 @@ IMPLEMENT_SERIAL(CounterVector, SER_COUNTERVECTOR)
bool CounterVector::DoSerialize(SerialInfo* info) const bool CounterVector::DoSerialize(SerialInfo* info) const
{ {
DO_SERIALIZE(SER_COUNTERVECTOR, SerialObj); DO_SERIALIZE(SER_COUNTERVECTOR, SerialObj);
if ( ! SERIALIZE(bits_) ) if ( ! bits_->Serialize(info) )
return false; return false;
return SERIALIZE(static_cast<uint64>(width_)); return SERIALIZE(static_cast<uint64>(width_));
} }
@ -63,14 +63,13 @@ bool CounterVector::DoSerialize(SerialInfo* info) const
bool CounterVector::DoUnserialize(UnserialInfo* info) bool CounterVector::DoUnserialize(UnserialInfo* info)
{ {
DO_UNSERIALIZE(SerialObj); DO_UNSERIALIZE(SerialObj);
return false;
bits_ = BitVector::Unserialize(info); bits_ = BitVector::Unserialize(info);
if ( ! bits_ ) if ( ! bits_ )
return false; return false;
uint64 width; uint64 width;
if ( ! UNSERIALIZE(&width) ) if ( ! UNSERIALIZE(&width) )
return false; return false;
width_ = static_cast<unsigned>(width); width_ = static_cast<size_t>(width);
return true; return true;
} }
@ -127,7 +126,7 @@ bool BloomFilter::DoSerialize(SerialInfo* info) const
DO_SERIALIZE(SER_BLOOMFILTER, SerialObj); DO_SERIALIZE(SER_BLOOMFILTER, SerialObj);
if ( ! SERIALIZE(static_cast<uint16>(hash_->K())) ) if ( ! SERIALIZE(static_cast<uint16>(hash_->K())) )
return false; return false;
return SERIALIZE(static_cast<uint16>(elements_)); return SERIALIZE(static_cast<uint64>(elements_));
} }
bool BloomFilter::DoUnserialize(UnserialInfo* info) bool BloomFilter::DoUnserialize(UnserialInfo* info)
@ -178,14 +177,14 @@ IMPLEMENT_SERIAL(BasicBloomFilter, SER_BASICBLOOMFILTER)
bool BasicBloomFilter::DoSerialize(SerialInfo* info) const bool BasicBloomFilter::DoSerialize(SerialInfo* info) const
{ {
DO_SERIALIZE(SER_BASICBLOOMFILTER, BloomFilter); DO_SERIALIZE(SER_BASICBLOOMFILTER, BloomFilter);
return SERIALIZE(bits_); return bits_->Serialize(info);
} }
bool BasicBloomFilter::DoUnserialize(UnserialInfo* info) bool BasicBloomFilter::DoUnserialize(UnserialInfo* info)
{ {
DO_UNSERIALIZE(BloomFilter); DO_UNSERIALIZE(BloomFilter);
bits_ = BitVector::Unserialize(info); bits_ = BitVector::Unserialize(info);
return bits_ == NULL; return bits_ != NULL;
} }
void BasicBloomFilter::AddImpl(const HashPolicy::HashVector& h) void BasicBloomFilter::AddImpl(const HashPolicy::HashVector& h)
@ -227,15 +226,15 @@ IMPLEMENT_SERIAL(CountingBloomFilter, SER_COUNTINGBLOOMFILTER)
bool CountingBloomFilter::DoSerialize(SerialInfo* info) const bool CountingBloomFilter::DoSerialize(SerialInfo* info) const
{ {
DO_SERIALIZE(SER_BASICBLOOMFILTER, BloomFilter); DO_SERIALIZE(SER_COUNTINGBLOOMFILTER, BloomFilter);
return SERIALIZE(cells_); return cells_->Serialize(info);
} }
bool CountingBloomFilter::DoUnserialize(UnserialInfo* info) bool CountingBloomFilter::DoUnserialize(UnserialInfo* info)
{ {
DO_UNSERIALIZE(BloomFilter); DO_UNSERIALIZE(BloomFilter);
cells_ = CounterVector::Unserialize(info); cells_ = CounterVector::Unserialize(info);
return cells_ == NULL; return cells_ != NULL;
} }
void CountingBloomFilter::AddImpl(const HashPolicy::HashVector& h) void CountingBloomFilter::AddImpl(const HashPolicy::HashVector& h)

View file

@ -73,7 +73,7 @@ protected:
private: private:
BitVector* bits_; BitVector* bits_;
unsigned width_; size_t width_;
}; };
/** /**

View file

@ -574,7 +574,7 @@ size_t BloomFilterVal::Count(const Val* val) const
BloomFilterVal* BloomFilterVal::Merge(const BloomFilterVal* first, BloomFilterVal* BloomFilterVal::Merge(const BloomFilterVal* first,
const BloomFilterVal* second) const BloomFilterVal* second)
{ {
assert(! "not yet implemented"); assert(! "not yet implemented");
return NULL; return NULL;
} }
@ -594,14 +594,15 @@ IMPLEMENT_SERIAL(BloomFilterVal, SER_BLOOMFILTER_VAL);
bool BloomFilterVal::DoSerialize(SerialInfo* info) const bool BloomFilterVal::DoSerialize(SerialInfo* info) const
{ {
DO_SERIALIZE(SER_BLOOMFILTER_VAL, OpaqueVal); DO_SERIALIZE(SER_BLOOMFILTER_VAL, OpaqueVal);
if ( ! SERIALIZE(type_) ) if ( ! type_->Serialize(info) )
return false; return false;
return SERIALIZE(bloom_filter_); return bloom_filter_->Serialize(info);
} }
bool BloomFilterVal::DoUnserialize(UnserialInfo* info) bool BloomFilterVal::DoUnserialize(UnserialInfo* info)
{ {
DO_UNSERIALIZE(OpaqueVal); DO_UNSERIALIZE(OpaqueVal);
type_ = BroType::Unserialize(info); type_ = BroType::Unserialize(info);
if ( ! type_ ) if ( ! type_ )
return false; return false;
@ -609,6 +610,7 @@ bool BloomFilterVal::DoUnserialize(UnserialInfo* info)
tl->Append(type_); tl->Append(type_);
hash_ = new CompositeHash(tl); hash_ = new CompositeHash(tl);
Unref(tl); Unref(tl);
bloom_filter_ = BloomFilter::Unserialize(info); bloom_filter_ = BloomFilter::Unserialize(info);
return bloom_filter_ == NULL; return bloom_filter_ != NULL;
} }

View file

@ -50,10 +50,10 @@ SERIAL_IS_BO(CASE, 0x1200)
SERIAL_IS(LOCATION, 0x1300) SERIAL_IS(LOCATION, 0x1300)
SERIAL_IS(RE_MATCHER, 0x1400) SERIAL_IS(RE_MATCHER, 0x1400)
SERIAL_IS(BITVECTOR, 0x1500) SERIAL_IS(BITVECTOR, 0x1500)
SERIAL_IS(COUNTERVECTOR, 0xa000) SERIAL_IS(COUNTERVECTOR, 0x1600)
SERIAL_IS(BLOOMFILTER, 0xa100) SERIAL_IS(BLOOMFILTER, 0x1700)
SERIAL_IS(BASICBLOOMFILTER, 0xa200) SERIAL_IS(BASICBLOOMFILTER, 0x1800)
SERIAL_IS(COUNTINGBLOOMFILTER, 0xa300) SERIAL_IS(COUNTINGBLOOMFILTER, 0x1900)
// These are the externally visible types. // These are the externally visible types.
const SerialType SER_NONE = 0; const SerialType SER_NONE = 0;