zeek/src/session/Key.cc

83 lines
1.2 KiB
C++

#include "zeek/session/Key.h"
#include <cstring>
namespace zeek::session::detail {
Key::Key(const void* session, size_t size, size_t type, bool copy) :
size(size), type(type)
{
data = reinterpret_cast<const uint8_t*>(session);
if ( copy )
CopyData();
copied = copy;
}
Key::Key(Key&& rhs)
{
data = rhs.data;
size = rhs.size;
copied = rhs.copied;
rhs.data = nullptr;
rhs.size = 0;
rhs.copied = false;
}
Key& Key::operator=(Key&& rhs)
{
if ( this != &rhs )
{
data = rhs.data;
size = rhs.size;
copied = rhs.copied;
rhs.data = nullptr;
rhs.size = 0;
rhs.copied = false;
}
return *this;
}
Key::~Key()
{
if ( copied )
delete [] data;
}
void Key::CopyData()
{
if ( copied )
return;
copied = true;
uint8_t *temp = new uint8_t[size];
memcpy(temp, data, size);
data = temp;
}
bool Key::operator<(const Key& rhs) const
{
if ( size != rhs.size )
return size < rhs.size;
else if ( type != rhs.type )
return type < rhs.type;
return memcmp(data, rhs.data, size) < 0;
}
bool Key::operator==(const Key& rhs) const
{
if ( size != rhs.size )
return false;
else if ( type != rhs.type )
return false;
return memcmp(data, rhs.data, size) == 0;
}
} // namespace zeek::session::detail