ACloudViewer  3.9.4
A Modern Library for 3D Data Processing
e57::BitpackIntegerEncoder< RegisterT > Class Template Reference

#include <Encoder.h>

Inheritance diagram for e57::BitpackIntegerEncoder< RegisterT >:
Collaboration diagram for e57::BitpackIntegerEncoder< RegisterT >:

Public Member Functions

 BitpackIntegerEncoder (bool isScaledInteger, unsigned bytestreamNumber, SourceDestBuffer &sbuf, unsigned outputMaxSize, int64_t minimum, int64_t maximum, double scale, double offset)
 
uint64_t processRecords (size_t recordCount) override
 
bool registerFlushToOutput () override
 
float bitsPerRecord () override
 
void dump (int indent=0, std::ostream &os=std::cout) const override
 
- Public Member Functions inherited from e57::BitpackEncoder
unsigned sourceBufferNextIndex () override
 
uint64_t currentRecordIndex () override
 
size_t outputAvailable () const override
 
void outputRead (char *dest, const size_t byteCount) override
 number of bytes that can be read More...
 
void outputClear () override
 get data from encoder More...
 
void sourceBufferSetNew (std::vector< SourceDestBuffer > &sbufs) override
 
size_t outputGetMaxSize () override
 
void outputSetMaxSize (unsigned byteCount) override
 
- Public Member Functions inherited from e57::Encoder
virtual ~Encoder ()=default
 
unsigned bytestreamNumber () const
 

Protected Attributes

bool isScaledInteger_
 
int64_t minimum_
 
int64_t maximum_
 
double scale_
 
double offset_
 
unsigned bitsPerRecord_
 
uint64_t sourceBitMask_
 
unsigned registerBitsUsed_
 
RegisterT register_
 
- Protected Attributes inherited from e57::BitpackEncoder
std::shared_ptr< SourceDestBufferImplsourceBuffer_
 
std::vector< char > outBuffer_
 
size_t outBufferFirst_
 
size_t outBufferEnd_
 
size_t outBufferAlignmentSize_
 
uint64_t currentRecordIndex_
 
- Protected Attributes inherited from e57::Encoder
unsigned bytestreamNumber_
 

Additional Inherited Members

- Static Public Member Functions inherited from e57::Encoder
static std::shared_ptr< EncoderEncoderFactory (unsigned bytestreamNumber, std::shared_ptr< CompressedVectorNodeImpl > cVector, std::vector< SourceDestBuffer > &sbuf, ustring &codecPath)
 
- Protected Member Functions inherited from e57::BitpackEncoder
 BitpackEncoder (unsigned bytestreamNumber, SourceDestBuffer &sbuf, unsigned outputMaxSize, unsigned alignmentSize)
 ================ More...
 
void outBufferShiftDown ()
 
- Protected Member Functions inherited from e57::Encoder
 Encoder (unsigned bytestreamNumber)
 

Detailed Description

template<typename RegisterT>
class e57::BitpackIntegerEncoder< RegisterT >

Definition at line 145 of file Encoder.h.

Constructor & Destructor Documentation

◆ BitpackIntegerEncoder()

Member Function Documentation

◆ bitsPerRecord()

template<typename RegisterT >
float BitpackIntegerEncoder::bitsPerRecord
overridevirtual

Implements e57::BitpackEncoder.

Definition at line 847 of file Encoder.cpp.

◆ dump()

template<typename RegisterT >
void BitpackIntegerEncoder::dump ( int  indent = 0,
std::ostream &  os = std::cout 
) const
overridevirtual

◆ processRecords()

template<typename RegisterT >
uint64_t BitpackIntegerEncoder::processRecords ( size_t  recordCount)
overridevirtual

Before we add any more, try to shift current contents of outBuffer_ down to beginning of buffer. This leaves outBufferEnd_ at a natural boundary.

Verify that outBufferEnd_ is multiple of sizeof(RegisterT) (so transfers of RegisterT are aligned naturally in memory).

Precalculate exact maximum number of records that will fit in output before overflow.

Number of transfers is the smaller of what was requested and what will fit.

Form the starting address for next available location in outBuffer

Copy bits from sourceBuffer_ to outBuffer_

The parameter isScaledInteger_ determines which version of getNextInt64 gets called

Enforce min/max specification on value

Double check that no bits outside of the mask are set

Mask off upper bits (just in case)

See if uValue bits will fit in register

Have more than one registers worth, fill register, transfer, then fill some more

Before transfer, double check address within bounds

Input will exactly fill register, insert value, then transfer

Before transfer, double check address within bounds

There is extra room in register, insert value, but don't do transfer yet

Update tail of output buffer

Double check end is ok

Update counts of records processed

Implements e57::BitpackEncoder.

Definition at line 657 of file Encoder.cpp.

References e57::binaryString(), e57::E57_ERROR_INTERNAL, e57::E57_ERROR_VALUE_OUT_OF_BOUNDS, E57_EXCEPTION2, QtCompat::endl(), e57::hexString(), min(), offset_, and e57::toString().

◆ registerFlushToOutput()

template<typename RegisterT >
bool BitpackIntegerEncoder::registerFlushToOutput
overridevirtual

If have any used bits in register, transfer to output, padded in MSBits with zeros to RegisterT boundary

Implements e57::BitpackEncoder.

Definition at line 819 of file Encoder.cpp.

References QtCompat::endl().

Member Data Documentation

◆ bitsPerRecord_

template<typename RegisterT >
unsigned e57::BitpackIntegerEncoder< RegisterT >::bitsPerRecord_
protected

◆ isScaledInteger_

template<typename RegisterT >
bool e57::BitpackIntegerEncoder< RegisterT >::isScaledInteger_
protected

◆ maximum_

template<typename RegisterT >
int64_t e57::BitpackIntegerEncoder< RegisterT >::maximum_
protected

◆ minimum_

template<typename RegisterT >
int64_t e57::BitpackIntegerEncoder< RegisterT >::minimum_
protected

◆ offset_

template<typename RegisterT >
double e57::BitpackIntegerEncoder< RegisterT >::offset_
protected

◆ register_

template<typename RegisterT >
RegisterT e57::BitpackIntegerEncoder< RegisterT >::register_
protected

◆ registerBitsUsed_

template<typename RegisterT >
unsigned e57::BitpackIntegerEncoder< RegisterT >::registerBitsUsed_
protected

◆ scale_

template<typename RegisterT >
double e57::BitpackIntegerEncoder< RegisterT >::scale_
protected

◆ sourceBitMask_

template<typename RegisterT >
uint64_t e57::BitpackIntegerEncoder< RegisterT >::sourceBitMask_
protected

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