Flutter Engine
The Flutter Engine
Loading...
Searching...
No Matches
Classes | Public Member Functions | List of all members
skia_private::THashTable< T, K, Traits > Class Template Reference

#include <SkTHash.h>

Classes

class  Iter
 

Public Member Functions

 THashTable ()=default
 
 ~THashTable ()=default
 
 THashTable (const THashTable &that)
 
 THashTable (THashTable &&that)
 
THashTableoperator= (const THashTable &that)
 
THashTableoperator= (THashTable &&that)
 
void reset ()
 
int count () const
 
int capacity () const
 
size_t approxBytesUsed () const
 
Tset (T val)
 
Tfind (const K &key) const
 
T findOrNull (const K &key) const
 
bool removeIfExists (const K &key)
 
void remove (const K &key)
 
void resize (int capacity)
 
template<typename Fn >
void foreach (Fn &&fn)
 
template<typename Fn >
void foreach (Fn &&fn) const
 

Detailed Description

template<typename T, typename K, typename Traits = T>
class skia_private::THashTable< T, K, Traits >

Definition at line 32 of file SkTHash.h.

Constructor & Destructor Documentation

◆ THashTable() [1/3]

template<typename T , typename K , typename Traits = T>
skia_private::THashTable< T, K, Traits >::THashTable ( )
default

◆ ~THashTable()

template<typename T , typename K , typename Traits = T>
skia_private::THashTable< T, K, Traits >::~THashTable ( )
default

◆ THashTable() [2/3]

template<typename T , typename K , typename Traits = T>
skia_private::THashTable< T, K, Traits >::THashTable ( const THashTable< T, K, Traits > &  that)
inline

Definition at line 37 of file SkTHash.h.

37{ *this = that; }

◆ THashTable() [3/3]

template<typename T , typename K , typename Traits = T>
skia_private::THashTable< T, K, Traits >::THashTable ( THashTable< T, K, Traits > &&  that)
inline

Definition at line 38 of file SkTHash.h.

38{ *this = std::move(that); }

Member Function Documentation

◆ approxBytesUsed()

template<typename T , typename K , typename Traits = T>
size_t skia_private::THashTable< T, K, Traits >::approxBytesUsed ( ) const
inline

Definition at line 74 of file SkTHash.h.

74{ return fCapacity * sizeof(Slot); }

◆ capacity()

template<typename T , typename K , typename Traits = T>
int skia_private::THashTable< T, K, Traits >::capacity ( ) const
inline

Definition at line 71 of file SkTHash.h.

71{ return fCapacity; }

◆ count()

template<typename T , typename K , typename Traits = T>
int skia_private::THashTable< T, K, Traits >::count ( ) const
inline

Definition at line 67 of file SkTHash.h.

67{ return fCount; }

◆ find()

template<typename T , typename K , typename Traits = T>
T * skia_private::THashTable< T, K, Traits >::find ( const K key) const
inline

Definition at line 96 of file SkTHash.h.

96 {
97 uint32_t hash = Hash(key);
98 int index = hash & (fCapacity-1);
99 for (int n = 0; n < fCapacity; n++) {
100 Slot& s = fSlots[index];
101 if (s.empty()) {
102 return nullptr;
103 }
104 if (hash == s.fHash && key == Traits::GetKey(*s)) {
105 return &*s;
106 }
107 index = this->next(index);
108 }
109 SkASSERT(fCapacity == fCount);
110 return nullptr;
111 }
#define SkASSERT(cond)
Definition SkAssert.h:116
static uint32_t hash(const SkShaderBase::GradientInfo &v)
struct MyStruct s

◆ findOrNull()

template<typename T , typename K , typename Traits = T>
T skia_private::THashTable< T, K, Traits >::findOrNull ( const K key) const
inline

Definition at line 115 of file SkTHash.h.

115 {
116 if (T* p = this->find(key)) {
117 return *p;
118 }
119 return nullptr;
120 }
T * find(const K &key) const
Definition SkTHash.h:96
#define T

◆ foreach() [1/2]

template<typename T , typename K , typename Traits = T>
template<typename Fn >
void skia_private::THashTable< T, K, Traits >::foreach ( Fn &&  fn)
inline

Definition at line 173 of file SkTHash.h.

173 {
174 for (int i = 0; i < fCapacity; i++) {
175 if (fSlots[i].has_value()) {
176 fn(&*fSlots[i]);
177 }
178 }
179 }

