#include "zeek/session/Key.h" #include namespace zeek::session::detail { Key::Key(const void* session, size_t size, size_t type, bool copy) : size(size), type(type) { data = reinterpret_cast(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