lokinet/llarp/dht/txowner.hpp

65 lines
1.3 KiB
C++
Raw Normal View History

2019-01-19 18:16:40 +00:00
#ifndef LLARP_DHT_TXOWNER_HPP
#define LLARP_DHT_TXOWNER_HPP
#include <dht/key.hpp>
2019-02-11 17:14:43 +00:00
#include <util/status.hpp>
2019-01-19 18:16:40 +00:00
#include <cstdint>
namespace llarp
{
namespace dht
{
2019-02-11 17:14:43 +00:00
struct TXOwner : public util::IStateful
2019-01-19 18:16:40 +00:00
{
Key_t node;
uint64_t txid = 0;
TXOwner() = default;
TXOwner(const TXOwner&) = default;
TXOwner(TXOwner&&) = default;
TXOwner&
operator=(const TXOwner&) = default;
TXOwner(const Key_t& k, uint64_t id) : node(k), txid(id)
{
}
2019-02-11 17:14:43 +00:00
util::StatusObject
ExtractStatus() const override
{
util::StatusObject obj{
{"txid", txid},
{"node", node.ToHex()},
};
return obj;
}
2019-01-19 18:16:40 +00:00
bool
operator==(const TXOwner& other) const
{
return std::tie(txid, node) == std::tie(other.txid, other.node);
}
bool
operator<(const TXOwner& other) const
{
return std::tie(txid, node) < std::tie(other.txid, other.node);
}
struct Hash
{
std::size_t
operator()(const TXOwner& o) const noexcept
{
std::size_t sz2;
memcpy(&sz2, &o.node[0], sizeof(std::size_t));
return o.txid ^ (sz2 << 1);
}
};
};
} // namespace dht
} // namespace llarp
#endif