Remove SkTDict and calls from SkView.

R=reed@google.com

Change-Id: Iebfddf752a2ac210a3f5c69de8decd06d0c35617
Reviewed-on: https://skia-review.googlesource.com/7436
Commit-Queue: Herb Derby <herb@google.com>
Commit-Queue: Mike Reed <reed@google.com>
Reviewed-by: Mike Reed <reed@google.com>
This commit is contained in:
Herb Derby 2017-01-24 11:44:52 -05:00 committed by Skia Commit-Bot
parent 80d22ea13a
commit 5d72f7deb1
5 changed files with 2 additions and 223 deletions

View File

@ -466,7 +466,6 @@ skia_core_sources = [
"$_include/private/SkTFitsIn.h",
"$_include/private/SkTHash.h",
"$_include/private/SkThreadID.h",
"$_include/private/SkTDict.h",
"$_include/private/SkTSearch.h",
"$_include/private/SkTLogic.h",
"$_include/private/SkWeakRefCnt.h",

View File

@ -1,146 +0,0 @@
/*
* Copyright 2006 The Android Open Source Project
*
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
#ifndef SkTDict_DEFINED
#define SkTDict_DEFINED
#include "SkArenaAlloc.h"
#include "SkTSearch.h"
#include "SkTDArray.h"
template <typename T> class SkTDict : SkNoncopyable {
public:
SkTDict(size_t minStringAlloc) : fStrings(minStringAlloc) {}
void reset() {
fArray.reset();
fStrings.reset();
}
int count() const { return fArray.count(); }
bool set(const char name[], const T& value) {
return set(name, strlen(name), value);
}
bool set(const char name[], size_t len, const T& value) {
SkASSERT(name);
int index = this->find_index(name, len);
if (index >= 0) {
fArray[index].fValue = value;
return false;
} else {
Pair* pair = fArray.insert(~index);
char* copy = fStrings.makeArrayDefault<char>(len + 1);
memcpy(copy, name, len);
copy[len] = '\0';
pair->fName = copy;
pair->fValue = value;
return true;
}
}
bool find(const char name[]) const {
return this->find_index(name) >= 0;
}
bool find(const char name[], size_t len) const {
return this->find_index(name, len) >= 0;
}
bool find(const char name[], T* value) const {
return find(name, strlen(name), value);
}
bool find(const char name[], size_t len, T* value) const {
int index = this->find_index(name, len);
if (index >= 0) {
if (value) {
*value = fArray[index].fValue;
}
return true;
}
return false;
}
bool findKey(T& value, const char** name) const {
const Pair* end = fArray.end();
for (const Pair* pair = fArray.begin(); pair < end; pair++) {
if (pair->fValue != value) {
continue;
}
*name = pair->fName;
return true;
}
return false;
}
public:
struct Pair {
const char* fName;
T fValue;
friend int operator<(const Pair& a, const Pair& b) {
return strcmp(a.fName, b.fName);
}
friend int operator!=(const Pair& a, const Pair& b) {
return strcmp(a.fName, b.fName);
}
};
friend class Iter;
public:
class Iter {
public:
Iter(const SkTDict<T>& dict) {
fIter = dict.fArray.begin();
fStop = dict.fArray.end();
}
const char* next(T* value) {
const char* name = NULL;
if (fIter < fStop) {
name = fIter->fName;
if (value) {
*value = fIter->fValue;
}
fIter += 1;
}
return name;
}
private:
const Pair* fIter;
const Pair* fStop;
};
private:
SkTDArray<Pair> fArray;
SkArenaAlloc fStrings;
int find_index(const char name[]) const {
return find_index(name, strlen(name));
}
int find_index(const char name[], size_t len) const {
SkASSERT(name);
int count = fArray.count();
int index = ~0;
if (count) {
index = SkStrSearch(&fArray.begin()->fName, count, name, len, sizeof(Pair));
}
return index;
}
friend class Iter;
};
#endif

View File

@ -13,7 +13,6 @@
#include "SkEventSink.h"
#include "SkRect.h"
#include "SkDOM.h"
#include "../private/SkTDict.h"
#include "SkMatrix.h"
#include "SkMetaData.h"
@ -258,7 +257,7 @@ public:
*/
class Artist : public SkRefCnt {
public:
void draw(SkView*, SkCanvas*);
void inflate(const SkDOM&, const SkDOM::Node*);
@ -286,7 +285,7 @@ public:
*/
class Layout : public SkRefCnt {
public:
void layoutChildren(SkView* parent);
void inflate(const SkDOM&, const SkDOM::Node*);
@ -313,14 +312,6 @@ public:
/** Call this to initialize this view based on the specified XML node
*/
void inflate(const SkDOM& dom, const SkDOM::Node* node);
/** After a view hierarchy is inflated, this may be called with a dictionary
containing pairs of <name, view*>, where the name string was the view's
"id" attribute when it was inflated.
This will call the virtual onPostInflate for this view, and the recursively
call postInflate on all of the view's children.
*/
void postInflate(const SkTDict<SkView*>& ids);
SkDEBUGCODE(void dump(bool recurse) const;)
@ -362,7 +353,6 @@ protected:
/** Override this if you want to perform post initialization work based on the ID dictionary built
during XML parsing. Be sure to call the inherited version too.
*/
virtual void onPostInflate(const SkTDict<SkView*>&);
public:
#ifdef SK_DEBUG

View File

@ -247,54 +247,3 @@ SkEventSink* SkEventSink::FindSink(SkEventSinkID sinkID)
}
return nullptr;
}
////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////
#if 0 // experimental, not tested
#include "SkMutex.h"
#include "SkTDict.h"
#define kMinStringBufferSize 128
SK_DECLARE_STATIC_MUTEX(gNamedSinkMutex);
static SkTDict<SkEventSinkID> gNamedSinkIDs(kMinStringBufferSize);
/** Register a name/id pair with the system. If the name already exists,
replace its ID with the new id. This pair will persist until UnregisterNamedSink()
is called.
*/
void SkEventSink::RegisterNamedSinkID(const char name[], SkEventSinkID id)
{
if (id && name && *name)
{
SkAutoMutexAcquire ac(gNamedSinkMutex);
gNamedSinkIDs.set(name, id);
}
}
/** Return the id that matches the specified name (from a previous call to
RegisterNamedSinkID(). If no match is found, return 0
*/
SkEventSinkID SkEventSink::FindNamedSinkID(const char name[])
{
SkEventSinkID id = 0;
if (name && *name)
{
SkAutoMutexAcquire ac(gNamedSinkMutex);
(void)gNamedSinkIDs.find(name, &id);
}
return id;
}
/** Remove all name/id pairs from the system. This is call internally
on shutdown, to ensure no memory leaks. It should not be called
before shutdown.
*/
void SkEventSink::RemoveAllNamedSinkIDs()
{
SkAutoMutexAcquire ac(gNamedSinkMutex);
(void)gNamedSinkIDs.reset();
}
#endif

View File

@ -663,19 +663,6 @@ void SkView::inflate(const SkDOM& dom, const SkDOM::Node* node) {
this->onInflate(dom, node);
}
void SkView::onPostInflate(const SkTDict<SkView*>&) {
// override in subclass as needed
}
void SkView::postInflate(const SkTDict<SkView*>& dict) {
this->onPostInflate(dict);
B2FIter iter(this);
SkView* child;
while ((child = iter.next()) != nullptr)
child->postInflate(dict);
}
//////////////////////////////////////////////////////////////////
SkView* SkView::sendEventToParents(const SkEvent& evt) {