Krita Source Code Documentation
Loading...
Searching...
No Matches
KisRandomAccessor2 Class Reference

#include <kis_random_accessor.h>

+ Inheritance diagram for KisRandomAccessor2:

Classes

struct  KisTileInfo
 

Public Member Functions

 KisRandomAccessor2 (const KisTiledRandomAccessor &lhs)
 
 KisRandomAccessor2 (KisTiledDataManager *ktm, qint32 offsetX, qint32 offsetY, bool writable, KisIteratorCompleteListener *completeListener)
 
void moveTo (qint32 x, qint32 y) override
 Move to a given x,y position, fetch tiles and data.
 
qint32 numContiguousColumns (qint32 x) const override
 
qint32 numContiguousRows (qint32 y) const override
 
const quint8 * oldRawData () const override
 
quint8 * rawData () override
 
const quint8 * rawDataConst () const override
 
qint32 rowStride (qint32 x, qint32 y) const override
 
qint32 x () const override
 
qint32 y () const override
 
 ~KisRandomAccessor2 () override
 
- Public Member Functions inherited from KisRandomAccessorNG
 KisRandomAccessorNG ()
 
 ~KisRandomAccessorNG () override
 
- Public Member Functions inherited from KisRandomConstAccessorNG
 KisRandomConstAccessorNG ()
 
 ~KisRandomConstAccessorNG () override
 
- Public Member Functions inherited from KisBaseConstAccessor
 KisBaseConstAccessor ()
 
virtual ~KisBaseConstAccessor ()
 
- Public Member Functions inherited from KisShared
bool deref ()
 
bool ref ()
 
int refCount ()
 
QAtomicInt * sharedWeakReference ()
 
- Public Member Functions inherited from KisBaseAccessor
 KisBaseAccessor ()
 
virtual ~KisBaseAccessor ()
 

Private Member Functions

KisTileInfofetchTileData (qint32 col, qint32 row)
 
void lockOldTile (KisTileSP &tile)
 
void lockTile (KisTileSP &tile)
 
void unlockOldTile (KisTileSP &tile)
 
void unlockTile (KisTileSP &tile)
 
quint32 xToCol (quint32 x) const
 
quint32 yToRow (quint32 y) const
 

Private Attributes

KisIteratorCompleteListenerm_completeListener
 
quint8 * m_data
 
KisTiledDataManagerm_ktm
 
int m_lastX
 
int m_lastY
 
qint32 m_offsetX
 
qint32 m_offsetY
 
const quint8 * m_oldData
 
qint32 m_pixelSize
 
KisTileInfo ** m_tilesCache
 
quint32 m_tilesCacheSize
 
bool m_writable
 

Static Private Attributes

static const quint32 CACHESIZE = 4
 

Additional Inherited Members

- Protected Member Functions inherited from KisShared
 KisShared ()
 
 ~KisShared ()
 

Detailed Description

Definition at line 17 of file kis_random_accessor.h.

Constructor & Destructor Documentation

◆ KisRandomAccessor2() [1/2]

KisRandomAccessor2::KisRandomAccessor2 ( KisTiledDataManager * ktm,
qint32 offsetX,
qint32 offsetY,
bool writable,
KisIteratorCompleteListener * completeListener )

Definition at line 15 of file kis_random_accessor.cc.

15 :
16 m_ktm(ktm),
17 m_tilesCache(new KisTileInfo*[CACHESIZE]),
20 m_data(0),
21 m_oldData(0),
22 m_writable(writable),
23 m_lastX(0),
24 m_lastY(0),
25 m_offsetX(offsetX),
26 m_offsetY(offsetY),
27 m_completeListener(completeListener)
28{
29 Q_ASSERT(ktm != 0);
30}
KisTileInfo ** m_tilesCache
KisIteratorCompleteListener * m_completeListener
static const quint32 CACHESIZE
KisTiledDataManager * m_ktm

◆ KisRandomAccessor2() [2/2]

KisRandomAccessor2::KisRandomAccessor2 ( const KisTiledRandomAccessor & lhs)

◆ ~KisRandomAccessor2()

KisRandomAccessor2::~KisRandomAccessor2 ( )
override

Definition at line 32 of file kis_random_accessor.cc.

