diff options
-rw-r--r-- | gyp/public_headers.gypi | 1 | ||||
-rw-r--r-- | include/core/SkAnnotation.h | 12 | ||||
-rw-r--r-- | include/core/SkDataSet.h | 88 | ||||
-rw-r--r-- | src/core/SkAnnotation.cpp | 28 | ||||
-rw-r--r-- | src/core/SkData.cpp | 158 | ||||
-rw-r--r-- | src/ports/SkGlobalInitialization_default.cpp | 2 | ||||
-rw-r--r-- | tests/DataRefTest.cpp | 67 |
7 files changed, 21 insertions, 335 deletions
diff --git a/gyp/public_headers.gypi b/gyp/public_headers.gypi index f91df371fe..17253fa82b 100644 --- a/gyp/public_headers.gypi +++ b/gyp/public_headers.gypi @@ -252,7 +252,6 @@ 'core/SkPreConfig.h', 'core/SkImageFilterUtils.h', 'core/SkLineClipper.h', - 'core/SkDataSet.h', 'core/SkPathEffect.h', 'core/SkString.h', 'core/SkPixelRef.h', diff --git a/include/core/SkAnnotation.h b/include/core/SkAnnotation.h index 18ee1cd1a6..83256ddb0e 100644 --- a/include/core/SkAnnotation.h +++ b/include/core/SkAnnotation.h @@ -9,9 +9,9 @@ #define SkAnnotation_DEFINED #include "SkFlattenable.h" +#include "SkString.h" class SkData; -class SkDataSet; class SkStream; class SkWStream; struct SkPoint; @@ -27,18 +27,17 @@ public: kNoDraw_Flag = 1 << 0, }; - SkAnnotation(SkDataSet*, uint32_t flags); + SkAnnotation(const char key[], SkData* value, uint32_t flags); virtual ~SkAnnotation(); uint32_t getFlags() const { return fFlags; } - SkDataSet* getDataSet() const { return fDataSet; } bool isNoDraw() const { return SkToBool(fFlags & kNoDraw_Flag); } /** - * Helper for search the annotation's dataset. + * Return the data for the specified key, or NULL. */ - SkData* find(const char name[]) const; + SkData* find(const char key[]) const; SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkAnnotation) @@ -47,7 +46,8 @@ protected: virtual void flatten(SkFlattenableWriteBuffer&) const SK_OVERRIDE; private: - SkDataSet* fDataSet; + SkString fKey; + SkData* fData; uint32_t fFlags; void writeToStream(SkWStream*) const; diff --git a/include/core/SkDataSet.h b/include/core/SkDataSet.h deleted file mode 100644 index 2e5d96e68a..0000000000 --- a/include/core/SkDataSet.h +++ /dev/null @@ -1,88 +0,0 @@ -/* - * Copyright 2012 Google Inc. - * - * Use of this source code is governed by a BSD-style license that can be - * found in the LICENSE file. - */ - -#ifndef SkDataSet_DEFINED -#define SkDataSet_DEFINED - -#include "SkData.h" -#include "SkFlattenable.h" - -class SkStream; -class SkWStream; - -class SkDataSet : public SkFlattenable { -public: - /** - * Returns a new empty dataset. Note: since SkDataSet is immutable, this - * "new" set may be the same one that was returned before, but each - * returned object must have its reference-count balanced regardless. - * - * SkDataSet* empty = SkDataSet::NewEmpty(); - * ... - * empty->unref(); - */ - static SkDataSet* NewEmpty(); - - struct Pair { - const char* fKey; - SkData* fValue; - }; - - SkDataSet(const char key[], SkData* value); - SkDataSet(const Pair[], int count); - virtual ~SkDataSet(); - - bool isEmpty() const { return 0 == fCount; } - int count() const { return fCount; } - SkData* find(const char name[]) const; - - class Iter { - public: - Iter(const SkDataSet& ds) { - fPair = ds.fPairs; - fStop = ds.fPairs + ds.fCount; - } - - const char* key() const { - SkASSERT(!this->done()); - return fPair->fKey; - } - - SkData* value() const { - SkASSERT(!this->done()); - return fPair->fValue; - } - - bool done() const { return fPair >= fStop; } - void next() { - SkASSERT(!this->done()); - fPair += 1; - } - - private: - const SkDataSet::Pair* fPair; - const SkDataSet::Pair* fStop; - }; - - explicit SkDataSet(SkStream*); - void writeToStream(SkWStream*) const; - - SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkDataSet) - -protected: - SkDataSet(SkFlattenableReadBuffer&); - virtual void flatten(SkFlattenableWriteBuffer&) const SK_OVERRIDE; - -private: - int32_t fCount; - uint32_t fKeySize; - Pair* fPairs; - - typedef SkFlattenable INHERITED; -}; - -#endif diff --git a/src/core/SkAnnotation.cpp b/src/core/SkAnnotation.cpp index 52fa9b79f2..1230cb4de8 100644 --- a/src/core/SkAnnotation.cpp +++ b/src/core/SkAnnotation.cpp @@ -6,37 +6,40 @@ */ #include "SkAnnotation.h" -#include "SkDataSet.h" +#include "SkData.h" #include "SkFlattenableBuffers.h" #include "SkPoint.h" #include "SkStream.h" -SkAnnotation::SkAnnotation(SkDataSet* data, uint32_t flags) { - if (NULL == data) { - data = SkDataSet::NewEmpty(); +SkAnnotation::SkAnnotation(const char key[], SkData* value, uint32_t flags) + : fKey(key) { + if (NULL == value) { + value = SkData::NewEmpty(); } else { - data->ref(); + value->ref(); } - fDataSet = data; + fData = value; fFlags = flags; } SkAnnotation::~SkAnnotation() { - fDataSet->unref(); + fData->unref(); } -SkData* SkAnnotation::find(const char name[]) const { - return fDataSet->find(name); +SkData* SkAnnotation::find(const char key[]) const { + return fKey.equals(key) ? fData : NULL; } SkAnnotation::SkAnnotation(SkFlattenableReadBuffer& buffer) : INHERITED(buffer) { fFlags = buffer.readUInt(); - fDataSet = buffer.readFlattenableT<SkDataSet>(); + buffer.readString(&fKey); + fData = buffer.readByteArrayAsData(); } void SkAnnotation::flatten(SkFlattenableWriteBuffer& buffer) const { buffer.writeUInt(fFlags); - buffer.writeFlattenable(fDataSet); + buffer.writeString(fKey.c_str()); + buffer.writeDataAsByteArray(fData); } const char* SkAnnotationKeys::URL_Key() { @@ -56,8 +59,7 @@ const char* SkAnnotationKeys::Link_Named_Dest_Key() { #include "SkCanvas.h" static void annotate_paint(SkPaint& paint, const char* key, SkData* value) { - SkAutoTUnref<SkDataSet> dataset(SkNEW_ARGS(SkDataSet, (key, value))); - SkAnnotation* ann = SkNEW_ARGS(SkAnnotation, (dataset, + SkAnnotation* ann = SkNEW_ARGS(SkAnnotation, (key, value, SkAnnotation::kNoDraw_Flag)); paint.setAnnotation(ann)->unref(); diff --git a/src/core/SkData.cpp b/src/core/SkData.cpp index f5d983e0ed..8a6418946c 100644 --- a/src/core/SkData.cpp +++ b/src/core/SkData.cpp @@ -156,161 +156,3 @@ SkData* SkData::NewWithCString(const char cstr[]) { return NewWithCopy(cstr, size); } -/////////////////////////////////////////////////////////////////////////////// - -#include "SkDataSet.h" -#include "SkFlattenable.h" -#include "SkStream.h" - -static SkData* dupdata(SkData* data) { - if (data) { - data->ref(); - } else { - data = SkData::NewEmpty(); - } - return data; -} - -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)) { - return array[i].fValue; - } - } - return NULL; -} - -static SkDataSet::Pair* allocatePairStorage(int count, size_t storage) { - size_t size = count * sizeof(SkDataSet::Pair) + storage; - return (SkDataSet::Pair*)sk_malloc_throw(size); -} - -SkDataSet::SkDataSet(const char key[], SkData* value) { - size_t keyLen = strlen(key); - - fCount = 1; - fKeySize = keyLen + 1; - fPairs = allocatePairStorage(1, keyLen + 1); - - fPairs[0].fKey = (char*)(fPairs + 1); - memcpy(const_cast<char*>(fPairs[0].fKey), key, keyLen + 1); - - fPairs[0].fValue = dupdata(value); -} - -SkDataSet::SkDataSet(const Pair array[], int count) { - if (count < 1) { - fCount = 0; - fKeySize = 0; - fPairs = NULL; - return; - } - - int i; - size_t keySize = 0; - for (i = 0; i < count; ++i) { - keySize += strlen(array[i].fKey) + 1; - } - - Pair* pairs = fPairs = allocatePairStorage(count, keySize); - char* keyStorage = (char*)(pairs + count); - - keySize = 0; // reset this, so we can compute the size for unique keys - int uniqueCount = 0; - for (int i = 0; i < count; ++i) { - if (!findValue(array[i].fKey, pairs, uniqueCount)) { - size_t len = strlen(array[i].fKey); - memcpy(keyStorage, array[i].fKey, len + 1); - pairs[uniqueCount].fKey = keyStorage; - keyStorage += len + 1; - keySize += len + 1; - - pairs[uniqueCount].fValue = dupdata(array[i].fValue); - uniqueCount += 1; - } - } - fCount = uniqueCount; - fKeySize = keySize; -} - -SkDataSet::~SkDataSet() { - for (int i = 0; i < fCount; ++i) { - fPairs[i].fValue->unref(); - } - sk_free(fPairs); // this also frees the key storage -} - -SkData* SkDataSet::find(const char key[]) const { - return findValue(key, fPairs, fCount); -} - -void SkDataSet::writeToStream(SkWStream* stream) const { - stream->write32(fCount); - if (fCount > 0) { - stream->write32(fKeySize); - // our first key points to all the key storage - stream->write(fPairs[0].fKey, fKeySize); - for (int i = 0; i < fCount; ++i) { - stream->writeData(fPairs[i].fValue); - } - } -} - -void SkDataSet::flatten(SkFlattenableWriteBuffer& buffer) const { - buffer.writeInt(fCount); - if (fCount > 0) { - buffer.writeByteArray(fPairs[0].fKey, fKeySize); - for (int i = 0; i < fCount; ++i) { - buffer.writeDataAsByteArray(fPairs[i].fValue); - } - } -} - -SkDataSet::SkDataSet(SkStream* stream) { - fCount = stream->readU32(); - if (fCount > 0) { - fKeySize = stream->readU32(); - fPairs = allocatePairStorage(fCount, fKeySize); - char* keyStorage = (char*)(fPairs + fCount); - - stream->read(keyStorage, fKeySize); - - for (int i = 0; i < fCount; ++i) { - fPairs[i].fKey = keyStorage; - keyStorage += strlen(keyStorage) + 1; - fPairs[i].fValue = stream->readData(); - } - } else { - fKeySize = 0; - fPairs = NULL; - } -} - -SkDataSet::SkDataSet(SkFlattenableReadBuffer& buffer) { - fCount = buffer.readInt(); - if (fCount > 0) { - fKeySize = buffer.getArrayCount(); - fPairs = allocatePairStorage(fCount, fKeySize); - char* keyStorage = (char*)(fPairs + fCount); - - buffer.readByteArray(keyStorage); - - for (int i = 0; i < fCount; ++i) { - fPairs[i].fKey = keyStorage; - keyStorage += strlen(keyStorage) + 1; - fPairs[i].fValue = buffer.readByteArrayAsData(); - } - } else { - fKeySize = 0; - fPairs = NULL; - } -} - -SkDataSet* SkDataSet::NewEmpty() { - static SkDataSet* gEmptySet; - if (NULL == gEmptySet) { - gEmptySet = SkNEW_ARGS(SkDataSet, (NULL, 0)); - } - gEmptySet->ref(); - return gEmptySet; -} diff --git a/src/ports/SkGlobalInitialization_default.cpp b/src/ports/SkGlobalInitialization_default.cpp index 2e98a02f25..ab39d3ca44 100644 --- a/src/ports/SkGlobalInitialization_default.cpp +++ b/src/ports/SkGlobalInitialization_default.cpp @@ -33,7 +33,6 @@ #include "SkCornerPathEffect.h" #include "SkDashPathEffect.h" #include "SkData.h" -#include "SkDataSet.h" #include "SkDiscretePathEffect.h" #include "SkDisplacementMapEffect.h" #include "SkDropShadowImageFilter.h" @@ -77,7 +76,6 @@ void SkFlattenable::InitializeFlattenables() { SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkComposeShader) SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkCornerPathEffect) SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkDashPathEffect) - SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkDataSet) SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkDilateImageFilter) SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkDiscretePathEffect) SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkDisplacementMapEffect) diff --git a/tests/DataRefTest.cpp b/tests/DataRefTest.cpp index 313a61066d..9043a58722 100644 --- a/tests/DataRefTest.cpp +++ b/tests/DataRefTest.cpp @@ -7,7 +7,6 @@ */ #include "Test.h" #include "SkData.h" -#include "SkDataSet.h" #include "SkDataTable.h" #include "SkOrderedReadBuffer.h" #include "SkOrderedWriteBuffer.h" @@ -162,71 +161,6 @@ static void TestDataTable(skiatest::Reporter* reporter) { test_globaltable(reporter); } -static void unrefAll(const SkDataSet::Pair pairs[], int count) { - for (int i = 0; i < count; ++i) { - pairs[i].fValue->unref(); - } -} - -// asserts that inner is a subset of outer -static void test_dataset_subset(skiatest::Reporter* reporter, - const SkDataSet& outer, const SkDataSet& inner) { - SkDataSet::Iter iter(inner); - for (; !iter.done(); iter.next()) { - SkData* outerData = outer.find(iter.key()); - REPORTER_ASSERT(reporter, outerData); - REPORTER_ASSERT(reporter, outerData->equals(iter.value())); - } -} - -static void test_datasets_equal(skiatest::Reporter* reporter, - const SkDataSet& ds0, const SkDataSet& ds1) { - REPORTER_ASSERT(reporter, ds0.count() == ds1.count()); - - test_dataset_subset(reporter, ds0, ds1); - test_dataset_subset(reporter, ds1, ds0); -} - -static void test_dataset(skiatest::Reporter* reporter, const SkDataSet& ds, - int count) { - REPORTER_ASSERT(reporter, ds.count() == count); - - SkDataSet::Iter iter(ds); - int index = 0; - for (; !iter.done(); iter.next()) { -// const char* name = iter.key(); -// SkData* data = iter.value(); -// SkDebugf("[%d] %s:%s\n", index, name, (const char*)data->bytes()); - index += 1; - } - REPORTER_ASSERT(reporter, index == count); - - SkDynamicMemoryWStream ostream; - ds.writeToStream(&ostream); - SkMemoryStream istream; - istream.setData(ostream.copyToData())->unref(); - SkDataSet copy(&istream); - - test_datasets_equal(reporter, ds, copy); -} - -static void test_dataset(skiatest::Reporter* reporter) { - SkDataSet set0(NULL, 0); - SkDataSet set1("hello", SkAutoTUnref<SkData>(SkData::NewWithCString("world"))); - - const SkDataSet::Pair pairs[] = { - { "one", SkData::NewWithCString("1") }, - { "two", SkData::NewWithCString("2") }, - { "three", SkData::NewWithCString("3") }, - }; - SkDataSet set3(pairs, 3); - unrefAll(pairs, 3); - - test_dataset(reporter, set0, 0); - test_dataset(reporter, set1, 1); - test_dataset(reporter, set3, 3); -} - static void* gGlobal; static void delete_int_proc(const void* ptr, size_t len, void* context) { @@ -318,7 +252,6 @@ static void TestData(skiatest::Reporter* reporter) { tmp->unref(); test_cstring(reporter); - test_dataset(reporter); test_files(reporter); } |