1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85
|
/*
Sonivox EAS Synthesizer for Qt applications
Copyright (C) 2016-2024, Pedro Lopez-Cabanillas <plcl@users.sf.net>
This library is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include <QDebug>
#include "filewrapper.h"
static int
readAt(void *handle, void *buffer, int pos, int size) {
return static_cast<FileWrapper*>(handle)->readAt(buffer, pos, size);
}
static int
size(void *handle) {
return static_cast<FileWrapper*>(handle)->size();
}
FileWrapper::FileWrapper(const QString &path)
: m_ok{false}
, m_Base{0}
, m_Length{0}
, m_easFile{}
{
//qDebug() << Q_FUNC_INFO << path;
m_file.setFileName(path);
m_ok = m_file.open(QIODevice::ReadOnly);
if (m_ok) {
//qDebug("FileWrapper. opened %s", path);
m_Length = m_file.size();
m_easFile.handle = this;
m_easFile.readAt = ::readAt;
m_easFile.size = ::size;
}
}
FileWrapper::FileWrapper(const char *path)
: FileWrapper(QString::fromLocal8Bit(path))
{
//qDebug("FileWrapper(path=%s)", path);
}
FileWrapper::~FileWrapper() {
//qDebug("~FileWrapper");
m_file.close();
}
int
FileWrapper::readAt(void *buffer, int offset, int size) {
//qDebug("readAt(%p, %d, %d)", buffer, offset, size);
m_file.seek(offset);
if (offset + size > m_Length) {
size = m_Length - offset;
}
return m_file.read((char *)buffer, size);
}
int
FileWrapper::size() {
//qDebug("size() = %d", int(mLength));
return m_Length;
}
bool FileWrapper::ok() const
{
return m_ok;
}
EAS_FILE_LOCATOR
FileWrapper::getLocator() {
return &m_easFile;
}
|