/usr/local/lib64/python3.6/site-packages/torch/include/c10/util
NameSizeModeActions
accumulate.h42050644editdlrm
AlignOf.h48350644editdlrm
Array.h113540644editdlrm
ArrayRef.h90580644editdlrm
Backtrace.h3640644editdlrm
BFloat16-inl.h92220644editdlrm
BFloat16-math.h52170644editdlrm
BFloat16.h23720644editdlrm
Bitset.h34140644editdlrm
C++17.h133290644editdlrm
complex.h175420644editdlrm
complex_math.h109020644editdlrm
complex_utils.h9580644editdlrm
ConstexprCrc.h66330644editdlrm
copysign.h8660644editdlrm
DeadlockDetection.h19200644editdlrm
Deprecated.h35790644editdlrm
either.h64230644editdlrm
env.h8350644editdlrm
Exception.h247230644editdlrm
ExclusivelyOwned.h47590644editdlrm
Flags.h100560644editdlrm
flat_hash_map.h616550644editdlrm
FunctionRef.h23010644editdlrm
Half-inl.h86740644editdlrm
Half.h189650644editdlrm
hash.h50840644editdlrm
IdWrapper.h23480644editdlrm
intrusive_ptr.h355630644editdlrm
in_place.h3500644editdlrm
irange.h26790644editdlrm
LeftRight.h60160644editdlrm
llvmMathExtras.h291680644editdlrm
Logging.h112560644editdlrm
logging_is_google_glog.h20310644editdlrm
logging_is_not_google_glog.h82710644editdlrm
MathConstants.h8580644editdlrm
math_compat.h72960644editdlrm
MaybeOwned.h66890644editdlrm
Metaprogramming.h152880644editdlrm
numa.h6960644editdlrm
Optional.h355920644editdlrm
order_preserving_flat_hash_map.h654820644editdlrm
overloaded.h7090644editdlrm
python_stub.h560644editdlrm
qint8.h4720644editdlrm
qint32.h3190644editdlrm
quint4x2.h3660644editdlrm
quint8.h3200644editdlrm
Registry.h122420644editdlrm
reverse_iterator.h87960644editdlrm
ScopeExit.h13450644editdlrm
signal_handler.h31540644editdlrm
SmallBuffer.h12430644editdlrm
SmallVector.h344560644editdlrm
sparse_bitset.h265110644editdlrm
StringUtil.h45380644editdlrm
string_utils.h39890644editdlrm
string_view.h201890644editdlrm
tempfile.h60290644editdlrm
ThreadLocal.h38830644editdlrm
ThreadLocalDebugInfo.h26030644editdlrm
thread_name.h1480644editdlrm
Type.h6070644editdlrm
TypeCast.h69720644editdlrm
typeid.h187930644editdlrm
TypeIndex.h52510644editdlrm
TypeList.h169010644editdlrm
TypeTraits.h53680644editdlrm
Unicode.h2950644editdlrm
UniqueVoidPtr.h41170644editdlrm
Unroll.h6670644editdlrm
variant.h951820644editdlrm
win32-headers.h8580644editdlrm
Edit: /usr/local/lib64/python3.6/site-packages/torch/include/c10/util/Bitset.h (3414B)
#pragma once #include #include #include #if defined(_MSC_VER) #include #endif namespace c10 { namespace utils { /** * This is a simple bitset class with sizeof(long long int) bits. * You can set bits, unset bits, query bits by index, * and query for the first set bit. * Before using this class, please also take a look at std::bitset, * which has more functionality and is more generic. It is probably * a better fit for your use case. The sole reason for c10::utils::bitset * to exist is that std::bitset misses a find_first_set() method. */ struct bitset final { private: #if defined(_MSC_VER) // MSVCs _BitScanForward64 expects int64_t using bitset_type = int64_t; #else // POSIX ffsll expects long long int using bitset_type = long long int; #endif public: static constexpr size_t NUM_BITS() { return 8 * sizeof(bitset_type); } constexpr bitset() noexcept : bitset_(0) {} constexpr bitset(const bitset&) noexcept = default; constexpr bitset(bitset&&) noexcept = default; // there is an issure for gcc 5.3.0 when define default function as constexpr // see https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68754. bitset& operator=(const bitset&) noexcept = default; bitset& operator=(bitset&&) noexcept = default; constexpr void set(size_t index) noexcept { bitset_ |= (static_cast(1) << index); } constexpr void unset(size_t index) noexcept { bitset_ &= ~(static_cast(1) << index); } constexpr bool get(size_t index) const noexcept { return bitset_ & (static_cast(1) << index); } constexpr bool is_entirely_unset() const noexcept { return 0 == bitset_; } // Call the given functor with the index of each bit that is set template void for_each_set_bit(Func&& func) const { bitset cur = *this; size_t index = cur.find_first_set(); while (0 != index) { // -1 because find_first_set() is not one-indexed. index -= 1; func(index); cur.unset(index); index = cur.find_first_set(); } } private: // Return the index of the first set bit. The returned index is one-indexed // (i.e. if the very first bit is set, this function returns '1'), and a // return of '0' means that there was no bit set. size_t find_first_set() const { #if defined(_MSC_VER) && defined(_M_X64) unsigned long result; bool has_bits_set = (0 != _BitScanForward64(&result, bitset_)); if (!has_bits_set) { return 0; } return result + 1; #elif defined(_MSC_VER) && defined(_M_IX86) unsigned long result; if (static_cast(bitset_) != 0) { bool has_bits_set = (0 != _BitScanForward(&result, static_cast(bitset_))); if (!has_bits_set) { return 0; } return result + 1; } else { bool has_bits_set = (0 != _BitScanForward(&result, static_cast(bitset_ >> 32))); if (!has_bits_set) { return 32; } return result + 33; } #else return __builtin_ffsll(bitset_); #endif } friend bool operator==(bitset lhs, bitset rhs) noexcept { return lhs.bitset_ == rhs.bitset_; } bitset_type bitset_; }; inline bool operator!=(bitset lhs, bitset rhs) noexcept { return !(lhs == rhs); } } // namespace utils } // namespace c10