diff options
author | pkalinnikov <pkalinnikov@yandex-team.ru> | 2022-02-10 16:50:15 +0300 |
---|---|---|
committer | Daniil Cherednik <dcherednik@yandex-team.ru> | 2022-02-10 16:50:15 +0300 |
commit | d507a9366b2ab84411afe63fea9fba5498891e1b (patch) | |
tree | 5d5cb817648f650d76cf1076100726fd9b8448e8 /library/cpp/containers/bitseq/traits.h | |
parent | 9e33e026829d561d6fd46d72b88c367952e08075 (diff) | |
download | ydb-d507a9366b2ab84411afe63fea9fba5498891e1b.tar.gz |
Restoring authorship annotation for <pkalinnikov@yandex-team.ru>. Commit 2 of 2.
Diffstat (limited to 'library/cpp/containers/bitseq/traits.h')
-rw-r--r-- | library/cpp/containers/bitseq/traits.h | 46 |
1 files changed, 23 insertions, 23 deletions
diff --git a/library/cpp/containers/bitseq/traits.h b/library/cpp/containers/bitseq/traits.h index 9136d6e972..2330b1b4f2 100644 --- a/library/cpp/containers/bitseq/traits.h +++ b/library/cpp/containers/bitseq/traits.h @@ -1,30 +1,30 @@ -#pragma once - +#pragma once + #include <util/generic/bitops.h> -#include <util/generic/typetraits.h> +#include <util/generic/typetraits.h> #include <util/system/yassert.h> - -template <typename TWord> -struct TBitSeqTraits { + +template <typename TWord> +struct TBitSeqTraits { static constexpr ui8 NumBits = CHAR_BIT * sizeof(TWord); static constexpr TWord ModMask = static_cast<TWord>(NumBits - 1); static constexpr TWord DivShift = MostSignificantBitCT(NumBits); - - static inline TWord ElemMask(ui8 count) { - // NOTE: Shifting by the type's length is UB, so we need this workaround. + + static inline TWord ElemMask(ui8 count) { + // NOTE: Shifting by the type's length is UB, so we need this workaround. if (Y_LIKELY(count)) - return TWord(-1) >> (NumBits - count); - return 0; - } - - static inline TWord BitMask(ui8 pos) { - return TWord(1) << pos; - } - - static size_t NumOfWords(size_t bits) { - return (bits + NumBits - 1) >> DivShift; - } - + return TWord(-1) >> (NumBits - count); + return 0; + } + + static inline TWord BitMask(ui8 pos) { + return TWord(1) << pos; + } + + static size_t NumOfWords(size_t bits) { + return (bits + NumBits - 1) >> DivShift; + } + static bool Test(const TWord* data, ui64 pos, ui64 size) { Y_ASSERT(pos < size); return data[pos >> DivShift] & BitMask(pos & ModMask); @@ -45,5 +45,5 @@ struct TBitSeqTraits { } static_assert(std::is_unsigned<TWord>::value, "Expected std::is_unsigned<T>::value."); - static_assert((NumBits & (NumBits - 1)) == 0, "NumBits should be a power of 2."); -}; + static_assert((NumBits & (NumBits - 1)) == 0, "NumBits should be a power of 2."); +}; |