Low-Level Abstraction of Memory Access
BitPackedInt.hpp File Reference
#include "../Core.hpp"
#include "../ProxyRefOpMixin.hpp"
#include "Common.hpp"
#include <climits>
#include <type_traits>
+ Include dependency graph for BitPackedInt.hpp:
+ This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  llama::mapping::internal::BitPackedIntRef< Integral, StoredIntegralCV, VHBits, SizeType, SignBit >
 
struct  llama::mapping::internal::BitPackedIntCommon< TArrayExtents, TRecordDim, Bits, SignBit, TLinearizeArrayIndexFunctor, TStoredIntegral >
 
struct  llama::mapping::BitPackedIntSoA< TArrayExtents, TRecordDim, Bits, SignBit, TLinearizeArrayIndexFunctor, TStoredIntegral >
 
struct  llama::mapping::BindBitPackedIntSoA< Bits, SignBit, LinearizeArrayIndexFunctor, StoredIntegral >
 
struct  llama::mapping::BitPackedIntAoS< TArrayExtents, TRecordDim, Bits, SignBit, TLinearizeArrayIndexFunctor, PermuteFields, TStoredIntegral >
 
struct  llama::mapping::BindBitPackedIntAoS< Bits, SignBit, LinearizeArrayIndexFunctor, PermuteFields, StoredIntegral >
 

Namespaces

 llama
 
 llama::mapping
 
 llama::mapping::internal
 

Typedefs

template<typename A , typename B >
using llama::mapping::internal::HasLargerSize = mp_bool< sizeof(A)< sizeof(B)>
 
template<typename RecordDim >
using llama::mapping::internal::LargestIntegral = mp_max_element< FlatRecordDim< RecordDim >, HasLargerSize >
 
template<typename RecordDim >
using llama::mapping::internal::StoredUnsignedFor = std::conditional_t<(sizeof(LargestIntegral< RecordDim >) > sizeof(std::uint32_t)), std::uint64_t, std::uint32_t >
 

Enumerations

enum class  llama::mapping::SignBit {
  llama::mapping::Keep ,
  llama::mapping::Discard
}
 

Functions

template<typename Integral >
constexpr auto llama::mapping::internal::makeMask (Integral bits) -> Integral
 
template<bool KeepSignBit, typename Integral , typename StoredIntegral >
constexpr auto llama::mapping::internal::bitunpack (const StoredIntegral *ptr, StoredIntegral bitOffset, StoredIntegral bitCount) -> Integral
 
template<bool KeepSignBit, typename StoredIntegral , typename Integral >
constexpr void llama::mapping::internal::bitpack (StoredIntegral *ptr, StoredIntegral bitOffset, StoredIntegral bitCount, Integral value)
 
template<typename Integral , typename StoredIntegral >
constexpr auto llama::mapping::internal::bitunpack1 (const StoredIntegral *ptr, StoredIntegral bitOffset) -> Integral
 
template<typename StoredIntegral , typename Integral >
constexpr void llama::mapping::internal::bitpack1 (StoredIntegral *ptr, StoredIntegral bitOffset, Integral value)
 

Variables

template<typename Mapping >
constexpr bool llama::mapping::isBitPackedIntSoA = false
 
template<typename ArrayExtents , typename RecordDim , typename Bits , SignBit SignBit, typename LinearizeArrayIndexFunctor , typename StoredIntegral >
constexpr bool llama::mapping::isBitPackedIntSoA< BitPackedIntSoA< ArrayExtents, RecordDim, Bits, SignBit, LinearizeArrayIndexFunctor, StoredIntegral > > = true
 
template<typename Mapping >
constexpr bool llama::mapping::isBitPackedIntAoS = false
 
template<typename ArrayExtents , typename RecordDim , typename Bits , SignBit SignBit, typename LinearizeArrayIndexFunctor , template< typename > typename PermuteFields, typename StoredIntegral >
constexpr bool llama::mapping::isBitPackedIntAoS< BitPackedIntAoS< ArrayExtents, RecordDim, Bits, SignBit, LinearizeArrayIndexFunctor, PermuteFields, StoredIntegral > > = true