83 lines
2.6 KiB
C++
83 lines
2.6 KiB
C++
/*##############################################################################
|
|
## Author: Shaun Reed ##
|
|
## Legal: All Content (c) 2023 Shaun Reed, all rights reserved ##
|
|
## About: Custom IO stream for Qtk to support Qt Resource paths in Assimp ##
|
|
## ##
|
|
## Contact: shaunrd0@gmail.com | URL: www.shaunreed.com | GitHub: shaunrd0 ##
|
|
##############################################################################*/
|
|
|
|
#include "qtkiostream.h"
|
|
|
|
using namespace Qtk;
|
|
|
|
/*******************************************************************************
|
|
* Constructors, Destructors
|
|
******************************************************************************/
|
|
|
|
QtkIOStream::QtkIOStream(const char * pFile, const char * pMode) :
|
|
mFile(pFile) {
|
|
QString mode(pMode);
|
|
bool read = mode.contains('r');
|
|
bool write = mode.contains('w');
|
|
if(read && write) {
|
|
mFile.open(QIODevice::ReadWrite);
|
|
} else if(read) {
|
|
mFile.open(QIODevice::ReadOnly);
|
|
} else if(write) {
|
|
mFile.open(QIODevice::WriteOnly);
|
|
} else {
|
|
qDebug() << "[Qtk::QtkIOStream] Invalid file open mode: " << mode << "\n";
|
|
}
|
|
}
|
|
|
|
/*******************************************************************************
|
|
* Public Member Functions
|
|
******************************************************************************/
|
|
|
|
size_t QtkIOStream::Read(void * pvBuffer, size_t pSize, size_t pCount) {
|
|
size_t read = 0;
|
|
do {
|
|
auto readSize = mFile.read((char *)pvBuffer + read, pSize);
|
|
if(readSize < 0) {
|
|
qDebug() << "[Qtk::QtkIOStream] Failed to read (" << pSize
|
|
<< ") bytes from file at: " << mFile.filesystemFileName().c_str()
|
|
<< "\n";
|
|
return -1;
|
|
}
|
|
read += readSize;
|
|
} while(pCount--);
|
|
return read;
|
|
}
|
|
|
|
size_t QtkIOStream::Write(const void * pvBuffer, size_t pSize, size_t pCount) {
|
|
size_t wrote = 0;
|
|
do {
|
|
auto writeSize = mFile.write((char *)pvBuffer + wrote, pSize);
|
|
if(writeSize < 0) {
|
|
qDebug() << "[Qtk::QtkIOStream] Failed to write buffer with size ("
|
|
<< pSize
|
|
<< ") to file at: " << mFile.filesystemFileName().c_str()
|
|
<< "\n";
|
|
return -1;
|
|
}
|
|
wrote += writeSize;
|
|
} while(pCount--);
|
|
return wrote;
|
|
}
|
|
|
|
aiReturn QtkIOStream::Seek(size_t pOffset, aiOrigin pOrigin) {
|
|
return mFile.seek(pOffset) ? aiReturn_SUCCESS : aiReturn_FAILURE;
|
|
}
|
|
|
|
size_t QtkIOStream::Tell() const {
|
|
return mFile.pos();
|
|
}
|
|
|
|
size_t QtkIOStream::FileSize() const {
|
|
return mFile.size();
|
|
}
|
|
|
|
void QtkIOStream::Flush() {
|
|
mFile.flush();
|
|
}
|