mirror of
https://github.com/zeek/zeek.git
synced 2025-10-02 14:48:21 +00:00
serialization compiles.
Not entirely sure if it works too...
This commit is contained in:
parent
ac0e211c6c
commit
a37ffab0ea
7 changed files with 89 additions and 4 deletions
|
@ -10,7 +10,10 @@
|
|||
*/
|
||||
#define conf .95
|
||||
|
||||
class CardinalityVal;
|
||||
|
||||
class CardinalityCounter {
|
||||
friend class CardinalityVal;
|
||||
|
||||
private:
|
||||
/*
|
||||
|
|
|
@ -1,9 +1,10 @@
|
|||
#include "OpaqueVal.h"
|
||||
#include "Reporter.h"
|
||||
#include "Serializer.h"
|
||||
#include "HyperLogLog.h"
|
||||
|
||||
|
||||
CardinalityVal::CardinalityVal()
|
||||
CardinalityVal::CardinalityVal() : OpaqueVal(new OpaqueType("cardinality"))
|
||||
{
|
||||
valid = false;
|
||||
}
|
||||
|
@ -14,6 +15,49 @@ CardinalityVal::~CardinalityVal()
|
|||
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)
|
||||
{
|
||||
if ( valid )
|
||||
|
|
|
@ -11,17 +11,17 @@ class CardinalityCounter;
|
|||
|
||||
class CardinalityVal: public OpaqueVal {
|
||||
public:
|
||||
CardinalityVal();
|
||||
~CardinalityVal();
|
||||
bool Init(CardinalityCounter*);
|
||||
bool IsValid() const { return valid; };
|
||||
CardinalityCounter* Get() { return c; };
|
||||
CardinalityVal();
|
||||
~CardinalityVal();
|
||||
|
||||
private:
|
||||
bool valid;
|
||||
CardinalityCounter* c;
|
||||
|
||||
// DECLARE_SERIAL(CardinalityVal); Fixme?
|
||||
DECLARE_SERIAL(CardinalityVal);
|
||||
};
|
||||
|
||||
|
||||
|
|
|
@ -104,6 +104,7 @@ SERIAL_VAL(MD5_VAL, 16)
|
|||
SERIAL_VAL(SHA1_VAL, 17)
|
||||
SERIAL_VAL(SHA256_VAL, 18)
|
||||
SERIAL_VAL(ENTROPY_VAL, 19)
|
||||
SERIAL_VAL(CARDINALITY_VAL, 20)
|
||||
|
||||
#define SERIAL_EXPR(name, val) SERIAL_CONST(name, val, EXPR)
|
||||
SERIAL_EXPR(EXPR, 1)
|
||||
|
|
|
@ -107,6 +107,16 @@ bool BinarySerializationFormat::Read(int* v, const char* tag)
|
|||
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)
|
||||
{
|
||||
if ( ! ReadData(v, sizeof(*v)) )
|
||||
|
@ -301,6 +311,13 @@ bool BinarySerializationFormat::Write(char v, const char* tag)
|
|||
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)
|
||||
{
|
||||
DBG_LOG(DBG_SERIAL, "Write uint16 %hu [%s]", v, tag);
|
||||
|
@ -447,6 +464,12 @@ bool XMLSerializationFormat::Read(int* v, const char* tag)
|
|||
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)
|
||||
{
|
||||
reporter->InternalError("no reading of xml");
|
||||
|
@ -530,6 +553,13 @@ bool XMLSerializationFormat::Write(char v, const char* tag)
|
|||
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)
|
||||
{
|
||||
const char* tmp = fmt("%" PRIu16, v);
|
||||
|
|
|
@ -23,6 +23,7 @@ public:
|
|||
virtual void EndRead();
|
||||
|
||||
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(uint32* 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 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(uint32 v, const char* tag) = 0;
|
||||
virtual bool Write(int64 v, const char* tag) = 0;
|
||||
|
@ -92,6 +94,7 @@ public:
|
|||
virtual ~BinarySerializationFormat();
|
||||
|
||||
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(uint32* 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 in6_addr* addr, 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(uint32 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.
|
||||
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(uint32 v, const char* tag);
|
||||
virtual bool Write(int64 v, const char* tag);
|
||||
|
@ -152,6 +157,7 @@ public:
|
|||
|
||||
// Not implemented.
|
||||
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(uint32* v, const char* tag);
|
||||
virtual bool Read(int64* v, const char* tag);
|
||||
|
|
|
@ -54,6 +54,7 @@ public:
|
|||
DECLARE_WRITE(type)
|
||||
|
||||
DECLARE_IO(int)
|
||||
DECLARE_IO(uint8)
|
||||
DECLARE_IO(uint16)
|
||||
DECLARE_IO(uint32)
|
||||
DECLARE_IO(int64)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue