Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1174)

Side by Side Diff: include/core/SkTDict.h

Issue 339183002: move some headers out of public (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « include/core/SkLineClipper.h ('k') | include/core/SkVertState.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1
2 /* 1 /*
3 * Copyright 2006 The Android Open Source Project 2 * Copyright 2006 The Android Open Source Project
4 * 3 *
5 * Use of this source code is governed by a BSD-style license that can be 4 * Use of this source code is governed by a BSD-style license that can be
6 * found in the LICENSE file. 5 * found in the LICENSE file.
7 */ 6 */
8 7
9
10 #ifndef SkTDict_DEFINED 8 #ifndef SkTDict_DEFINED
11 #define SkTDict_DEFINED 9 #define SkTDict_DEFINED
12 10
13 #include "SkChunkAlloc.h" 11 #include "SkChunkAlloc.h"
14 #include "SkTSearch.h" 12 #include "SkTSearch.h"
15 #include "SkTDArray.h" 13 #include "SkTDArray.h"
16 14
17 template <typename T> class SkTDict : SkNoncopyable { 15 template <typename T> class SkTDict : SkNoncopyable {
18 public: 16 public:
19 SkTDict(size_t minStringAlloc) : fStrings(minStringAlloc) {} 17 SkTDict(size_t minStringAlloc) : fStrings(minStringAlloc) {}
20 18
21 void reset() 19 void reset() {
22 {
23 fArray.reset(); 20 fArray.reset();
24 fStrings.reset(); 21 fStrings.reset();
25 } 22 }
26 23
27 int count() const { return fArray.count(); } 24 int count() const { return fArray.count(); }
28 25
29 bool set(const char name[], const T& value) 26 bool set(const char name[], const T& value) {
30 {
31 return set(name, strlen(name), value); 27 return set(name, strlen(name), value);
32 } 28 }
33 29
34 bool set(const char name[], size_t len, const T& value) 30 bool set(const char name[], size_t len, const T& value) {
35 {
36 SkASSERT(name); 31 SkASSERT(name);
37 32
38 int index = this->find_index(name, len); 33 int index = this->find_index(name, len);
39 34
40 if (index >= 0) 35 if (index >= 0) {
41 {
42 fArray[index].fValue = value; 36 fArray[index].fValue = value;
43 return false; 37 return false;
44 } 38 } else {
45 else
46 {
47 Pair* pair = fArray.insert(~index); 39 Pair* pair = fArray.insert(~index);
48 char* copy = (char*)fStrings.alloc(len + 1, SkChunkAlloc::kThrow_A llocFailType); 40 char* copy = (char*)fStrings.alloc(len + 1, SkChunkAlloc::kThrow_A llocFailType);
49 memcpy(copy, name, len); 41 memcpy(copy, name, len);
50 copy[len] = '\0'; 42 copy[len] = '\0';
51 pair->fName = copy; 43 pair->fName = copy;
52 pair->fValue = value; 44 pair->fValue = value;
53 return true; 45 return true;
54 } 46 }
55 } 47 }
56 48
57 bool find(const char name[]) const 49 bool find(const char name[]) const {
58 {
59 return this->find_index(name) >= 0; 50 return this->find_index(name) >= 0;
60 } 51 }
61 52
62 bool find(const char name[], size_t len) const 53 bool find(const char name[], size_t len) const {
63 {
64 return this->find_index(name, len) >= 0; 54 return this->find_index(name, len) >= 0;
65 } 55 }
66 56
67 bool find(const char name[], T* value) const 57 bool find(const char name[], T* value) const {
68 {
69 return find(name, strlen(name), value); 58 return find(name, strlen(name), value);
70 } 59 }
71 60
72 bool find(const char name[], size_t len, T* value) const 61 bool find(const char name[], size_t len, T* value) const {
73 {
74 int index = this->find_index(name, len); 62 int index = this->find_index(name, len);
75 63
76 if (index >= 0) 64 if (index >= 0) {
77 { 65 if (value) {
78 if (value)
79 *value = fArray[index].fValue; 66 *value = fArray[index].fValue;
67 }
80 return true; 68 return true;
81 } 69 }
82 return false; 70 return false;
83 } 71 }
84 72
85 bool findKey(T& value, const char** name) const 73 bool findKey(T& value, const char** name) const {
86 {
87 const Pair* end = fArray.end(); 74 const Pair* end = fArray.end();
88 for (const Pair* pair = fArray.begin(); pair < end; pair++) { 75 for (const Pair* pair = fArray.begin(); pair < end; pair++) {
89 if (pair->fValue != value) 76 if (pair->fValue != value) {
90 continue; 77 continue;
78 }
91 *name = pair->fName; 79 *name = pair->fName;
92 return true; 80 return true;
93 } 81 }
94 return false; 82 return false;
95 } 83 }
96 84
97 public: 85 public:
98 struct Pair { 86 struct Pair {
99 const char* fName; 87 const char* fName;
100 T fValue; 88 T fValue;
101 89
102 friend int operator<(const Pair& a, const Pair& b) 90 friend int operator<(const Pair& a, const Pair& b) {
103 {
104 return strcmp(a.fName, b.fName); 91 return strcmp(a.fName, b.fName);
105 } 92 }
106 friend int operator!=(const Pair& a, const Pair& b) 93
107 { 94 friend int operator!=(const Pair& a, const Pair& b) {
108 return strcmp(a.fName, b.fName); 95 return strcmp(a.fName, b.fName);
109 } 96 }
110 }; 97 };
111 friend class Iter; 98 friend class Iter;
112 99
113 public: 100 public:
114 class Iter { 101 class Iter {
115 public: 102 public:
116 Iter(const SkTDict<T>& dict) 103 Iter(const SkTDict<T>& dict) {
117 {
118 fIter = dict.fArray.begin(); 104 fIter = dict.fArray.begin();
119 fStop = dict.fArray.end(); 105 fStop = dict.fArray.end();
120 } 106 }
121 const char* next(T* value) 107
122 { 108 const char* next(T* value) {
123 const char* name = NULL; 109 const char* name = NULL;
124 if (fIter < fStop) 110 if (fIter < fStop) {
125 {
126 name = fIter->fName; 111 name = fIter->fName;
127 if (value) 112 if (value) {
128 *value = fIter->fValue; 113 *value = fIter->fValue;
114 }
129 fIter += 1; 115 fIter += 1;
130 } 116 }
131 return name; 117 return name;
132 } 118 }
133 private: 119 private:
134 const Pair* fIter; 120 const Pair* fIter;
135 const Pair* fStop; 121 const Pair* fStop;
136 }; 122 };
137 123
138 private: 124 private:
139 SkTDArray<Pair> fArray; 125 SkTDArray<Pair> fArray;
140 SkChunkAlloc fStrings; 126 SkChunkAlloc fStrings;
141 127
142 int find_index(const char name[]) const 128 int find_index(const char name[]) const {
143 {
144 return find_index(name, strlen(name)); 129 return find_index(name, strlen(name));
145 } 130 }
146 131
147 int find_index(const char name[], size_t len) const 132 int find_index(const char name[], size_t len) const {
148 {
149 SkASSERT(name); 133 SkASSERT(name);
150 134
151 int count = fArray.count(); 135 int count = fArray.count();
152 int index = ~0; 136 int index = ~0;
153 137
154 if (count) 138 if (count) {
155 index = SkStrSearch(&fArray.begin()->fName, count, name, len, sizeof (Pair)); 139 index = SkStrSearch(&fArray.begin()->fName, count, name, len, sizeof (Pair));
140 }
156 return index; 141 return index;
157 } 142 }
158 friend class Iter; 143 friend class Iter;
159 }; 144 };
160 145
161 #endif 146 #endif
OLDNEW
« no previous file with comments | « include/core/SkLineClipper.h ('k') | include/core/SkVertState.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698