Flutter Engine
The Flutter Engine
Loading...
Searching...
No Matches
Public Types | Public Member Functions | List of all members
SkDeque::Iter Class Reference

#include <SkDeque.h>

Inheritance diagram for SkDeque::Iter:
SkDeque::F2BIter

Public Types

enum  IterStart { kFront_IterStart , kBack_IterStart }
 

Public Member Functions

 Iter ()
 
 Iter (const SkDeque &d, IterStart startLoc)
 
void * next ()
 
void * prev ()
 
void reset (const SkDeque &d, IterStart startLoc)
 

Detailed Description

Definition at line 62 of file SkDeque.h.

Member Enumeration Documentation

◆ IterStart

Enumerator
kFront_IterStart 
kBack_IterStart 

Definition at line 64 of file SkDeque.h.

64 {
67 };
@ kBack_IterStart
Definition SkDeque.h:66
@ kFront_IterStart
Definition SkDeque.h:65

Constructor & Destructor Documentation

◆ Iter() [1/2]

SkDeque::Iter::Iter ( )

Creates an uninitialized iterator. Must be reset()

Definition at line 243 of file SkDeque.cpp.

243: fCurBlock(nullptr), fPos(nullptr), fElemSize(0) {}

◆ Iter() [2/2]

SkDeque::Iter::Iter ( const SkDeque d,
IterStart  startLoc 
)

Definition at line 245 of file SkDeque.cpp.

245 {
246 this->reset(d, startLoc);
247}
m reset()

Member Function Documentation

◆ next()

void * SkDeque::Iter::next ( )

Definition at line 251 of file SkDeque.cpp.

251 {
252 char* pos = fPos;
253
254 if (pos) { // if we were valid, try to move to the next setting
255 char* next = pos + fElemSize;
256 SkASSERT(next <= fCurBlock->fEnd);
257 if (next == fCurBlock->fEnd) { // exhausted this chunk, move to next
258 do {
259 fCurBlock = fCurBlock->fNext;
260 } while (fCurBlock != nullptr && fCurBlock->fBegin == nullptr);
261 next = fCurBlock ? fCurBlock->fBegin : nullptr;
262 }
263 fPos = next;
264 }
265 return pos;
266}
SkPoint pos
#define SkASSERT(cond)
Definition SkAssert.h:116
void * next()
Definition SkDeque.cpp:251
Block * fNext
Definition SkDeque.cpp:15
char * fBegin
Definition SkDeque.cpp:17

◆ prev()

void * SkDeque::Iter::prev ( )

Definition at line 270 of file SkDeque.cpp.

270 {
271 char* pos = fPos;
272
273 if (pos) { // if we were valid, try to move to the prior setting
274 char* prev = pos - fElemSize;
275 SkASSERT(prev >= fCurBlock->fBegin - fElemSize);
276 if (prev < fCurBlock->fBegin) { // exhausted this chunk, move to prior
277 do {
278 fCurBlock = fCurBlock->fPrev;
279 } while (fCurBlock != nullptr && fCurBlock->fEnd == nullptr);
280 prev = fCurBlock ? fCurBlock->fEnd - fElemSize : nullptr;
281 }
282 fPos = prev;
283 }
284 return pos;
285}
void * prev()
Definition SkDeque.cpp:270
Block * fPrev
Definition SkDeque.cpp:16

◆ reset()

void SkDeque::Iter::reset ( const SkDeque d,
IterStart  startLoc 
)

Definition at line 292 of file SkDeque.cpp.

292 {
293 fElemSize = d.fElemSize;
294
295 if (kFront_IterStart == startLoc) {
296 // initialize the iterator to start at the front
297 fCurBlock = d.fFrontBlock;
298 while (fCurBlock && nullptr == fCurBlock->fBegin) {
299 fCurBlock = fCurBlock->fNext;
300 }
301 fPos = fCurBlock ? fCurBlock->fBegin : nullptr;
302 } else {
303 // initialize the iterator to start at the back
304 fCurBlock = d.fBackBlock;
305 while (fCurBlock && nullptr == fCurBlock->fEnd) {
306 fCurBlock = fCurBlock->fPrev;
307 }
308 fPos = fCurBlock ? fCurBlock->fEnd - fElemSize : nullptr;
309 }
310}
VULKAN_HPP_DEFAULT_DISPATCH_LOADER_DYNAMIC_STORAGE auto & d
Definition main.cc:19

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