◆ foreach() [2/2]

template<typename T , typename K , typename Traits = T>
template<typename Fn >
void skia_private::THashTable< T, K, Traits >::foreach ( Fn &&  fn) const
inline

Definition at line 183 of file SkTHash.h.

183 {
184 for (int i = 0; i < fCapacity; i++) {
185 if (fSlots[i].has_value()) {
186 fn(*fSlots[i]);
187 }
188 }
189 }

◆ operator=() [1/2]

template<typename T , typename K , typename Traits = T>
THashTable & skia_private::THashTable< T, K, Traits >::operator= ( const THashTable< T, K, Traits > &  that)
inline

Definition at line 40 of file SkTHash.h.

40 {
41 if (this != &that) {
42 fCount = that.fCount;
43 fCapacity = that.fCapacity;
44 fSlots.reset(new Slot[that.fCapacity]);
45 for (int i = 0; i < fCapacity; i++) {
46 fSlots[i] = that.fSlots[i];
47 }
48 }
49 return *this;
50 }

◆ operator=() [2/2]

template<typename T , typename K , typename Traits = T>
THashTable & skia_private::THashTable< T, K, Traits >::operator= ( THashTable< T, K, Traits > &&  that)
inline

Definition at line 52 of file SkTHash.h.

52 {
53 if (this != &that) {
54 fCount = that.fCount;
55 fCapacity = that.fCapacity;
56 fSlots = std::move(that.fSlots);
57
58 that.fCount = that.fCapacity = 0;
59 }
60 return *this;
61 }

◆ remove()

template<typename T , typename K , typename Traits = T>
void skia_private::THashTable< T, K, Traits >::remove ( const K key)
inline

Definition at line 146 of file SkTHash.h.

146 {
148 }
#define SkAssertResult(cond)
Definition SkAssert.h:123
bool removeIfExists(const K &key)
Definition SkTHash.h:124

◆ removeIfExists()

template<typename T , typename K , typename Traits = T>
bool skia_private::THashTable< T, K, Traits >::removeIfExists ( const K key)
inline

Definition at line 124 of file SkTHash.h.

124 {
125 uint32_t hash = Hash(key);
126 int index = hash & (fCapacity-1);
127 for (int n = 0; n < fCapacity; n++) {
128 Slot& s = fSlots[index];
129 if (s.empty()) {
130 return false;
131 }
132 if (hash == s.fHash && key == Traits::GetKey(*s)) {
133 this->removeSlot(index);
134 if (4 * fCount <= fCapacity && fCapacity > 4) {
135 this->resize(fCapacity / 2);
136 }
137 return true;
138 }
139 index = this->next(index);
140 }
141 SkASSERT(fCapacity == fCount);
142 return false;
143 }
void resize(int capacity)
Definition SkTHash.h:152

◆ reset()

template<typename T , typename K , typename Traits = T>
void skia_private::THashTable< T, K, Traits >::reset ( )
inline

Definition at line 64 of file SkTHash.h.

64{ *this = THashTable(); }

◆ resize()

template<typename T , typename K , typename Traits = T>
void skia_private::THashTable< T, K, Traits >::resize ( int  capacity)
inline

Definition at line 152 of file SkTHash.h.

152 {
153 SkASSERT(capacity >= fCount);
154 int oldCapacity = fCapacity;
155 SkDEBUGCODE(int oldCount = fCount);
156
157 fCount = 0;
158 fCapacity = capacity;
159 std::unique_ptr<Slot[]> oldSlots = std::move(fSlots);
160 fSlots.reset(new Slot[capacity]);
161
162 for (int i = 0; i < oldCapacity; i++) {
163 Slot& s = oldSlots[i];
164 if (s.has_value()) {
165 this->uncheckedSet(*std::move(s));
166 }
167 }
168 SkASSERT(fCount == oldCount);
169 }
#define SkDEBUGCODE(...)
Definition SkDebug.h:23
int capacity() const
Definition SkTHash.h:71

◆ set()

template<typename T , typename K , typename Traits = T>
T * skia_private::THashTable< T, K, Traits >::set ( T  val)
inline

Definition at line 88 of file SkTHash.h.

88 {
89 if (4 * fCount >= 3 * fCapacity) {
90 this->resize(fCapacity > 0 ? fCapacity * 2 : 4);
91 }
92 return this->uncheckedSet(std::move(val));
93 }

The documentation for this class was generated from the following file: