| Index: src/utils/SkHashDigest.h
|
| ===================================================================
|
| --- src/utils/SkHashDigest.h (revision 0)
|
| +++ src/utils/SkHashDigest.h (revision 0)
|
| @@ -0,0 +1,74 @@
|
| +/*
|
| + * Copyright 2013 Google Inc.
|
| + *
|
| + * Use of this source code is governed by a BSD-style license that can be
|
| + * found in the LICENSE file.
|
| + */
|
| +
|
| +#ifndef SkHashDigest_DEFINED
|
| +#define SkHashDigest_DEFINED
|
| +
|
| +#include "SkData.h"
|
| +
|
| +/**
|
| + * A mutable hash digest; it can be filled with a bytearray of any
|
| + * length, anytime.
|
| + */
|
| +class SkHashDigest {
|
| +public:
|
| + SkHashDigest() : fSkDataPtr(SkData::NewEmpty()) {}
|
| + SkHashDigest(const void *data, size_t length) : fSkDataPtr(SkData::NewWithCopy(data, length)) {}
|
| +
|
| + /**
|
| + * Destructor: if this object is the only one with a reference to the data
|
| + * that makes up the hash digest, then that data will be freed.
|
| + */
|
| + ~SkHashDigest() {
|
| + SkSafeUnref(fSkDataPtr);
|
| + }
|
| +
|
| + /**
|
| + * Replace the hash digest data held by this object with a copy of the
|
| + * data from this pointer/length.
|
| + */
|
| + void set(void *data, size_t length) {
|
| + fSkDataPtr->unref();
|
| + fSkDataPtr = SkData::NewWithCopy(data, length);
|
| + }
|
| +
|
| + /**
|
| + * Return a pointer to the SkData object holding the hash digest data.
|
| + *
|
| + * The SkData object's reference counter will be bumped to account for this call,
|
| + * so the caller must call unref() on it once it is no longer needed!
|
| + *
|
| + * For example:
|
| + * {
|
| + * SkData *skDataPtr = digest.skDataPtr();
|
| + * const uint8_t* bytes = skDataPtr->bytes();
|
| + * ...
|
| + * skDataPtr->unref();
|
| + * }
|
| + */
|
| + SkData *skDataPtr() const {
|
| + fSkDataPtr->ref();
|
| + return fSkDataPtr;
|
| + }
|
| +
|
| + size_t size() const {
|
| + return fSkDataPtr->size();
|
| + }
|
| +
|
| + bool equals(const SkHashDigest &other) const {
|
| + return fSkDataPtr->equals(other.fSkDataPtr);
|
| + }
|
| +
|
| +private:
|
| +
|
| + // fSkDataPtr may change over the lifetime of the SkHashDigest object,
|
| + // but it will never be set to NULL.
|
| + // (Every SkHashDigest constructor initializes it to point at *some* SkData object.)
|
| + SkData *fSkDataPtr;
|
| +};
|
| +
|
| +#endif
|
|
|