strawberry-audio-player-win.../3rdparty/taglib/mod/modfilebase.cpp

123 lines
3.8 KiB
C++

/***************************************************************************
copyright : (C) 2011 by Mathias Panzenböck
email : grosser.meister.morti@gmx.net
***************************************************************************/
/***************************************************************************
* This library is free software; you can redistribute it and/or modify *
* it under the terms of the GNU Lesser General Public License version *
* 2.1 as published by the Free Software Foundation. *
* *
* 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 *
* Lesser General Public License for more details. *
* *
* You should have received a copy of the GNU Lesser General Public *
* License along with this library; if not, write to the Free Software *
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA *
* 02110-1301 USA *
* *
* Alternatively, this file is available under the Mozilla Public *
* License Version 1.1. You may obtain a copy of the License at *
* http://www.mozilla.org/MPL/ *
***************************************************************************/
#include "tdebug.h"
#include "modfilebase.h"
using namespace Strawberry_TagLib::TagLib;
using namespace Mod;
Mod::FileBase::FileBase(FileName file) : Strawberry_TagLib::TagLib::File(file) {}
Mod::FileBase::FileBase(IOStream *stream) : Strawberry_TagLib::TagLib::File(stream) {}
void Mod::FileBase::writeString(const String &s, unsigned int size, char padding) {
ByteVector data(s.data(String::Latin1));
data.resize(size, padding);
writeBlock(data);
}
bool Mod::FileBase::readString(String &s, unsigned int size) {
ByteVector data(readBlock(size));
if (data.size() < size) return false;
const size_t index = data.find(static_cast<char>(0));
if (index != ByteVector::npos()) {
data.resize(index);
}
data.replace('\xff', ' ');
s = data;
return true;
}
void Mod::FileBase::writeByte(unsigned char _byte) {
ByteVector data(1, _byte);
writeBlock(data);
}
void Mod::FileBase::writeU16L(unsigned short number) {
writeBlock(ByteVector::fromUInt16LE(number));
}
void Mod::FileBase::writeU32L(unsigned int number) {
writeBlock(ByteVector::fromUInt32LE(number));
}
void Mod::FileBase::writeU16B(unsigned short number) {
writeBlock(ByteVector::fromUInt16BE(number));
}
void Mod::FileBase::writeU32B(unsigned int number) {
writeBlock(ByteVector::fromUInt32BE(number));
}
bool Mod::FileBase::readByte(unsigned char &_byte) {
ByteVector data(readBlock(1));
if (data.size() < 1) return false;
_byte = data[0];
return true;
}
bool Mod::FileBase::readU16L(unsigned short &number) {
ByteVector data(readBlock(2));
if (data.size() < 2) return false;
number = data.toUInt16LE(0);
return true;
}
bool Mod::FileBase::readU32L(unsigned int &number) {
ByteVector data(readBlock(4));
if (data.size() < 4) return false;
number = data.toUInt32LE(0);
return true;
}
bool Mod::FileBase::readU16B(unsigned short &number) {
ByteVector data(readBlock(2));
if (data.size() < 2) return false;
number = data.toUInt16BE(0);
return true;
}
bool Mod::FileBase::readU32B(unsigned int &number) {
ByteVector data(readBlock(4));
if (data.size() < 4) return false;
number = data.toUInt32BE(0);
return true;
}