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

#include <adler32.h>

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

Public Member Functions

 crc32 (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 crc
 
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< crc32factory
 

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

Definition at line 44 of file adler32.h.

Constructor & Destructor Documentation

◆ crc32()

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

Definition at line 98 of file adler32.cpp.

98  : base(aName) {
99  crc = ::crc32(0, Z_NULL, 0);
100  }

References crc.

Referenced by update().

Here is the caller graph for this function:

Member Function Documentation

◆ finish()

void checksum::crc32::finish ( )
overridevirtual

finish calculation ad write to result

Implements checksum::base.

Definition at line 115 of file adler32.cpp.

115  {
116  std::ostringstream hashBuffer;
117  hashBuffer << std::hex << std::setw(2 * 4) << std::setfill('0') << crc;
118  result = hashBuffer.str();
119  }

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

Referenced by parallelFinish().

Here is the caller graph for this function:

◆ parallelFinish()

void checksum::crc32::parallelFinish ( )
overridevirtual

Implements checksum::parallel.

Definition at line 144 of file adler32.cpp.

144  {
145  std::lock_guard<decltype(partialSumsMutex)> lock(partialSumsMutex);
146  for (auto& item : partialSums) {
147  crc = ::crc32_combine(crc, item.second.first, item.second.second);
148  }
149  finish();
150  }

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

Here is the call graph for this function:

◆ parallelizable()

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

Reimplemented from checksum::base.

Definition at line 121 of file adler32.cpp.

121  {
122  return true;
123  }

◆ update() [1/4]

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

proces size many zero bytes

Implements checksum::base.

Definition at line 105 of file adler32.cpp.

105  { // case for block of zeroes
106  for (size_t bytes_done = 0; bytes_done < size;) {
107  auto missing = size - bytes_done;
108  size_t bytes = std::min(missing, block::nullBufferSize());
109 
110  crc = ::crc32(crc, static_cast<const unsigned char*>(block::nullBuffer()), bytes);
111  bytes_done += bytes;
112  }
113  }

References crc, crc32(), block::nullBuffer(), and block::nullBufferSize().

Here is the call graph for this function:

◆ update() [2/4]

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

Implements checksum::parallel.

Definition at line 132 of file adler32.cpp.

132  { // case for block of zeroes
133  auto part = crc;
134  for (size_t bytes_done = 0; bytes_done < size;) {
135  auto missing = size - bytes_done;
136  size_t bytes = std::min(missing, block::nullBufferSize());
137 
138  part = ::crc32(part, static_cast<const unsigned char*>(block::nullBuffer()), bytes);
139  bytes_done += bytes;
140  }
141  std::lock_guard<decltype(partialSumsMutex)> lock(partialSumsMutex);
142  partialSums.emplace(offset, std::pair<uint32_t, size_t>(part, size));
143  }

References crc, crc32(), block::nullBuffer(), block::nullBufferSize(), partialSums, and partialSumsMutex.

Here is the call graph for this function:

◆ update() [3/4]

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

proces size bytes in the block at data

Implements checksum::base.

Definition at line 101 of file adler32.cpp.

101  {
102  crc = ::crc32(crc, reinterpret_cast<const unsigned char*>(data), size);
103  }

References crc, and crc32().

Here is the call graph for this function:

◆ update() [4/4]

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

Implements checksum::parallel.

Definition at line 124 of file adler32.cpp.

124  {
125  auto part =::crc32(crc,
126  reinterpret_cast<const unsigned char*>(data),
127  size);
128  std::lock_guard<decltype(partialSumsMutex)> lock(partialSumsMutex);
129  partialSums.emplace(offset, std::pair<uint32_t, size_t>(part, size));
130  }

References crc, crc32(), partialSums, and partialSumsMutex.

Here is the call graph for this function:

Member Data Documentation

◆ crc

uint32_t checksum::crc32::crc
protected

Definition at line 48 of file adler32.h.

Referenced by crc32(), finish(), parallelFinish(), and update().

◆ factory

factoryTemplate<crc32> checksum::crc32::factory
staticprivate

Definition at line 46 of file adler32.h.

◆ partialSums

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

Definition at line 50 of file adler32.h.

Referenced by parallelFinish(), and update().

◆ partialSumsMutex

std::mutex checksum::crc32::partialSumsMutex
protected

Definition at line 49 of file adler32.h.

Referenced by parallelFinish(), and update().


The documentation for this class was generated from the following files:
block::nullBuffer
static const void * nullBuffer()
Definition: block.cpp:37
checksum::crc32::crc32
crc32(const std::string &name)
Definition: adler32.cpp:98
checksum::crc32::crc
uint32_t crc
Definition: adler32.h:48
checksum::crc32::partialSumsMutex
std::mutex partialSumsMutex
Definition: adler32.h:49
checksum::base::base
base(const std::string &aName)
Definition: checksumBase.h:40
checksum::crc32::partialSums
std::map< size_t, std::pair< uint32_t, size_t > > partialSums
Definition: adler32.h:50
block::nullBufferSize
static size_t nullBufferSize()
Definition: block.cpp:34
checksum::crc32::finish
void finish() override
finish calculation ad write to result
Definition: adler32.cpp:115
checksum::base::result
std::string result
Definition: checksumBase.h:38