Thrill  0.1
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
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 51 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

using high_type = HighType

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

Definition at line 57 of file uint_types.hpp.

using low_type = uint32_t

lower part type, always 32-bit

Definition at line 55 of file uint_types.hpp.

Constructor & Destructor Documentation

uint_pair ( )
inline

empty constructor, does not even initialize to zero!

Definition at line 91 of file uint_types.hpp.

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

uint_pair ( const low_type l,
const high_type h 
)
inline

construct unit pair from lower and higher parts.

Definition at line 112 of file uint_types.hpp.

uint_pair ( const uint32_t &  a)
inline

implicit conversion from a simple 32-bit unsigned integer

Definition at line 117 of file uint_types.hpp.

uint_pair ( const int32_t &  a)
inline

implicit conversion from a simple 32-bit signed integer

Definition at line 122 of file uint_types.hpp.

References uint_pair< HighType >::low.

uint_pair ( const uint64_t &  a)
inline

implicit conversion from an uint64_t (unsigned long long)

Definition at line 132 of file uint_types.hpp.

Member Function Documentation

static high_type high_max ( )
inlinestaticprivate

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

Definition at line 75 of file uint_types.hpp.

static low_type low_max ( )
inlinestaticprivate

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

Definition at line 66 of file uint_types.hpp.

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

static uint_pair max ( )
inlinestatic

return an uint_pair instance containing the largest value possible

Definition at line 239 of file uint_types.hpp.

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

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

static uint_pair min ( )
inlinestatic

return an uint_pair instance containing the smallest value possible

Definition at line 230 of file uint_types.hpp.

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

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

operator uint64_t ( ) const
inline

implicit cast to an unsigned long long

Definition at line 147 of file uint_types.hpp.

References uint_pair< HighType >::ull().

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

inequality checking operator

Definition at line 194 of file uint_types.hpp.

References uint_pair< HighType >::high, and uint_pair< HighType >::low.

uint_pair& operator++ ( )
inline

prefix increment operator (directly manipulates the integer parts)

Definition at line 159 of file uint_types.hpp.

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

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

addition operator (uses 64-bit arithmetic)

Definition at line 179 of file uint_types.hpp.

uint_pair& operator-- ( )
inline

prefix decrement operator (directly manipulates the integer parts)

Definition at line 169 of file uint_types.hpp.

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

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

less-than comparison operator

Definition at line 200 of file uint_types.hpp.

References uint_pair< HighType >::high, and uint_pair< HighType >::low.

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

less-or-equal comparison operator

Definition at line 206 of file uint_types.hpp.

References uint_pair< HighType >::high, and uint_pair< HighType >::low.

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

equality checking operator

Definition at line 188 of file uint_types.hpp.

References uint_pair< HighType >::high, and uint_pair< HighType >::low.

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

greater comparison operator

Definition at line 212 of file uint_types.hpp.

References uint_pair< HighType >::high, and uint_pair< HighType >::low.

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

greater-or-equal comparison operator

Definition at line 218 of file uint_types.hpp.

References uint_pair< HighType >::high, and uint_pair< HighType >::low.

uint64_t u64 ( ) const
inline

return the number as a uint64_t

Definition at line 153 of file uint_types.hpp.

References uint_pair< HighType >::high, uint_pair< HighType >::low, and uint_pair< HighType >::low_bits.

uint64_t ull ( ) const
inline

return the number as an uint64_t (unsigned long long)

Definition at line 141 of file uint_types.hpp.

References uint_pair< HighType >::high, uint_pair< HighType >::low, and uint_pair< HighType >::low_bits.

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

Friends And Related Function Documentation

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 224 of file uint_types.hpp.

Member Data Documentation

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

number of bytes in uint_pair

Definition at line 88 of file uint_types.hpp.

const size_t digits = low_bits + high_bits
static

number of binary digits (bits) in uint_pair

Definition at line 85 of file uint_types.hpp.

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 81 of file uint_types.hpp.

Referenced by operator uint64_t().

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 72 of file uint_types.hpp.

Referenced by operator uint64_t(), uint_pair< HighType >::u64(), and uint_pair< HighType >::ull().


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