Thrill  0.1
uint_pair< HighType > Class Template Reference

Detailed Description

template<typename HighType>
class foxxll::uint_pair< HighType >

Construct an 40-bit or 48-bit unsigned integer stored in five or six bytes.

The purpose of this class is to provide integers with smaller data storage footprints when more than 32-bit, but less than 64-bit indexes are needed. This is commonly the case for storing file offsets and indexes. Here smaller types currently suffice for files < 1 TiB or < 16 TiB.

The class combines a 32-bit integer with a HighType (either 8-bit or 16-bit) to get a larger type. Only unsigned values are supported, which fits the general application of file offsets.

Calculation in uint_pair are generally done by transforming everything to 64-bit data type, so that 64-bit register arithmetic can be used. The exception here is increment and decrement, which is done directly on the lower/higher part. Not all arithmetic operations are supported, patches welcome if you really need the operations.

Definition at line 53 of file uint_types.hpp.

#include <uint_types.hpp>

Public Types

using high_type = HighType
 higher part type, currently either 8-bit or 16-bit More...
 
using low_type = uint32_t
 lower part type, always 32-bit More...
 

Public Member Functions

 uint_pair ()
 empty constructor, does not even initialize to zero! More...
 
 uint_pair (const low_type &l, const high_type &h)
 construct unit pair from lower and higher parts. More...
 
 uint_pair (const uint32_t &a)
 implicit conversion from a simple 32-bit unsigned integer More...
 
 uint_pair (const int32_t &a)
 implicit conversion from a simple 32-bit signed integer More...
 
 uint_pair (const uint64_t &a)
 implicit conversion from an uint64_t (unsigned long long) More...
 
 operator uint64_t () const
 implicit cast to an unsigned long long More...
 
bool operator!= (const uint_pair &b) const
 inequality checking operator More...
 
uint_pairoperator++ ()
 prefix increment operator (directly manipulates the integer parts) More...
 
uint_pairoperator+= (const uint_pair &b)
 addition operator (uses 64-bit arithmetic) More...
 
uint_pairoperator-- ()
 prefix decrement operator (directly manipulates the integer parts) More...
 
bool operator< (const uint_pair &b) const
 less-than comparison operator More...
 
bool operator<= (const uint_pair &b) const
 less-or-equal comparison operator More...
 
bool operator== (const uint_pair &b) const
 equality checking operator More...
 
bool operator> (const uint_pair &b) const
 greater comparison operator More...
 
bool operator>= (const uint_pair &b) const
 greater-or-equal comparison operator More...
 
uint64_t u64 () const
 return the number as a uint64_t More...
 
uint64_t ull () const
 return the number as an uint64_t (unsigned long long) More...
 

Static Public Member Functions

static uint_pair max ()
 return an uint_pair instance containing the largest value possible More...
 
static uint_pair min ()
 return an uint_pair instance containing the smallest value possible More...
 

Static Public Attributes

static const size_t bytes = sizeof(low_type) + sizeof(high_type)
 number of bytes in uint_pair More...
 
static const size_t digits = low_bits + high_bits
 number of binary digits (bits) in uint_pair More...
 

Static Private Member Functions

static high_type high_max ()
 return highest value storable in higher part, also used as a mask. More...
 
static low_type low_max ()
 return highest value storable in lower part, also used as a mask. More...
 

Private Attributes

high_type high
 member containing higher significant integer value More...
 
low_type low
 member containing lower significant integer value More...
 

Static Private Attributes

static const size_t high_bits = 8 * sizeof(high_type)
 number of bits in the higher integer part, used a bit shift value. More...
 
static const size_t low_bits = 8 * sizeof(low_type)
 number of bits in the lower integer part, used a bit shift value. More...
 

Friends

std::ostream & operator<< (std::ostream &os, const uint_pair &a)
 make a uint_pair outputtable via iostreams, using unsigned long long. More...
 

Member Typedef Documentation

◆ high_type

using high_type = HighType

higher part type, currently either 8-bit or 16-bit

Definition at line 59 of file uint_types.hpp.

◆ low_type

using low_type = uint32_t

lower part type, always 32-bit

Definition at line 57 of file uint_types.hpp.

Constructor & Destructor Documentation

◆ uint_pair() [1/5]

uint_pair ( )
inline

empty constructor, does not even initialize to zero!

Definition at line 93 of file uint_types.hpp.

Referenced by uint_pair< HighType >::max(), and uint_pair< HighType >::min().

◆ uint_pair() [2/5]

uint_pair ( const low_type l,
const high_type h 
)
inline

construct unit pair from lower and higher parts.

Definition at line 114 of file uint_types.hpp.

◆ uint_pair() [3/5]

uint_pair ( const uint32_t &  a)
inline

implicit conversion from a simple 32-bit unsigned integer

Definition at line 119 of file uint_types.hpp.

◆ uint_pair() [4/5]

uint_pair ( const int32_t &  a)
inline

implicit conversion from a simple 32-bit signed integer

Definition at line 124 of file uint_types.hpp.

◆ uint_pair() [5/5]

uint_pair ( const uint64_t &  a)
inline

