Monero
Loading...
Searching...
No Matches
subaddress_index.h
Go to the documentation of this file.
1// Copyright (c) 2017-2022, The Monero Project
2//
3// All rights reserved.
4//
5// Redistribution and use in source and binary forms, with or without modification, are
6// permitted provided that the following conditions are met:
7//
8// 1. Redistributions of source code must retain the above copyright notice, this list of
9// conditions and the following disclaimer.
10//
11// 2. Redistributions in binary form must reproduce the above copyright notice, this list
12// of conditions and the following disclaimer in the documentation and/or other
13// materials provided with the distribution.
14//
15// 3. Neither the name of the copyright holder nor the names of its contributors may be
16// used to endorse or promote products derived from this software without specific
17// prior written permission.
18//
19// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
20// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
21// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
22// THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
24// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
25// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
26// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
27// THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28
29#pragma once
30
32#include <boost/serialization/serialization.hpp>
33#include <boost/serialization/version.hpp>
34#include <ostream>
35
36namespace cryptonote
37{
39 {
42 bool operator==(const subaddress_index& rhs) const { return !memcmp(this, &rhs, sizeof(subaddress_index)); }
43 bool operator!=(const subaddress_index& rhs) const { return !(*this == rhs); }
44 bool is_zero() const { return major == 0 && minor == 0; }
45
50
55 };
56}
57
58namespace cryptonote {
59 inline std::ostream& operator<<(std::ostream& out, const cryptonote::subaddress_index& subaddr_index)
60 {
61 return out << subaddr_index.major << '/' << subaddr_index.minor;
62 }
63}
64
65namespace std
66{
67 template <>
68 struct hash<cryptonote::subaddress_index>
69 {
70 size_t operator()(const cryptonote::subaddress_index& index ) const
71 {
72 size_t res;
73 if (sizeof(size_t) == 8)
74 {
75 res = ((uint64_t)index.major << 32) | index.minor;
76 }
77 else
78 {
79 // https://stackoverflow.com/a/17017281
80 res = 17;
81 res = res * 31 + hash<uint32_t>()(index.major);
82 res = res * 31 + hash<uint32_t>()(index.minor);
83 }
84 return res;
85 }
86 };
87}
88
89BOOST_CLASS_VERSION(cryptonote::subaddress_index, 0)
90
91namespace boost
92{
93 namespace serialization
94 {
95 template <class Archive>
96 inline void serialize(Archive &a, cryptonote::subaddress_index &x, const boost::serialization::version_type ver)
97 {
98 a & x.major;
99 a & x.minor;
100 }
101 }
102}
#define BEGIN_SERIALIZE_OBJECT()
#define FIELD(f)
#define END_SERIALIZE()
const char * res
Definition hmac_keccak.cpp:42
#define KV_SERIALIZE(varialble)
Definition keyvalue_serialization.h:120
#define END_KV_SERIALIZE_MAP()
Definition keyvalue_serialization.h:118
#define BEGIN_KV_SERIALIZE_MAP()
Definition keyvalue_serialization.h:43
Holds cryptonote related classes and helpers.
Definition blockchain_db.cpp:45
std::ostream & operator<<(std::ostream &out, const cryptonote::subaddress_index &subaddr_index)
Definition subaddress_index.h:59
BOOST_CLASS_VERSION(nodetool::peerlist_types, nodetool::CURRENT_PEERLIST_STORAGE_ARCHIVE_VER)
const GenericPointer< typename T::ValueType > T2 T::AllocatorType & a
Definition pointer.h:1124
void serialize(Archive &a, unsigned_tx_set &x, const boost::serialization::version_type ver)
Definition serialization.cpp:898
unsigned int uint32_t
Definition stdint.h:126
unsigned __int64 uint64_t
Definition stdint.h:136
Definition subaddress_index.h:39
uint32_t major
Definition subaddress_index.h:40
uint32_t minor
Definition subaddress_index.h:41
bool operator==(const subaddress_index &rhs) const
Definition subaddress_index.h:42
bool is_zero() const
Definition subaddress_index.h:44
bool operator!=(const subaddress_index &rhs) const
Definition subaddress_index.h:43
size_t operator()(const cryptonote::subaddress_index &index) const
Definition subaddress_index.h:70