32 uint64_t
encode(
const uint8_t* addr,
size_t addrLen, uint16_t port) {
36 std::copy_n(addr, 4, ep.v4);
48 Intern r{addr[0], addr[1], addr[2], addr[3], addr[4], addr[5],
49 addr[6], addr[7], addr[8], addr[11], addr[12]};
50 ep.v6sum = computeChecksum(r);
52 auto found = std::find(m_interns.begin(), m_interns.end(), r);
53 if (found != m_interns.end()) {
54 ep.v6ref = 1 + std::distance(m_interns.begin(), found);
56 m_interns[m_internPos] = r;
57 ep.v6ref = ++m_internPos;
58 if (m_internPos == m_interns.size()) {
72 size_t decode(uint64_t endpointId, uint8_t addr[16], uint16_t* port) {
77 std::copy_n(ep.v4, 4, addr);
81 if (ep.v6ref == 0 || ep.v6ref > m_interns.size()) {
84 auto r = m_interns[ep.v6ref - 1];
85 if (computeChecksum(r) != ep.v6sum) {
88 std::copy_n(r.begin(), 9, addr);
120 static_assert(offsetof(EndpointId, port) == offsetof(EndpointId, port_),
"");