serialization compiles.

Not entirely sure if it works too...
This commit is contained in:
Bernhard Amann 2013-04-10 13:15:31 -04:00
parent ac0e211c6c
commit a37ffab0ea
7 changed files with 89 additions and 4 deletions

View file

@ -10,7 +10,10 @@
*/ */
#define conf .95 #define conf .95
class CardinalityVal;
class CardinalityCounter { class CardinalityCounter {
friend class CardinalityVal;
private: private:
/* /*

View file

@ -1,9 +1,10 @@
#include "OpaqueVal.h" #include "OpaqueVal.h"
#include "Reporter.h" #include "Reporter.h"
#include "Serializer.h" #include "Serializer.h"
#include "HyperLogLog.h"
CardinalityVal::CardinalityVal() CardinalityVal::CardinalityVal() : OpaqueVal(new OpaqueType("cardinality"))
{ {
valid = false; valid = false;
} }
@ -14,6 +15,49 @@ CardinalityVal::~CardinalityVal()
delete c; delete c;
} }
IMPLEMENT_SERIAL(CardinalityVal, SER_CARDINALITY_VAL);
bool CardinalityVal::DoSerialize(SerialInfo* info) const
{
DO_SERIALIZE(SER_CARDINALITY_VAL, OpaqueVal);
if ( ! IsValid() )
return true;
assert(c);
bool valid = true;
valid &= SERIALIZE(c->m);
for ( int i = 0; i < c->m; i++ )
{
valid &= SERIALIZE(c->buckets[i]);
}
return valid;
}
bool CardinalityVal::DoUnserialize(UnserialInfo* info)
{
DO_UNSERIALIZE(OpaqueVal);
if ( ! IsValid() )
return true;
uint64_t m;
bool valid = UNSERIALIZE(&m);
c = new CardinalityCounter(m);
uint8_t* buckets = c->buckets;
for ( int i = 0; i < m; i++ )
{
uint8_t* currbucket = buckets + i;
valid &= UNSERIALIZE( currbucket );
}
return valid;
}
bool CardinalityVal::Init(CardinalityCounter* arg_c) bool CardinalityVal::Init(CardinalityCounter* arg_c)
{ {
if ( valid ) if ( valid )

View file

@ -11,17 +11,17 @@ class CardinalityCounter;
class CardinalityVal: public OpaqueVal { class CardinalityVal: public OpaqueVal {
public: public:
CardinalityVal();
~CardinalityVal();
bool Init(CardinalityCounter*); bool Init(CardinalityCounter*);
bool IsValid() const { return valid; }; bool IsValid() const { return valid; };
CardinalityCounter* Get() { return c; }; CardinalityCounter* Get() { return c; };
CardinalityVal();
~CardinalityVal();
private: private:
bool valid; bool valid;
CardinalityCounter* c; CardinalityCounter* c;
// DECLARE_SERIAL(CardinalityVal); Fixme? DECLARE_SERIAL(CardinalityVal);
}; };

View file

@ -104,6 +104,7 @@ SERIAL_VAL(MD5_VAL, 16)
SERIAL_VAL(SHA1_VAL, 17) SERIAL_VAL(SHA1_VAL, 17)
SERIAL_VAL(SHA256_VAL, 18) SERIAL_VAL(SHA256_VAL, 18)
SERIAL_VAL(ENTROPY_VAL, 19) SERIAL_VAL(ENTROPY_VAL, 19)
SERIAL_VAL(CARDINALITY_VAL, 20)
#define SERIAL_EXPR(name, val) SERIAL_CONST(name, val, EXPR) #define SERIAL_EXPR(name, val) SERIAL_CONST(name, val, EXPR)
SERIAL_EXPR(EXPR, 1) SERIAL_EXPR(EXPR, 1)

View file

@ -107,6 +107,16 @@ bool BinarySerializationFormat::Read(int* v, const char* tag)
return true; return true;
} }
bool BinarySerializationFormat::Read(uint8* v, const char* tag)
{
if ( ! ReadData(v, sizeof(*v)) )
return false;
*v = ntohs(*v);
DBG_LOG(DBG_SERIAL, "Read uint8 %hu [%s]", *v, tag);
return true;
}
bool BinarySerializationFormat::Read(uint16* v, const char* tag) bool BinarySerializationFormat::Read(uint16* v, const char* tag)
{ {
if ( ! ReadData(v, sizeof(*v)) ) if ( ! ReadData(v, sizeof(*v)) )
@ -301,6 +311,13 @@ bool BinarySerializationFormat::Write(char v, const char* tag)
return WriteData(&v, 1); return WriteData(&v, 1);
} }
bool BinarySerializationFormat::Write(uint8 v, const char* tag)
{
DBG_LOG(DBG_SERIAL, "Write uint8 %hu [%s]", v, tag);
v = htons(v);
return WriteData(&v, sizeof(v));
}
bool BinarySerializationFormat::Write(uint16 v, const char* tag) bool BinarySerializationFormat::Write(uint16 v, const char* tag)
{ {
DBG_LOG(DBG_SERIAL, "Write uint16 %hu [%s]", v, tag); DBG_LOG(DBG_SERIAL, "Write uint16 %hu [%s]", v, tag);
@ -447,6 +464,12 @@ bool XMLSerializationFormat::Read(int* v, const char* tag)
return false; return false;
} }
bool XMLSerializationFormat::Read(uint8* v, const char* tag)
{
reporter->InternalError("no reading of xml");
return false;
}
bool XMLSerializationFormat::Read(uint16* v, const char* tag) bool XMLSerializationFormat::Read(uint16* v, const char* tag)
{ {
reporter->InternalError("no reading of xml"); reporter->InternalError("no reading of xml");
@ -530,6 +553,13 @@ bool XMLSerializationFormat::Write(char v, const char* tag)
return WriteElem(tag, "char", &v, 1); return WriteElem(tag, "char", &v, 1);
} }
bool XMLSerializationFormat::Write(uint8 v, const char* tag)
{
const char* tmp = fmt("%" PRIu8, v);
return WriteElem(tag, "uint8", tmp, strlen(tmp));
}
bool XMLSerializationFormat::Write(uint16 v, const char* tag) bool XMLSerializationFormat::Write(uint16 v, const char* tag)
{ {
const char* tmp = fmt("%" PRIu16, v); const char* tmp = fmt("%" PRIu16, v);

View file

@ -23,6 +23,7 @@ public:
virtual void EndRead(); virtual void EndRead();
virtual bool Read(int* v, const char* tag) = 0; virtual bool Read(int* v, const char* tag) = 0;
virtual bool Read(uint8* v, const char* tag) = 0;
virtual bool Read(uint16* v, const char* tag) = 0; virtual bool Read(uint16* v, const char* tag) = 0;
virtual bool Read(uint32* v, const char* tag) = 0; virtual bool Read(uint32* v, const char* tag) = 0;
virtual bool Read(int64* v, const char* tag) = 0; virtual bool Read(int64* v, const char* tag) = 0;
@ -47,6 +48,7 @@ public:
virtual uint32 EndWrite(char** data); // passes ownership virtual uint32 EndWrite(char** data); // passes ownership
virtual bool Write(int v, const char* tag) = 0; virtual bool Write(int v, const char* tag) = 0;
virtual bool Write(uint8 v, const char* tag) = 0;
virtual bool Write(uint16 v, const char* tag) = 0; virtual bool Write(uint16 v, const char* tag) = 0;
virtual bool Write(uint32 v, const char* tag) = 0; virtual bool Write(uint32 v, const char* tag) = 0;
virtual bool Write(int64 v, const char* tag) = 0; virtual bool Write(int64 v, const char* tag) = 0;
@ -92,6 +94,7 @@ public:
virtual ~BinarySerializationFormat(); virtual ~BinarySerializationFormat();
virtual bool Read(int* v, const char* tag); virtual bool Read(int* v, const char* tag);
virtual bool Read(uint8* v, const char* tag);
virtual bool Read(uint16* v, const char* tag); virtual bool Read(uint16* v, const char* tag);
virtual bool Read(uint32* v, const char* tag); virtual bool Read(uint32* v, const char* tag);
virtual bool Read(int64* v, const char* tag); virtual bool Read(int64* v, const char* tag);
@ -106,6 +109,7 @@ public:
virtual bool Read(struct in_addr* addr, const char* tag); virtual bool Read(struct in_addr* addr, const char* tag);
virtual bool Read(struct in6_addr* addr, const char* tag); virtual bool Read(struct in6_addr* addr, const char* tag);
virtual bool Write(int v, const char* tag); virtual bool Write(int v, const char* tag);
virtual bool Write(uint8 v, const char* tag);
virtual bool Write(uint16 v, const char* tag); virtual bool Write(uint16 v, const char* tag);
virtual bool Write(uint32 v, const char* tag); virtual bool Write(uint32 v, const char* tag);
virtual bool Write(int64 v, const char* tag); virtual bool Write(int64 v, const char* tag);
@ -132,6 +136,7 @@ public:
// We don't write anything if tag is nil. // We don't write anything if tag is nil.
virtual bool Write(int v, const char* tag); virtual bool Write(int v, const char* tag);
virtual bool Write(uint8 v, const char* tag);
virtual bool Write(uint16 v, const char* tag); virtual bool Write(uint16 v, const char* tag);
virtual bool Write(uint32 v, const char* tag); virtual bool Write(uint32 v, const char* tag);
virtual bool Write(int64 v, const char* tag); virtual bool Write(int64 v, const char* tag);
@ -152,6 +157,7 @@ public:
// Not implemented. // Not implemented.
virtual bool Read(int* v, const char* tag); virtual bool Read(int* v, const char* tag);
virtual bool Read(uint8* v, const char* tag);
virtual bool Read(uint16* v, const char* tag); virtual bool Read(uint16* v, const char* tag);
virtual bool Read(uint32* v, const char* tag); virtual bool Read(uint32* v, const char* tag);
virtual bool Read(int64* v, const char* tag); virtual bool Read(int64* v, const char* tag);

View file

@ -54,6 +54,7 @@ public:
DECLARE_WRITE(type) DECLARE_WRITE(type)
DECLARE_IO(int) DECLARE_IO(int)
DECLARE_IO(uint8)
DECLARE_IO(uint16) DECLARE_IO(uint16)
DECLARE_IO(uint32) DECLARE_IO(uint32)
DECLARE_IO(int64) DECLARE_IO(int64)