forked from Herdinger/EmulationStation
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
8 changed files
with
1,023 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Large diffs are not rendered by default.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,69 @@ | ||
// ////////////////////////////////////////////////////////// | ||
// crc32.h | ||
// Copyright (c) 2014,2015 Stephan Brumme. All rights reserved. | ||
// see http://create.stephan-brumme.com/disclaimer.html | ||
// | ||
|
||
#pragma once | ||
|
||
#include "hash.h" | ||
#include <string> | ||
|
||
// define fixed size integer types | ||
#ifdef _MSC_VER | ||
// Windows | ||
typedef unsigned __int8 uint8_t; | ||
typedef unsigned __int32 uint32_t; | ||
#else | ||
// GCC | ||
#include <stdint.h> | ||
#endif | ||
|
||
|
||
/// compute CRC32 hash, based on Intel's Slicing-by-8 algorithm | ||
/** Usage: | ||
CRC32 crc32; | ||
std::string myHash = crc32("Hello World"); // std::string | ||
std::string myHash2 = crc32("How are you", 11); // arbitrary data, 11 bytes | ||
// or in a streaming fashion: | ||
CRC32 crc32; | ||
while (more data available) | ||
crc32.add(pointer to fresh data, number of new bytes); | ||
std::string myHash3 = crc32.getHash(); | ||
Note: | ||
You can find code for the faster Slicing-by-16 algorithm on my website, too: | ||
http://create.stephan-brumme.com/crc32/ | ||
Its unrolled version is about twice as fast but its look-up table doubled in size as well. | ||
*/ | ||
class CRC32 : public Hash | ||
{ | ||
public: | ||
/// hash is 4 bytes long | ||
enum { HashBytes = 4 }; | ||
|
||
/// same as reset() | ||
CRC32(); | ||
|
||
/// compute CRC32 of a memory block | ||
std::string operator()(const void* data, size_t numBytes); | ||
/// compute CRC32 of a string, excluding final zero | ||
std::string operator()(const std::string& text); | ||
|
||
/// add arbitrary number of bytes | ||
void add(const void* data, size_t numBytes); | ||
|
||
/// return latest hash as 8 hex characters | ||
std::string getHash(); | ||
/// return latest hash as bytes | ||
void getHash(unsigned char buffer[HashBytes]); | ||
|
||
/// restart | ||
void reset(); | ||
|
||
private: | ||
/// hash | ||
uint32_t m_hash; | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,28 @@ | ||
// ////////////////////////////////////////////////////////// | ||
// hash.h | ||
// Copyright (c) 2014,2015 Stephan Brumme. All rights reserved. | ||
// see http://create.stephan-brumme.com/disclaimer.html | ||
// | ||
|
||
#pragma once | ||
|
||
#include <string> | ||
|
||
/// abstract base class | ||
class Hash | ||
{ | ||
public: | ||
/// compute hash of a memory block | ||
virtual std::string operator()(const void* data, size_t numBytes) = 0; | ||
/// compute hash of a string, excluding final zero | ||
virtual std::string operator()(const std::string& text) = 0; | ||
|
||
/// add arbitrary number of bytes | ||
virtual void add(const void* data, size_t numBytes) = 0; | ||
|
||
/// return latest hash as hex characters | ||
virtual std::string getHash() = 0; | ||
|
||
/// restart | ||
virtual void reset() = 0; | ||
}; |
Oops, something went wrong.