mirror of
https://github.com/zeek/zeek.git
synced 2025-10-02 06:38:20 +00:00
83 lines
1.2 KiB
C++
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
|