aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core/SkData.cpp
diff options
context:
space:
mode:
authorGravatar djsollen@google.com <djsollen@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2012-07-31 13:17:31 +0000
committerGravatar djsollen@google.com <djsollen@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2012-07-31 13:17:31 +0000
commita1da1034318774e529abadc126e9d3c74da7b67c (patch)
treed5e26893bc03f03656634f71f93c437fc25e7fd8 /src/core/SkData.cpp
parent2d537a18f49cb492358c2b051f4786075dd9406c (diff)
Update SkData and SkDataSet to make better use of SkFlattenable.
TEST=DataRefTest.cpp Review URL: https://codereview.appspot.com/6441076 git-svn-id: http://skia.googlecode.com/svn/trunk@4850 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'src/core/SkData.cpp')
-rw-r--r--src/core/SkData.cpp51
1 files changed, 29 insertions, 22 deletions
diff --git a/src/core/SkData.cpp b/src/core/SkData.cpp
index a9ca4dabf4..261b571436 100644
--- a/src/core/SkData.cpp
+++ b/src/core/SkData.cpp
@@ -120,6 +120,32 @@ SkData* SkData::NewWithCString(const char cstr[]) {
}
///////////////////////////////////////////////////////////////////////////////
+
+void SkData::flatten(SkFlattenableWriteBuffer& buffer) const {
+ buffer.write32(fSize);
+ buffer.writePad(fPtr, fSize);
+}
+
+SkData::SkData(SkFlattenableReadBuffer& buffer) {
+ fSize = buffer.readU32();
+ fReleaseProcContext = NULL;
+
+ if (0 == fSize) {
+ fPtr = NULL;
+ fReleaseProc = NULL;
+ } else {
+ // buffer.read expects a 4-byte aligned size
+ size_t size4 = SkAlign4(fSize);
+ void* data = sk_malloc_throw(size4);
+ buffer.read(data, size4);
+ fPtr = data;
+ fReleaseProc = sk_free_releaseproc;
+ }
+}
+
+SK_DEFINE_FLATTENABLE_REGISTRAR(SkData)
+
+///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
#include "SkDataSet.h"
@@ -135,26 +161,6 @@ static SkData* dupdata(SkData* data) {
return data;
}
-static SkData* read_data(SkFlattenableReadBuffer& buffer) {
- size_t size = buffer.readU32();
- if (0 == size) {
- return SkData::NewEmpty();
- } else {
- // buffer.read expects a 4-byte aligned size
- size_t size4 = SkAlign4(size);
- void* block = sk_malloc_throw(size4);
- buffer.read(block, size4);
- // we pass the "real" size to NewFromMalloc, since its needs to report
- // the same size that was written.
- return SkData::NewFromMalloc(block, size);
- }
-}
-
-static void write_data(SkFlattenableWriteBuffer& buffer, SkData* data) {
- buffer.write32(data->size());
- buffer.writePad(data->data(), data->size());
-}
-
static SkData* findValue(const char key[], const SkDataSet::Pair array[], int n) {
for (int i = 0; i < n; ++i) {
if (!strcmp(key, array[i].fKey)) {
@@ -247,7 +253,7 @@ void SkDataSet::flatten(SkFlattenableWriteBuffer& buffer) const {
// our first key points to all the key storage
buffer.writePad(fPairs[0].fKey, fKeySize);
for (int i = 0; i < fCount; ++i) {
- write_data(buffer, fPairs[i].fValue);
+ buffer.writeFlattenable(fPairs[i].fValue);
}
}
}
@@ -285,7 +291,7 @@ SkDataSet::SkDataSet(SkFlattenableReadBuffer& buffer) {
for (int i = 0; i < fCount; ++i) {
fPairs[i].fKey = keyStorage;
keyStorage += strlen(keyStorage) + 1;
- fPairs[i].fValue = read_data(buffer);
+ fPairs[i].fValue = (SkData*)buffer.readFlattenable();
}
} else {
fKeySize = 0;
@@ -302,3 +308,4 @@ SkDataSet* SkDataSet::NewEmpty() {
return gEmptySet;
}
+SK_DEFINE_FLATTENABLE_REGISTRAR(SkDataSet)