Krita Source Code Documentation
Loading...
Searching...
No Matches
kis_tile_data_store_iterators.h
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2010 Dmitry Kazakov <dimula73@gmail.com>
3 * SPDX-FileCopyrightText: 2018 Andrey Kamakin <a.kamakin@icloud.com>
4 *
5 * SPDX-License-Identifier: GPL-2.0-or-later
6 */
7
8#ifndef KIS_TILE_DATA_STORE_ITERATORS_H_
9#define KIS_TILE_DATA_STORE_ITERATORS_H_
10
11#include "kis_tile_data.h"
12#include "kis_debug.h"
13
29{
30public:
37
39 {
40 return m_iterator.getValue();
41 }
42
43 inline KisTileData* next()
44 {
45 KisTileData *current = m_iterator.getValue();
46 m_iterator.next();
47 return current;
48 }
49
50 inline bool hasNext() const
51 {
52 return m_iterator.isValid();
53 }
54
55 inline bool trySwapOut(KisTileData *td)
56 {
57 if (td == m_iterator.getValue()) {
58 m_iterator.next();
59 }
60
61 return m_store->trySwapTileData(td);
62 }
63
64private:
68};
69
78
80{
81public:
83 int startIndex,
84 KisTileDataStore *store)
85 : m_map(map),
86 m_store(store)
87 {
88 m_iterator.setMap(m_map);
89 m_finalPosition = m_iterator.getValue()->m_tileNumber;
90 m_startItem = m_map.get(startIndex);
91
92 if (m_iterator.getValue() == m_startItem || !m_startItem) {
93 m_startItem = 0;
94 m_endReached = true;
95 } else {
96 while (m_iterator.getValue() != m_startItem) {
97 m_iterator.next();
98 }
99 m_endReached = false;
100 }
101 }
102
104 {
105 if (!m_iterator.isValid()) {
106 m_iterator.setMap(m_map);
107 m_endReached = true;
108 }
109
110 return m_iterator.getValue();
111 }
112
114 {
115 if (!m_iterator.isValid()) {
116 m_iterator.setMap(m_map);
117 m_endReached = true;
118 }
119
120 KisTileData *current = m_iterator.getValue();
121 m_iterator.next();
122 return current;
123 }
124
125 inline bool hasNext() const
126 {
127 return !(m_endReached && m_iterator.getValue() == m_startItem);
128 }
129
130 inline bool trySwapOut(KisTileData *td)
131 {
132 if (td == m_iterator.getValue()) {
133 m_iterator.next();
134 }
135
136 return m_store->trySwapTileData(td);
137 }
138
139private:
140 friend class KisTileDataStore;
141 inline int getFinalPosition()
142 {
143 if (!m_iterator.isValid()) {
144 return m_finalPosition;
145 }
146
147 return m_iterator.getValue()->m_tileNumber;
148 }
149
150private:
157};
158
159#endif /* KIS_TILE_DATA_STORE_ITERATORS_H_ */
160
Value get(Key key)
ConcurrentMap< int, KisTileData * > & m_map
KisTileDataStoreClockIterator(ConcurrentMap< int, KisTileData * > &map, int startIndex, KisTileDataStore *store)
ConcurrentMap< int, KisTileData * >::Iterator m_iterator
KisTileDataStoreIterator(ConcurrentMap< int, KisTileData * > &map, KisTileDataStore *store)
ConcurrentMap< int, KisTileData * >::Iterator m_iterator
ConcurrentMap< int, KisTileData * > & m_map
KisTileDataStoreReverseIterator(ConcurrentMap< int, KisTileData * > &map, KisTileDataStore *store)
bool trySwapTileData(KisTileData *td)