My Project 1.7.4
C++ Distributed Hash Table
Public Types | Public Member Functions | Static Public Member Functions | Friends | List of all members
dht::Hash< N > Class Template Reference

#include <infohash.h>

Public Types

using T = std::array< uint8_t, N >
 
typedef T::iterator iterator
 
typedef T::const_iterator const_iterator
 

Public Member Functions

 Hash (const uint8_t *h, size_t data_len)
 
 Hash (const std::string &hex)
 
 Hash (const msgpack::object &o)
 
size_t size () const
 
const uint8_t * data () const
 
uint8_t * data ()
 
iterator begin ()
 
const_iterator cbegin () const
 
iterator end ()
 
const_iterator cend () const
 
bool operator== (const Hash &h) const
 
bool operator!= (const Hash &h) const
 
bool operator< (const Hash &o) const
 
 operator bool () const
 
uint8_t & operator[] (size_t index)
 
const uint8_t & operator[] (size_t index) const
 
int lowbit () const
 
int xorCmp (const Hash &id1, const Hash &id2) const
 
bool getBit (unsigned nbit) const
 
void setBit (unsigned nbit, bool b)
 
double toFloat () const
 
const char * to_c_str () const
 
std::string toString () const
 
template<typename Packer >
void msgpack_pack (Packer &pk) const
 
void msgpack_unpack (msgpack::object o)
 

Static Public Member Functions

static int cmp (const Hash &id1, const Hash &id2)
 
static unsigned commonBits (const Hash &id1, const Hash &id2)
 
static Hash get (const std::string &data)
 
static Hash get (const std::vector< uint8_t > &data)
 
static Hash get (const uint8_t *data, size_t data_len)
 
static Hash getRandom ()
 

Friends

template<size_t M>
OPENDHT_PUBLIC friend std::ostream & operator<< (std::ostream &s, const Hash< M > &h)
 
template<size_t M>
OPENDHT_PUBLIC friend std::istream & operator>> (std::istream &s, Hash< M > &h)
 

Detailed Description

template<size_t N>
class dht::Hash< N >

Represents an InfoHash. An InfoHash is a byte array of HASH_LEN bytes. InfoHashes identify nodes and values in the Dht.

Definition at line 62 of file infohash.h.

Member Typedef Documentation

◆ const_iterator

template<size_t N>
typedef T::const_iterator dht::Hash< N >::const_iterator

Definition at line 66 of file infohash.h.

◆ iterator

template<size_t N>
typedef T::iterator dht::Hash< N >::iterator

Definition at line 65 of file infohash.h.

◆ T

template<size_t N>
using dht::Hash< N >::T = std::array<uint8_t, N>

Definition at line 64 of file infohash.h.

Constructor & Destructor Documentation

◆ Hash() [1/4]

template<size_t N>
dht::Hash< N >::Hash ( )
inline

Definition at line 68 of file infohash.h.

◆ Hash() [2/4]

template<size_t N>
dht::Hash< N >::Hash ( const uint8_t *  h,
size_t  data_len 
)
inline

Definition at line 71 of file infohash.h.

◆ Hash() [3/4]

template<size_t N>
dht::Hash< N >::Hash ( const std::string &  hex)
explicit

Constructor from an hexadecimal string (without "0x"). hex must be at least 2.HASH_LEN characters long. If too long, only the first 2.HASH_LEN characters are read.

Definition at line 290 of file infohash.h.

◆ Hash() [4/4]

template<size_t N>
dht::Hash< N >::Hash ( const msgpack::object &  o)
inline

Definition at line 84 of file infohash.h.

Member Function Documentation

◆ begin()

template<size_t N>
iterator dht::Hash< N >::begin ( )
inline

Definition at line 91 of file infohash.h.

◆ cbegin()

template<size_t N>
const_iterator dht::Hash< N >::cbegin ( ) const
inline

Definition at line 92 of file infohash.h.

◆ cend()

template<size_t N>
const_iterator dht::Hash< N >::cend ( ) const
inline

Definition at line 94 of file infohash.h.

◆ cmp()

template<size_t N>
static int dht::Hash< N >::cmp ( const Hash< N > &  id1,
const Hash< N > &  id2 
)
inlinestatic

