ewmscp  ..
Public Member Functions | Protected Attributes | Static Private Attributes | List of all members
checksum::adler32 Class Reference

class to calculate adler32 sum. More...

#include <adler32.h>

Inheritance diagram for checksum::adler32:
[legend]
Collaboration diagram for checksum::adler32:
[legend]

Public Member Functions

 adler32 (const std::string &name)
 
void update (void *data, size_t size) override
 proces size bytes in the block at data More...
 
void update (size_t size) override
 proces size many zero bytes More...
 
void finish () override
 finish calculation ad write to result More...
 
bool parallelizable () const override
 
void update (void *data, size_t size, size_t offset) override
 
void update (size_t size, size_t offset) override
 
void parallelFinish () override
 
- Public Member Functions inherited from checksum::base
virtual ~base ()=default
 
const std::string & getName () const
 
const std::string & getResult () const
 
void setExpectedResult (const std::string &expectedResult)
 
const std::string & getExpectedResult () const
 
bool checkExpectation () const
 

Protected Attributes

uint32_t adler
 
std::mutex partialSumsMutex
 
std::map< size_t, std::pair< uint32_t, size_t > > partialSums
 
- Protected Attributes inherited from checksum::base
const std::string & name
 
std::string result
 
std::string expected
 

Static Private Attributes

static factoryTemplate< adler32factory
 

Additional Inherited Members

- Static Public Member Functions inherited from checksum::base
static factoryClassnewFactory (const std::string &aName)
 
template<class T >
static void addAllowedNamesToOption (T &option)
 
- Protected Member Functions inherited from checksum::base
 base (const std::string &aName)
 
- Static Protected Member Functions inherited from checksum::base
static std::map< std::string, factoryClass * > & getFactoryMap ()
 

Detailed Description

class to calculate adler32 sum.

wrapper around zlib

Definition at line 12 of file adler32.h.

Constructor & Destructor Documentation

◆ adler32()

checksum::adler32::adler32 ( const std::string &  name)

Definition at line 11 of file adler32.cpp.

11  : base(aName) {
12  adler = ::adler32(0, Z_NULL, 0);
13  }

References adler.

Referenced by update(), and checksum::adler32noOpt::update().

Here is the caller graph for this function:

Member Function Documentation

◆ finish()

void checksum::adler32::finish ( )
overridevirtual

finish calculation ad write to result

Implements checksum::base.

Definition at line 25 of file adler32.cpp.

25  {
26  std::ostringstream hashBuffer;
27  hashBuffer << std::hex << std::setw(2 * 4) << std::setfill('0') << adler;
28  result = hashBuffer.str();
29  }

References adler, and checksum::base::result.

Referenced by parallelFinish().

Here is the caller graph for this function:

◆ parallelFinish()

void checksum::adler32::parallelFinish ( )
overridevirtual

Implements checksum::parallel.

Definition at line 49 of file adler32.cpp.

49  {
50  std::lock_guard<decltype(partialSumsMutex)> lock(partialSumsMutex);
51  for (auto& item : partialSums) {
52  adler = ::adler32_combine(adler, item.second.first, item.second.second);
53  }
54  finish();
55  }

References adler, finish(), partialSums, and partialSumsMutex.

Here is the call graph for this function:

◆ parallelizable()

bool checksum::adler32::parallelizable ( ) const
overridevirtual

Reimplemented from checksum::base.

Definition at line 32 of file adler32.cpp.

32  {
33  return true;
34  }

◆ update() [1/4]

void checksum::adler32::update ( size_t  size)
overridevirtual

proces size many zero bytes

Implements checksum::base.

Reimplemented in checksum::adler32noOpt.

Definition at line 18 of file adler32.cpp.

18  { // case for block of zeroes
19  auto A = adler & 0x0000ffff;
20  auto B = adler >> 16;
21  B = (B + A * size ) % 65521;
22  adler = A | (B << 16);
23  }

References adler.

◆ update() [2/4]

void checksum::adler32::update ( size_t  size,
size_t  offset 
)
overridevirtual

Implements checksum::parallel.

Reimplemented in checksum::adler32noOpt.

Definition at line 42 of file adler32.cpp.

42  {
43  auto A = adler & 0x0000ffff;
44  auto B = adler >> 16;
45  B = (B + A * size ) % 65521;
46  std::lock_guard<decltype(partialSumsMutex)> lock(partialSumsMutex);
47  partialSums.emplace(offset, std::pair<uint32_t, size_t>( A | (B << 16), size));
48  }

References adler, partialSums, and partialSumsMutex.

◆ update() [3/4]

void checksum::adler32::update ( void *  data,
size_t  size 
)
overridevirtual

proces size bytes in the block at data

Implements checksum::base.

Reimplemented in checksum::adler32noOpt.

Definition at line 14 of file adler32.cpp.

14  {
15  adler = ::adler32(adler, reinterpret_cast<const unsigned char*>(data), size);
16  }

References adler, and adler32().

Here is the call graph for this function:

◆ update() [4/4]

void checksum::adler32::update ( void *  data,
size_t  size,
size_t  offset 
)
overridevirtual

Implements checksum::parallel.

Reimplemented in checksum::adler32noOpt.

Definition at line 35 of file adler32.cpp.

35  {
36  auto part = ::adler32(adler,
37  reinterpret_cast<const unsigned char*>(data),
38  size);
39  std::lock_guard<decltype(partialSumsMutex)> lock(partialSumsMutex);
40  partialSums.emplace(offset, std::pair<uint32_t, size_t>(part, size));
41  }

References adler, adler32(), partialSums, and partialSumsMutex.

Here is the call graph for this function:

Member Data Documentation

◆ adler

uint32_t checksum::adler32::adler
protected

Definition at line 16 of file adler32.h.

Referenced by adler32(), finish(), parallelFinish(), update(), and checksum::adler32noOpt::update().

◆ factory

factoryTemplate<adler32> checksum::adler32::factory
staticprivate

Definition at line 14 of file adler32.h.

◆ partialSums

std::map<size_t, std::pair<uint32_t, size_t> > checksum::adler32::partialSums
protected

Definition at line 18 of file adler32.h.

Referenced by parallelFinish(), update(), and checksum::adler32noOpt::update().

◆ partialSumsMutex

std::mutex checksum::adler32::partialSumsMutex
protected

Definition at line 17 of file adler32.h.

Referenced by parallelFinish(), update(), and checksum::adler32noOpt::update().


The documentation for this class was generated from the following files:
checksum::adler32::partialSumsMutex
std::mutex partialSumsMutex
Definition: adler32.h:17
checksum::adler32::adler32
adler32(const std::string &name)
Definition: adler32.cpp:11
checksum::base::base
base(const std::string &aName)
Definition: checksumBase.h:40
checksum::adler32::adler
uint32_t adler
Definition: adler32.h:16
checksum::adler32::finish
void finish() override
finish calculation ad write to result
Definition: adler32.cpp:25
checksum::base::result
std::string result
Definition: checksumBase.h:38
checksum::adler32::partialSums
std::map< size_t, std::pair< uint32_t, size_t > > partialSums
Definition: adler32.h:18