aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--gyp/public_headers.gypi1
-rw-r--r--include/core/SkAnnotation.h12
-rw-r--r--include/core/SkDataSet.h88
-rw-r--r--src/core/SkAnnotation.cpp28
-rw-r--r--src/core/SkData.cpp158
-rw-r--r--src/ports/SkGlobalInitialization_default.cpp2
-rw-r--r--tests/DataRefTest.cpp67
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);
}