| Index: include/core/SkWriter32.h
|
| diff --git a/include/core/SkWriter32.h b/include/core/SkWriter32.h
|
| index 2e7c9563d9f748017a6b4e04adc1ccff1cbab63b..cadcaa7853d8d663c7d6ab6310aa46c7e80ed2f9 100644
|
| --- a/include/core/SkWriter32.h
|
| +++ b/include/core/SkWriter32.h
|
| @@ -10,6 +10,7 @@
|
| #ifndef SkWriter32_DEFINED
|
| #define SkWriter32_DEFINED
|
|
|
| +#include "SkData.h"
|
| #include "SkMatrix.h"
|
| #include "SkPath.h"
|
| #include "SkPoint.h"
|
| @@ -44,6 +45,7 @@ public:
|
| SkASSERT(SkIsAlign4((uintptr_t)external));
|
| SkASSERT(SkIsAlign4(externalBytes));
|
|
|
| + fSnapshot.reset(NULL);
|
| fData = (uint8_t*)external;
|
| fCapacity = externalBytes;
|
| fUsed = 0;
|
| @@ -70,7 +72,7 @@ public:
|
|
|
| /**
|
| * Read a T record at offset, which must be a multiple of 4. Only legal if the record
|
| - * was writtern atomically using the write methods below.
|
| + * was written atomically using the write methods below.
|
| */
|
| template<typename T>
|
| const T& readTAt(size_t offset) const {
|
| @@ -81,12 +83,13 @@ public:
|
|
|
| /**
|
| * Overwrite a T record at offset, which must be a multiple of 4. Only legal if the record
|
| - * was writtern atomically using the write methods below.
|
| + * was written atomically using the write methods below.
|
| */
|
| template<typename T>
|
| void overwriteTAt(size_t offset, const T& value) {
|
| SkASSERT(SkAlign4(offset) == offset);
|
| SkASSERT(offset < fUsed);
|
| + SkASSERT(fSnapshot.get() == NULL);
|
| *(T*)(fData + offset) = value;
|
| }
|
|
|
| @@ -230,6 +233,18 @@ public:
|
| return stream->read(this->reservePad(length), length);
|
| }
|
|
|
| + /**
|
| + * Captures a snapshot of the data as it is right now, and return it.
|
| + * Multiple calls without intervening writes may return the same SkData,
|
| + * but this is not guaranteed.
|
| + * Future appends will not affect the returned buffer.
|
| + * It is illegal to call overwriteTAt after this without an intervening
|
| + * append. It may cause the snapshot buffer to be corrupted.
|
| + * Callers must unref the returned SkData.
|
| + * This is not thread safe, it should only be called on the writing thread,
|
| + * the result however can be shared across threads.
|
| + */
|
| + SkData* snapshotAsData() const;
|
| private:
|
| void growToAtLeast(size_t size);
|
|
|
| @@ -238,6 +253,7 @@ private:
|
| size_t fUsed; // Number of bytes written.
|
| void* fExternal; // Unmanaged memory block.
|
| SkAutoTMalloc<uint8_t> fInternal; // Managed memory block.
|
| + SkAutoTUnref<SkData> fSnapshot; // Holds the result of last asData.
|
| };
|
|
|
| /**
|
|
|