33{
34 for (uint i = 0; i < m_tilesCacheSize; i++) {
35 unlockTile(m_tilesCache[i]->tile);
36 unlockOldTile(m_tilesCache[i]->oldtile);
37 delete m_tilesCache[i];
38 }
39 delete [] m_tilesCache;
40
43 }
44}
unsigned int uint
void unlockTile(KisTileSP &tile)
void unlockOldTile(KisTileSP &tile)
virtual void notifyWritableIteratorCompleted()=0

References m_completeListener, m_tilesCache, m_tilesCacheSize, m_writable, KisIteratorCompleteListener::notifyWritableIteratorCompleted(), unlockOldTile(), and unlockTile().

Member Function Documentation

◆ fetchTileData()

KisRandomAccessor2::KisTileInfo * KisRandomAccessor2::fetchTileData ( qint32 col,
qint32 row )
private

Definition at line 109 of file kis_random_accessor.cc.

110{
111 KisTileInfo* kti = new KisTileInfo;
112
113 m_ktm->getTilesPair(col, row, m_writable, &kti->tile, &kti->oldtile);
114
115 lockTile(kti->tile);
116 kti->data = kti->tile->data();
117
118 lockOldTile(kti->oldtile);
119 kti->oldData = kti->oldtile->data();
120
121 kti->area_x1 = col * KisTileData::HEIGHT;
122 kti->area_y1 = row * KisTileData::WIDTH;
123 kti->area_x2 = kti->area_x1 + KisTileData::HEIGHT - 1;
124 kti->area_y2 = kti->area_y1 + KisTileData::WIDTH - 1;
125
126 return kti;
127}
void lockTile(KisTileSP &tile)
void lockOldTile(KisTileSP &tile)
static const qint32 HEIGHT
static const qint32 WIDTH
void getTilesPair(qint32 col, qint32 row, bool writable, KisTileSP *tile, KisTileSP *oldTile)

References KisRandomAccessor2::KisTileInfo::area_x1, KisRandomAccessor2::KisTileInfo::area_x2, KisRandomAccessor2::KisTileInfo::area_y1, KisRandomAccessor2::KisTileInfo::area_y2, KisRandomAccessor2::KisTileInfo::data, KisTile::data(), KisTiledDataManager::getTilesPair(), KisTileData::HEIGHT, lockOldTile(), lockTile(), m_ktm, m_writable, KisRandomAccessor2::KisTileInfo::oldData, KisRandomAccessor2::KisTileInfo::oldtile, KisRandomAccessor2::KisTileInfo::tile, and KisTileData::WIDTH.

◆ lockOldTile()

void KisRandomAccessor2::lockOldTile ( KisTileSP & tile)
inlineprivate

Definition at line 43 of file kis_random_accessor.h.

43 {
44 // Doesn't depend on access type
45 tile->lockForRead();
46 }
void lockForRead() const
Definition kis_tile.cc:208

References KisTile::lockForRead().

◆ lockTile()

void KisRandomAccessor2::lockTile ( KisTileSP & tile)
inlineprivate

Definition at line 36 of file kis_random_accessor.h.

36 {
37 if (m_writable)
38 tile->lockForWrite();
39 else
40 tile->lockForRead();
41 }
void lockForWrite()
Definition kis_tile.cc:221

References KisTile::lockForRead(), KisTile::lockForWrite(), and m_writable.

◆ moveTo()

void KisRandomAccessor2::moveTo ( qint32 x,
qint32 y )
overridevirtual

Move to a given x,y position, fetch tiles and data.

Implements KisRandomConstAccessorNG.

Reimplemented in KisWrappedRandomAccessor.

Definition at line 46 of file kis_random_accessor.cc.

47{
48 m_lastX = x;
49 m_lastY = y;
50
51 x -= m_offsetX;
52 y -= m_offsetY;
53
54 // Look in the cache if the tile if the data is available
55 for (uint i = 0; i < m_tilesCacheSize; i++) {
56 if (x >= m_tilesCache[i]->area_x1 && x <= m_tilesCache[i]->area_x2 &&
57 y >= m_tilesCache[i]->area_y1 && y <= m_tilesCache[i]->area_y2) {
58 KisTileInfo* kti = m_tilesCache[i];
59 quint32 offset = x - kti->area_x1 + (y - kti->area_y1) * KisTileData::WIDTH;
60 offset *= m_pixelSize;
61 m_data = kti->data + offset;
62 m_oldData = kti->oldData + offset;
63 if (i > 0) {
64 memmove(m_tilesCache + 1, m_tilesCache, i * sizeof(KisTileInfo*));
65 m_tilesCache[0] = kti;
66 }
67 return;
68 }
69 }
70 // The tile wasn't in cache
71 if (m_tilesCacheSize == KisRandomAccessor2::CACHESIZE) { // Remove last element of cache
74 delete m_tilesCache[CACHESIZE-1];
75 } else {
77 }
78 quint32 col = xToCol(x);
79 quint32 row = yToRow(y);
80 KisTileInfo* kti = fetchTileData(col, row);
81 quint32 offset = x - kti->area_x1 + (y - kti->area_y1) * KisTileData::WIDTH;
82 offset *= m_pixelSize;
83 m_data = kti->data + offset;
84 m_oldData = kti->oldData + offset;
85 memmove(m_tilesCache + 1, m_tilesCache, (KisRandomAccessor2::CACHESIZE - 1) * sizeof(KisTileInfo*));
86 m_tilesCache[0] = kti;
87}
qint32 y() const override
KisTileInfo * fetchTileData(qint32 col, qint32 row)
quint32 xToCol(quint32 x) const
qint32 x() const override
quint32 yToRow(quint32 y) const

References KisRandomAccessor2::KisTileInfo::area_x1, KisRandomAccessor2::KisTileInfo::area_y1, CACHESIZE, KisRandomAccessor2::KisTileInfo::data, fetchTileData(), m_data, m_lastX, m_lastY, m_offsetX, m_offsetY, m_oldData, m_pixelSize, m_tilesCache, m_tilesCacheSize, KisRandomAccessor2::KisTileInfo::oldData, unlockOldTile(), unlockTile(), KisTileData::WIDTH, x(), xToCol(), y(), and yToRow().

◆ numContiguousColumns()

qint32 KisRandomAccessor2::numContiguousColumns ( qint32 x) const
overridevirtual

Implements KisRandomConstAccessorNG.

Reimplemented in KisWrappedRandomAccessor.

Definition at line 129 of file kis_random_accessor.cc.

130{
131 return m_ktm->numContiguousColumns(x - m_offsetX, 0, 0);
132}
qint32 numContiguousColumns(qint32 x, qint32 minY, qint32 maxY) const

References m_ktm, m_offsetX, KisTiledDataManager::numContiguousColumns(), and x().

◆ numContiguousRows()

qint32 KisRandomAccessor2::numContiguousRows ( qint32 y) const
overridevirtual

Implements KisRandomConstAccessorNG.

Reimplemented in KisWrappedRandomAccessor.

Definition at line 134 of file kis_random_accessor.cc.

135{
136 return m_ktm->numContiguousRows(y - m_offsetY, 0, 0);
137}
qint32 numContiguousRows(qint32 y, qint32 minX, qint32 maxX) const

References m_ktm, m_offsetY, KisTiledDataManager::numContiguousRows(), and y().

◆ oldRawData()

const quint8 * KisRandomAccessor2::oldRawData ( ) const
overridevirtual
Returns
a pointer to the pixel data as it was at the moment of the last memento creation.

Implements KisBaseConstAccessor.

Definition at line 96 of file kis_random_accessor.cc.

97{
98#ifdef DEBUG
99 if (!m_ktm->hasCurrentMemento()) warnTiles << "Accessing oldRawData() when no transaction is in progress.";
100#endif
101 return m_oldData;
102}
#define warnTiles
Definition kis_debug.h:91

References KisTiledDataManager::hasCurrentMemento(), m_ktm, m_oldData, and warnTiles.

◆ rawData()

quint8 * KisRandomAccessor2::rawData ( )
overridevirtual
Returns
a pointer to the pixel data. Do NOT interpret the data - leave that to a colorspace

Implements KisBaseAccessor.

Definition at line 90 of file kis_random_accessor.cc.

91{
92 return m_data;
93}

References m_data.

◆ rawDataConst()

const quint8 * KisRandomAccessor2::rawDataConst ( ) const
overridevirtual
Returns
a pointer to the most actual pixel data, this points to the same data as rawData() method of a writable accessor.

Implements KisBaseConstAccessor.

Definition at line 104 of file kis_random_accessor.cc.

105{
106 return m_data;
107}

References m_data.

◆ rowStride()

qint32 KisRandomAccessor2::rowStride ( qint32 x,
qint32 y ) const
overridevirtual

Implements KisRandomConstAccessorNG.