Forget about the `‘XOR-metric’'. An id is just a path from the root of the tree, so bits are numbered from the start.

Definition at line 149 of file infohash.h.

◆ commonBits()

template<size_t N>
static unsigned dht::Hash< N >::commonBits ( const Hash< N > &  id1,
const Hash< N > &  id2 
)
inlinestatic

Find how many bits two ids have in common.

Definition at line 155 of file infohash.h.

◆ data() [1/2]

template<size_t N>
uint8_t * dht::Hash< N >::data ( )
inline

Definition at line 90 of file infohash.h.

◆ data() [2/2]

template<size_t N>
const uint8_t * dht::Hash< N >::data ( ) const
inline

Definition at line 89 of file infohash.h.

◆ end()

template<size_t N>
iterator dht::Hash< N >::end ( )
inline

Definition at line 93 of file infohash.h.

◆ get() [1/3]

template<size_t N>
static Hash dht::Hash< N >::get ( const std::string &  data)
inlinestatic

Definition at line 220 of file infohash.h.

◆ get() [2/3]

template<size_t N>
static Hash dht::Hash< N >::get ( const std::vector< uint8_t > &  data)
inlinestatic

Definition at line 224 of file infohash.h.

◆ get() [3/3]

template<size_t N>
static Hash dht::Hash< N >::get ( const uint8_t *  data,
size_t  data_len 
)
inlinestatic

Computes the hash from a given data buffer of size data_len.

Definition at line 231 of file infohash.h.

◆ getBit()

template<size_t N>
bool dht::Hash< N >::getBit ( unsigned  nbit) const
inline

Definition at line 197 of file infohash.h.

◆ getRandom()

template<size_t N>
Hash< N > dht::Hash< N >::getRandom
static

Definition at line 316 of file infohash.h.

◆ lowbit()

template<size_t N>
int dht::Hash< N >::lowbit ( ) const
inline

Find the lowest 1 bit in an id. Result will allways be lower than 8*N

Definition at line 132 of file infohash.h.

◆ msgpack_pack()

template<size_t N>
template<typename Packer >
void dht::Hash< N >::msgpack_pack ( Packer &  pk) const
inline

Definition at line 251 of file infohash.h.

◆ msgpack_unpack()

template<size_t N>
void dht::Hash< N >::msgpack_unpack ( msgpack::object  o)
inline

Definition at line 257 of file infohash.h.

◆ operator bool()

template<size_t N>
dht::Hash< N >::operator bool ( ) const
inlineexplicit

Definition at line 115 of file infohash.h.

◆ operator!=()

template<size_t N>
bool dht::Hash< N >::operator!= ( const Hash< N > &  h) const
inline

Definition at line 105 of file infohash.h.

◆ operator<()

template<size_t N>
bool dht::Hash< N >::operator< ( const Hash< N > &  o) const
inline

Definition at line 107 of file infohash.h.

◆ operator==()

template<size_t N>
bool dht::Hash< N >::operator== ( const Hash< N > &  h) const
inline

Definition at line 96 of file infohash.h.

◆ operator[]() [1/2]

template<size_t N>
uint8_t & dht::Hash< N >::operator[] ( size_t  index)
inline

Definition at line 125 of file infohash.h.

◆ operator[]() [2/2]

template<size_t N>
const uint8_t & dht::Hash< N >::operator[] ( size_t  index) const
inline

Definition at line 126 of file infohash.h.

◆ setBit()

template<size_t N>
void dht::Hash< N >::setBit ( unsigned  nbit,
bool  b 
)
inline

Definition at line 205 of file infohash.h.

◆ size()

template<size_t N>
size_t dht::Hash< N >::size ( ) const
inline

Definition at line 88 of file infohash.h.

◆ to_c_str()

template<size_t N>
const char * dht::Hash< N >::to_c_str

Definition at line 343 of file infohash.h.

◆ toFloat()

template<size_t N>
double dht::Hash< N >::toFloat ( ) const
inline

Definition at line 212 of file infohash.h.

◆ toString()

template<size_t N>
std::string dht::Hash< N >::toString

Definition at line 356 of file infohash.h.

◆ xorCmp()

template<size_t N>
int dht::Hash< N >::xorCmp ( const Hash< N > &  id1,
const Hash< N > &  id2 
) const
inline

Determine whether id1 or id2 is closer to this

Definition at line 180 of file infohash.h.


The documentation for this class was generated from the following file: