Krita Source Code Documentation
Loading...
Searching...
No Matches
KisAslWriterUtils::OffsetStreamPusher< OffsetType, byteOrder > Class Template Reference

#include <kis_asl_writer_utils.h>

Public Member Functions

 OffsetStreamPusher (QIODevice &device, qint64 alignOnExit=0, qint64 externalSizeTagOffset=-1)
 
 ~OffsetStreamPusher ()
 

Private Attributes

qint64 m_alignOnExit
 
qint64 m_chunkStartPos
 
QIODevice & m_device
 
qint64 m_externalSizeTagOffset
 

Detailed Description

template<class OffsetType, psd_byte_order byteOrder>
class KisAslWriterUtils::OffsetStreamPusher< OffsetType, byteOrder >

Definition at line 160 of file kis_asl_writer_utils.h.

Constructor & Destructor Documentation

◆ OffsetStreamPusher()

template<class OffsetType , psd_byte_order byteOrder>
KisAslWriterUtils::OffsetStreamPusher< OffsetType, byteOrder >::OffsetStreamPusher ( QIODevice & device,
qint64 alignOnExit = 0,
qint64 externalSizeTagOffset = -1 )
inline

Definition at line 163 of file kis_asl_writer_utils.h.

164 : m_device(device)
165 , m_alignOnExit(alignOnExit)
166 , m_externalSizeTagOffset(externalSizeTagOffset)
167 {
169
170 if (externalSizeTagOffset < 0) {
171 const OffsetType fakeObjectSize = OffsetType(0xdeadbeef);
172 SAFE_WRITE_EX(byteOrder, m_device, fakeObjectSize);
173 }
174 }
#define SAFE_WRITE_EX(byteOrder, device, varname)

References KisAslWriterUtils::OffsetStreamPusher< OffsetType, byteOrder >::m_chunkStartPos, KisAslWriterUtils::OffsetStreamPusher< OffsetType, byteOrder >::m_device, and SAFE_WRITE_EX.

◆ ~OffsetStreamPusher()

template<class OffsetType , psd_byte_order byteOrder>
KisAslWriterUtils::OffsetStreamPusher< OffsetType, byteOrder >::~OffsetStreamPusher ( )
inline

Definition at line 176 of file kis_asl_writer_utils.h.

177 {
178 try {
179 if (m_alignOnExit) {
180 qint64 currentPos = m_device.pos();
181 const qint64 alignedPos = alignOffsetCeil(currentPos, m_alignOnExit);
182
183 for (; currentPos < alignedPos; currentPos++) {
184 quint8 padding = 0;
185 SAFE_WRITE_EX(byteOrder, m_device, padding);
186 }
187 }
188
189 const qint64 currentPos = m_device.pos();
190
191 qint64 writtenDataSize = 0;
192 qint64 sizeFiledOffset = 0;
193
194 if (m_externalSizeTagOffset >= 0) {
195 writtenDataSize = currentPos - m_chunkStartPos;
196 sizeFiledOffset = m_externalSizeTagOffset;
197 } else {
198 writtenDataSize = currentPos - m_chunkStartPos - sizeof(OffsetType);
199 sizeFiledOffset = m_chunkStartPos;
200 }
201
202 m_device.seek(sizeFiledOffset);
203 const OffsetType realObjectSize = writtenDataSize;
204 SAFE_WRITE_EX(byteOrder, m_device, realObjectSize);
205 m_device.seek(currentPos);
206 } catch (ASLWriteException &e) {
207 warnKrita << PREPEND_METHOD(e.what());
208 }
209 }
#define PREPEND_METHOD(msg)
Definition kis_debug.h:172
#define warnKrita
Definition kis_debug.h:87
qint64 alignOffsetCeil(qint64 pos, qint64 alignment)

References KisAslWriterUtils::alignOffsetCeil(), KisAslWriterUtils::OffsetStreamPusher< OffsetType, byteOrder >::m_alignOnExit, KisAslWriterUtils::OffsetStreamPusher< OffsetType, byteOrder >::m_chunkStartPos, KisAslWriterUtils::OffsetStreamPusher< OffsetType, byteOrder >::m_device, KisAslWriterUtils::OffsetStreamPusher< OffsetType, byteOrder >::m_externalSizeTagOffset, PREPEND_METHOD, SAFE_WRITE_EX, and warnKrita.

Member Data Documentation

◆ m_alignOnExit

template<class OffsetType , psd_byte_order byteOrder>
qint64 KisAslWriterUtils::OffsetStreamPusher< OffsetType, byteOrder >::m_alignOnExit
private

Definition at line 214 of file kis_asl_writer_utils.h.

◆ m_chunkStartPos

template<class OffsetType , psd_byte_order byteOrder>
qint64 KisAslWriterUtils::OffsetStreamPusher< OffsetType, byteOrder >::m_chunkStartPos
private

Definition at line 212 of file kis_asl_writer_utils.h.

◆ m_device

template<class OffsetType , psd_byte_order byteOrder>
QIODevice& KisAslWriterUtils::OffsetStreamPusher< OffsetType, byteOrder >::m_device
private

Definition at line 213 of file kis_asl_writer_utils.h.

◆ m_externalSizeTagOffset

template<class OffsetType , psd_byte_order byteOrder>
qint64 KisAslWriterUtils::OffsetStreamPusher< OffsetType, byteOrder >::m_externalSizeTagOffset
private

Definition at line 215 of file kis_asl_writer_utils.h.


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