//===- llvm/ADT/SmallBitVector.h - 'Normally small' bit vectors -*- C++ -*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// /// /// \file /// This file implements the SmallBitVector class. /// //===----------------------------------------------------------------------===// #ifndef LLVM_ADT_SMALLBITVECTOR_H #define LLVM_ADT_SMALLBITVECTOR_H #include "llvm/ADT/BitVector.h" #include "llvm/ADT/iterator_range.h" #include "llvm/Support/MathExtras.h" #include <algorithm> #include <cassert> #include <climits> #include <cstddef> #include <cstdint> #include <limits> #include <utility> namespace llvm { /// This is a 'bitvector' (really, a variable-sized bit array), optimized for /// the case when the array is small. It contains one pointer-sized field, which /// is directly used as a plain collection of bits when possible, or as a /// pointer to a larger heap-allocated array when necessary. This allows normal /// "small" cases to be fast without losing generality for large inputs. class SmallBitVector { … }; inline SmallBitVector operator&(const SmallBitVector &LHS, const SmallBitVector &RHS) { … } inline SmallBitVector operator|(const SmallBitVector &LHS, const SmallBitVector &RHS) { … } inline SmallBitVector operator^(const SmallBitVector &LHS, const SmallBitVector &RHS) { … } template <> struct DenseMapInfo<SmallBitVector> { … }; } // end namespace llvm namespace std { /// Implement std::swap in terms of BitVector swap. inline void swap(llvm::SmallBitVector &LHS, llvm::SmallBitVector &RHS) { … } } // end namespace std #endif // LLVM_ADT_SMALLBITVECTOR_H