diff --git a/node/Address.hpp b/node/Address.hpp index 66fa9fc17..17d617cc1 100644 --- a/node/Address.hpp +++ b/node/Address.hpp @@ -116,90 +116,6 @@ public: ZT_INLINE bool operator>=(const Address &a) const noexcept { return _a >= a._a; } ZT_INLINE bool operator<=(const Address &a) const noexcept { return _a <= a._a; } -#if 0 - /** - * Create a list of the first N bits of a list of unique addresses with N as the minimum unique size - * - * The list is stored in a space-efficient packed bit format. - * - * @param start Starting Address iterator/pointer - * @param end Ending Address iterator/pointer - * @param list Pointer to location to write list - * @param listCapacityBytes Number of bytes available for list - * @return Number of bytes written or -1 on overflow or other error - * @tparam I Input iterator type - */ - template - static inline int createMinPrefixList(I start,I end,uint8_t *list,const int listCapacityBytes) - { - std::vector
sortedAddrs(start,end); - if (sortedAddrs.empty()) - return 0; - if (listCapacityBytes == 0) - return -1; - std::sort(sortedAddrs.begin(),sortedAddrs.end()); - - unsigned int bits = (unsigned int)fmaxf(log2f((float)(sortedAddrs.size() * 2)),3.0F); - uint64_t mask; -try_additional_bits: { - mask = 0xffffffffffffffffULL >> (64 - bits); - std::vector
::iterator a(sortedAddrs.begin()); - uint64_t aa = *(a++) & mask; - aa |= (uint64_t)(aa == 0); - uint64_t lastMaskedAddress = aa; - while (a != sortedAddrs.end()) { - aa = *(a++) & mask; - aa |= (uint64_t)(aa == 0); - if (aa == lastMaskedAddress) { - ++bits; - goto try_additional_bits; - } - lastMaskedAddress = aa; - } - } - - int l = 0; - unsigned int bitPtr = 0; - for(I a(start);a!=end;) { - uint64_t aa = *(a++) & mask; - aa |= (uint64_t)(aa == 0); - unsigned int br = bits; - if (bitPtr > 0) { - unsigned int w = 8 - bitPtr; - if (w > br) w = br; - list[l] = (list[l] << w) | (((uint8_t)aa) & (0xff >> (8 - w))); - bitPtr += w; - if (bitPtr == 8) { - bitPtr = 0; - if (l >= listCapacityBytes) - return -1; - ++l; - } - aa >>= w; - br -= w; - } - while (br >= 8) { - if (l >= listCapacityBytes) - return -1; - list[l++] = (uint8_t)aa; - br -= 8; - aa >>= 8; - } - if (br > 0) { - list[l] = (uint8_t)aa; - bitPtr = br; - } - } - if (bitPtr > 0) { - if (l >= listCapacityBytes) - return -1; - ++l; - } - - return l; - } -#endif - private: uint64_t _a; };