Reimplemented in KisWrappedRandomAccessor.

Definition at line 139 of file kis_random_accessor.cc.

140{
141 return m_ktm->rowStride(x - m_offsetX, y - m_offsetY);
142}
qint32 rowStride(qint32 x, qint32 y) const

References m_ktm, m_offsetX, m_offsetY, KisTiledDataManager::rowStride(), x(), and y().

◆ unlockOldTile()

void KisRandomAccessor2::unlockOldTile ( KisTileSP & tile)
inlineprivate

Definition at line 56 of file kis_random_accessor.h.

56 {
57 tile->unlockForRead();
58 }
void unlockForRead() const
Definition kis_tile.cc:275

References KisTile::unlockForRead().

◆ unlockTile()

void KisRandomAccessor2::unlockTile ( KisTileSP & tile)
inlineprivate

Definition at line 48 of file kis_random_accessor.h.

48 {
49 if (m_writable) {
50 tile->unlockForWrite();
51 } else {
52 tile->unlockForRead();
53 }
54 }
void unlockForWrite()
Definition kis_tile.cc:264

References m_writable, KisTile::unlockForRead(), and KisTile::unlockForWrite().

◆ x()

qint32 KisRandomAccessor2::x ( ) const
overridevirtual

Implements KisBaseConstAccessor.

Reimplemented in KisWrappedRandomAccessor.

Definition at line 144 of file kis_random_accessor.cc.

145{
146 return m_lastX;
147}

References m_lastX.

◆ xToCol()

quint32 KisRandomAccessor2::xToCol ( quint32 x) const
inlineprivate

Definition at line 60 of file kis_random_accessor.h.

60 {
61 return m_ktm ? m_ktm->xToCol(x) : 0;
62 }
qint32 xToCol(qint32 x) const

References m_ktm, x(), and KisTiledDataManager::xToCol().

◆ y()

qint32 KisRandomAccessor2::y ( ) const
overridevirtual

Implements KisBaseConstAccessor.

Reimplemented in KisWrappedRandomAccessor.

Definition at line 149 of file kis_random_accessor.cc.

150{
151 return m_lastY;
152}

References m_lastY.

◆ yToRow()

quint32 KisRandomAccessor2::yToRow ( quint32 y) const
inlineprivate

Definition at line 63 of file kis_random_accessor.h.

63 {
64 return m_ktm ? m_ktm->yToRow(y) : 0;
65 }
qint32 yToRow(qint32 y) const

References m_ktm, y(), and KisTiledDataManager::yToRow().

Member Data Documentation

◆ CACHESIZE

const quint32 KisRandomAccessor2::CACHESIZE = 4
staticprivate

Definition at line 92 of file kis_random_accessor.h.

◆ m_completeListener

KisIteratorCompleteListener* KisRandomAccessor2::m_completeListener
private

Definition at line 91 of file kis_random_accessor.h.

◆ m_data

quint8* KisRandomAccessor2::m_data
private

Definition at line 86 of file kis_random_accessor.h.

◆ m_ktm

KisTiledDataManager* KisRandomAccessor2::m_ktm
private

Definition at line 82 of file kis_random_accessor.h.

◆ m_lastX

int KisRandomAccessor2::m_lastX
private

Definition at line 89 of file kis_random_accessor.h.

◆ m_lastY

int KisRandomAccessor2::m_lastY
private

Definition at line 89 of file kis_random_accessor.h.

◆ m_offsetX

qint32 KisRandomAccessor2::m_offsetX
private

Definition at line 90 of file kis_random_accessor.h.

◆ m_offsetY

qint32 KisRandomAccessor2::m_offsetY
private

Definition at line 90 of file kis_random_accessor.h.

◆ m_oldData

const quint8* KisRandomAccessor2::m_oldData
private

Definition at line 87 of file kis_random_accessor.h.

◆ m_pixelSize

qint32 KisRandomAccessor2::m_pixelSize
private

Definition at line 85 of file kis_random_accessor.h.

◆ m_tilesCache

KisTileInfo** KisRandomAccessor2::m_tilesCache
private

Definition at line 83 of file kis_random_accessor.h.

◆ m_tilesCacheSize

quint32 KisRandomAccessor2::m_tilesCacheSize
private

Definition at line 84 of file kis_random_accessor.h.

◆ m_writable

bool KisRandomAccessor2::m_writable
private

Definition at line 88 of file kis_random_accessor.h.


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