implicit conversion from an uint64_t (unsigned long long)

Definition at line 134 of file uint_types.hpp.

Member Function Documentation

◆ high_max()

static high_type high_max ( )
inlinestaticprivate

return highest value storable in higher part, also used as a mask.

Definition at line 77 of file uint_types.hpp.

Referenced by operator!=().

◆ low_max()

static low_type low_max ( )
inlinestaticprivate

return highest value storable in lower part, also used as a mask.

Definition at line 68 of file uint_types.hpp.

Referenced by operator!=(), uint_pair< HighType >::operator++(), and uint_pair< HighType >::operator--().

◆ max()

static uint_pair max ( )
inlinestatic

return an uint_pair instance containing the largest value possible

Definition at line 241 of file uint_types.hpp.

References foxxll::__attribute__(), max(), and uint_pair< HighType >::uint_pair().

Referenced by numeric_limits< foxxll::uint_pair< HighType > >::max().

◆ min()

static uint_pair min ( )
inlinestatic

return an uint_pair instance containing the smallest value possible

Definition at line 232 of file uint_types.hpp.

References min(), and uint_pair< HighType >::uint_pair().

Referenced by numeric_limits< foxxll::uint_pair< HighType > >::lowest(), and numeric_limits< foxxll::uint_pair< HighType > >::min().

◆ operator uint64_t()

operator uint64_t ( ) const
inline

implicit cast to an unsigned long long

Definition at line 149 of file uint_types.hpp.

References uint_pair< HighType >::ull().

◆ operator!=()

bool operator!= ( const uint_pair< HighType > &  b) const
inline

inequality checking operator

Definition at line 196 of file uint_types.hpp.

◆ operator++()

uint_pair& operator++ ( )
inline

prefix increment operator (directly manipulates the integer parts)

Definition at line 161 of file uint_types.hpp.

References uint_pair< HighType >::high, uint_pair< HighType >::low_max(), and TLX_UNLIKELY.

◆ operator+=()

uint_pair& operator+= ( const uint_pair< HighType > &  b)
inline

addition operator (uses 64-bit arithmetic)

Definition at line 181 of file uint_types.hpp.

◆ operator--()

uint_pair& operator-- ( )
inline

prefix decrement operator (directly manipulates the integer parts)

Definition at line 171 of file uint_types.hpp.

References uint_pair< HighType >::high, uint_pair< HighType >::low_max(), and TLX_UNLIKELY.

◆ operator<()

bool operator< ( const uint_pair< HighType > &  b) const
inline

less-than comparison operator

Definition at line 202 of file uint_types.hpp.

◆ operator<=()

bool operator<= ( const uint_pair< HighType > &  b) const
inline

less-or-equal comparison operator

Definition at line 208 of file uint_types.hpp.

◆ operator==()

bool operator== ( const uint_pair< HighType > &  b) const
inline

equality checking operator

Definition at line 190 of file uint_types.hpp.

◆ operator>()

bool operator> ( const uint_pair< HighType > &  b) const
inline

greater comparison operator

Definition at line 214 of file uint_types.hpp.

◆ operator>=()

bool operator>= ( const uint_pair< HighType > &  b) const
inline

greater-or-equal comparison operator

Definition at line 220 of file uint_types.hpp.

◆ u64()

uint64_t u64 ( ) const
inline

return the number as a uint64_t

Definition at line 155 of file uint_types.hpp.

◆ ull()

uint64_t ull ( ) const
inline

return the number as an uint64_t (unsigned long long)

Definition at line 143 of file uint_types.hpp.

References uint_pair< HighType >::high.

Referenced by uint_pair< HighType >::operator uint64_t().

Friends And Related Function Documentation

◆ operator<<

std::ostream& operator<< ( std::ostream &  os,
const uint_pair< HighType > &  a 
)
friend

make a uint_pair outputtable via iostreams, using unsigned long long.

Definition at line 226 of file uint_types.hpp.

Member Data Documentation

◆ bytes

const size_t bytes = sizeof(low_type) + sizeof(high_type)
static

number of bytes in uint_pair

Definition at line 90 of file uint_types.hpp.

◆ digits

const size_t digits = low_bits + high_bits
static

number of binary digits (bits) in uint_pair

Definition at line 87 of file uint_types.hpp.

◆ high

high_type high
private

member containing higher significant integer value

Definition at line 65 of file uint_types.hpp.

Referenced by uint_pair< HighType >::operator++(), operator--(), uint_pair< HighType >::operator--(), and uint_pair< HighType >::ull().

◆ high_bits

const size_t high_bits = 8 * sizeof(high_type)
staticprivate

number of bits in the higher integer part, used a bit shift value.

Definition at line 83 of file uint_types.hpp.

◆ low

low_type low
private

member containing lower significant integer value

Definition at line 63 of file uint_types.hpp.

Referenced by operator!=().

◆ low_bits

const size_t low_bits = 8 * sizeof(low_type)
staticprivate

number of bits in the lower integer part, used a bit shift value.

Definition at line 74 of file uint_types.hpp.

Referenced by operator!=().


The documentation for this class was generated from the following file: