Krita Source Code Documentation
Loading...
Searching...
No Matches
kis_tile_data.h
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2009 Dmitry Kazakov <dimula73@gmail.com>
3 *
4 * SPDX-License-Identifier: GPL-2.0-or-later
5 */
6#ifndef KIS_TILE_DATA_H_
7#define KIS_TILE_DATA_H_
8
16
17
18#include "kis_tile_data_store.h"
19
20
21inline quint8* KisTileData::data() const {
22 // WARN: be careful - it can be null when swapped out!
23 return m_data;
24 }
25
26void KisTileData::setData(const quint8 *data) {
27 Q_ASSERT(m_data);
29}
30
31inline quint32 KisTileData::pixelSize() const {
32 return m_pixelSize;
33}
34
35inline bool KisTileData::acquire() {
43 if(m_usersCount == 1) {
44 KisTileData *clone = 0;
45 while(m_clonesStack.pop(clone)) {
46 delete clone;
47 }
48 }
49
50 bool _ref = ref();
51 m_usersCount.ref();
52 return _ref;
53}
54
55inline bool KisTileData::release() {
56 m_usersCount.deref();
57 bool _ref = deref();
58 return _ref;
59}
60
61inline bool KisTileData::ref() const {
62 return m_refCount.ref();
63}
64
65inline bool KisTileData::deref() {
66 bool _ref;
67
68 if (!(_ref = m_refCount.deref())) {
69 m_store->freeTileData(this);
70 return 0;
71 }
72 return _ref;
73}
74
76 return m_store->duplicateTileData(this);
77}
78
80 m_swapLock.lockForRead();
81 if(!m_data) {
82 m_swapLock.unlock();
84 }
85 resetAge();
86}
87
89 m_swapLock.unlock();
90}
91
93 return m_swapChunk;
94}
96 m_swapChunk = chunk;
97}
98
99inline bool KisTileData::mementoed() const {
100 return m_mementoFlag;
101}
103 m_mementoFlag += value ? 1 : -1;
104}
105
106inline bool KisTileData::historical() const {
107 return mementoed() && numUsers() <= 1;
108}
109
110inline int KisTileData::age() const {
111 return m_age;
112}
114 m_age = 0;
115}
116inline void KisTileData::markOld() {
117 m_age++;
118}
119
120inline qint32 KisTileData::numUsers() const {
121 return m_usersCount;
122}
123
124#endif /* KIS_TILE_DATA_H_ */
125
float value(const T *src, size_t ch)
void ensureTileDataLoaded(KisTileData *td)
void freeTileData(KisTileData *td)
KisTileData * duplicateTileData(KisTileData *rhs)
QReadWriteLock m_swapLock
qint32 numUsers() const
void unblockSwapping()
bool mementoed() const
quint32 pixelSize() const
bool ref() const
KisChunk swapChunk() const
KisTileData * clone()
void blockSwapping()
quint8 * data() const
void setSwapChunk(KisChunk chunk)
KisTileDataStore * m_store
void setMementoed(bool value)
void setData(const quint8 *data)
KisTileDataCache m_clonesStack
static const qint32 HEIGHT
static const qint32 WIDTH
int age() const
bool historical() const