diff options
author | halcanary <halcanary@google.com> | 2016-04-22 10:40:49 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2016-04-22 10:40:49 -0700 |
commit | 272aa12c63e32c2845cbb5549660c08c31159282 (patch) | |
tree | 4cc02a60f425e974ff5e3148c3d24d4b42e1b84c /src/core | |
parent | 3361e6248b415bb3054b5af6462666f1608e0765 (diff) |
SkMD5: cleanup header and minor refactor
Also: I now define a non-virtual function in terms of a final virtual
function. This reduces the number of actual functions while adding
no overhead.
GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1911363002
Review URL: https://codereview.chromium.org/1911363002
Diffstat (limited to 'src/core')
-rw-r--r-- | src/core/SkMD5.cpp | 10 | ||||
-rw-r--r-- | src/core/SkMD5.h | 37 |
2 files changed, 18 insertions, 29 deletions
diff --git a/src/core/SkMD5.cpp b/src/core/SkMD5.cpp index 725ae55f3f..5c86522a54 100644 --- a/src/core/SkMD5.cpp +++ b/src/core/SkMD5.cpp @@ -8,7 +8,11 @@ * http://www.ietf.org/rfc/rfc1321.txt */ -#include "SkTypes.h" +//The following macros can be defined to affect the MD5 code generated. +//SK_MD5_CLEAR_DATA causes all intermediate state to be overwritten with 0's. +//SK_CPU_LENDIAN allows 32 bit <=> 8 bit conversions without copies (if alligned). +//SK_CPU_FAST_UNALIGNED_ACCESS allows 32 bit <=> 8 bit conversions without copies if SK_CPU_LENDIAN. + #include "SkMD5.h" #include <string.h> @@ -32,7 +36,8 @@ SkMD5::SkMD5() : byteCount(0) { this->state[3] = 0x10325476; } -void SkMD5::update(const uint8_t* input, size_t inputLength) { +bool SkMD5::write(const void* buf, size_t inputLength) { + const uint8_t* input = reinterpret_cast<const uint8_t*>(buf); unsigned int bufferIndex = (unsigned int)(this->byteCount & 0x3F); unsigned int bufferAvailable = 64 - bufferIndex; @@ -58,6 +63,7 @@ void SkMD5::update(const uint8_t* input, size_t inputLength) { memcpy(&this->buffer[bufferIndex], &input[inputIndex], inputLength - inputIndex); this->byteCount += inputLength; + return true; } void SkMD5::finish(Digest& digest) { diff --git a/src/core/SkMD5.h b/src/core/SkMD5.h index ed557931c2..a6d9b9f3eb 100644 --- a/src/core/SkMD5.h +++ b/src/core/SkMD5.h @@ -8,54 +8,37 @@ #ifndef SkMD5_DEFINED #define SkMD5_DEFINED -#include "SkTypes.h" -#include "SkEndian.h" #include "SkStream.h" -//The following macros can be defined to affect the MD5 code generated. -//SK_MD5_CLEAR_DATA causes all intermediate state to be overwritten with 0's. -//SK_CPU_LENDIAN allows 32 bit <=> 8 bit conversions without copies (if alligned). -//SK_CPU_FAST_UNALIGNED_ACCESS allows 32 bit <=> 8 bit conversions without copies if SK_CPU_LENDIAN. - +/* Calculate a 128-bit MD5 message-digest of the bytes sent to this stream. */ class SkMD5 : public SkWStream { public: SkMD5(); /** Processes input, adding it to the digest. - * Note that this treats the buffer as a series of uint8_t values. - */ - bool write(const void* buffer, size_t size) override { - this->update(reinterpret_cast<const uint8_t*>(buffer), size); - return true; - } + Calling this after finish is undefined. */ + bool write(const void* buffer, size_t size) final; - size_t bytesWritten() const override { return SkToSizeT(this->byteCount); } + size_t bytesWritten() const final { return SkToSizeT(this->byteCount); } - /** Processes input, adding it to the digest. Calling this after finish is undefined. */ - void update(const uint8_t* input, size_t length); + /** Alias for write() */ + void update(const uint8_t* b, size_t l) { (void)this->write(b, l); } struct Digest { uint8_t data[16]; bool operator ==(Digest const& other) const { return 0 == memcmp(data, other.data, sizeof(data)); } - bool operator !=(Digest const& other) const { - return 0 != memcmp(data, other.data, sizeof(data)); - } + bool operator !=(Digest const& other) const { return !(*this == other); } }; /** Computes and returns the digest. */ void finish(Digest& digest); private: - // number of bytes, modulo 2^64 - uint64_t byteCount; - - // state (ABCD) - uint32_t state[4]; - - // input buffer - uint8_t buffer[64]; + uint64_t byteCount; // number of bytes, modulo 2^64 + uint32_t state[4]; // state (ABCD) + uint8_t buffer[64]; // input buffer }; #endif |