package kit: internalize BPackageDataReader
It is no longer public (or even private) API. BPackageDataReaderFactory returns a BAbstractBufferedDataReader instead. The advantage is that the latter doesn't have hpkg format specific dependencies.
This commit is contained in:
@@ -15,27 +15,9 @@ namespace BHPKG {
|
||||
|
||||
|
||||
class BBufferCache;
|
||||
class BDataOutput;
|
||||
class BPackageData;
|
||||
|
||||
|
||||
class BPackageDataReader : public BDataReader {
|
||||
public:
|
||||
BPackageDataReader(BDataReader* dataReader);
|
||||
virtual ~BPackageDataReader();
|
||||
|
||||
virtual status_t Init(const BPackageData& data) = 0;
|
||||
|
||||
virtual status_t ReadData(off_t offset, void* buffer,
|
||||
size_t size);
|
||||
virtual status_t ReadDataToOutput(off_t offset, size_t size,
|
||||
BDataOutput* output) = 0;
|
||||
|
||||
protected:
|
||||
BDataReader* fDataReader;
|
||||
};
|
||||
|
||||
|
||||
class BPackageDataReaderFactory {
|
||||
public:
|
||||
BPackageDataReaderFactory(
|
||||
@@ -43,7 +25,7 @@ public:
|
||||
|
||||
status_t CreatePackageDataReader(BDataReader* dataReader,
|
||||
const BPackageData& data,
|
||||
BPackageDataReader*& _reader);
|
||||
BAbstractBufferedDataReader*& _reader);
|
||||
|
||||
private:
|
||||
BBufferCache* fBufferCache;
|
||||
|
||||
@@ -15,7 +15,6 @@ namespace BHPKG {
|
||||
|
||||
|
||||
class BBufferCache;
|
||||
class BDataOutput;
|
||||
|
||||
|
||||
namespace V1 {
|
||||
@@ -24,23 +23,6 @@ namespace V1 {
|
||||
class BPackageData;
|
||||
|
||||
|
||||
class BPackageDataReader : public BDataReader {
|
||||
public:
|
||||
BPackageDataReader(BDataReader* dataReader);
|
||||
virtual ~BPackageDataReader();
|
||||
|
||||
virtual status_t Init(const BPackageData& data) = 0;
|
||||
|
||||
virtual status_t ReadData(off_t offset, void* buffer,
|
||||
size_t size);
|
||||
virtual status_t ReadDataToOutput(off_t offset, size_t size,
|
||||
BDataOutput* output) = 0;
|
||||
|
||||
protected:
|
||||
BDataReader* fDataReader;
|
||||
};
|
||||
|
||||
|
||||
class BPackageDataReaderFactory {
|
||||
public:
|
||||
BPackageDataReaderFactory(
|
||||
@@ -48,7 +30,7 @@ public:
|
||||
|
||||
status_t CreatePackageDataReader(BDataReader* dataReader,
|
||||
const BPackageData& data,
|
||||
BPackageDataReader*& _reader);
|
||||
BAbstractBufferedDataReader*& _reader);
|
||||
|
||||
private:
|
||||
BBufferCache* fBufferCache;
|
||||
|
||||
@@ -31,13 +31,13 @@ static status_t
|
||||
read_package_data(const BPackageData& data, BDataReader* dataReader,
|
||||
off_t offset, void* buffer, size_t* bufferSize)
|
||||
{
|
||||
// create a BPackageDataReader
|
||||
BPackageDataReader* reader;
|
||||
// create a PackageDataReader
|
||||
BAbstractBufferedDataReader* reader;
|
||||
status_t error = GlobalFactory::Default()->CreatePackageDataReader(
|
||||
dataReader, data, reader);
|
||||
if (error != B_OK)
|
||||
RETURN_ERROR(error);
|
||||
ObjectDeleter<BPackageDataReader> readerDeleter(reader);
|
||||
ObjectDeleter<BAbstractBufferedDataReader> readerDeleter(reader);
|
||||
|
||||
// check the offset
|
||||
if (offset < 0 || (uint64)offset > data.UncompressedSize())
|
||||
|
||||
@@ -67,7 +67,7 @@ GlobalFactory::Default()
|
||||
|
||||
status_t
|
||||
GlobalFactory::CreatePackageDataReader(BDataReader* dataReader,
|
||||
const BPackageData& data, BPackageDataReader*& _reader)
|
||||
const BPackageData& data, BAbstractBufferedDataReader*& _reader)
|
||||
{
|
||||
return fPackageDataReaderFactory.CreatePackageDataReader(dataReader, data,
|
||||
_reader);
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
|
||||
using BPackageKit::BHPKG::BDataReader;
|
||||
using BPackageKit::BHPKG::BPackageData;
|
||||
using BPackageKit::BHPKG::BPackageDataReader;
|
||||
using BPackageKit::BHPKG::BAbstractBufferedDataReader;
|
||||
using BPackageKit::BHPKG::BPackageDataReaderFactory;
|
||||
using BPackageKit::BHPKG::B_HPKG_DEFAULT_DATA_CHUNK_SIZE_ZLIB;
|
||||
|
||||
@@ -31,7 +31,7 @@ public:
|
||||
|
||||
status_t CreatePackageDataReader(BDataReader* dataReader,
|
||||
const BPackageData& data,
|
||||
BPackageDataReader*& _reader);
|
||||
BAbstractBufferedDataReader*& _reader);
|
||||
|
||||
private:
|
||||
status_t _Init();
|
||||
|
||||
@@ -78,7 +78,7 @@ struct PackageFile::DataAccessor {
|
||||
if (fDataReader == NULL)
|
||||
RETURN_ERROR(B_NO_MEMORY);
|
||||
|
||||
// create a BPackageDataReader
|
||||
// create a PackageDataReader
|
||||
status_t error = GlobalFactory::Default()->CreatePackageDataReader(
|
||||
fDataReader, *fData, fReader);
|
||||
if (error != B_OK)
|
||||
@@ -127,11 +127,11 @@ struct PackageFile::DataAccessor {
|
||||
}
|
||||
|
||||
private:
|
||||
mutex fLock;
|
||||
BPackageData* fData;
|
||||
BDataReader* fDataReader;
|
||||
BPackageDataReader* fReader;
|
||||
void* fFileCache;
|
||||
mutex fLock;
|
||||
BPackageData* fData;
|
||||
BDataReader* fDataReader;
|
||||
BAbstractBufferedDataReader* fReader;
|
||||
void* fFileCache;
|
||||
};
|
||||
|
||||
|
||||
|
||||
@@ -592,13 +592,13 @@ private:
|
||||
status_t _ExtractFileData(BDataReader* dataReader, const BPackageData& data,
|
||||
int fd)
|
||||
{
|
||||
// create a BPackageDataReader
|
||||
BPackageDataReader* reader;
|
||||
// create a PackageDataReader
|
||||
BAbstractBufferedDataReader* reader;
|
||||
status_t error = BPackageDataReaderFactory(&fBufferCache)
|
||||
.CreatePackageDataReader(dataReader, data, reader);
|
||||
if (error != B_OK)
|
||||
return error;
|
||||
ObjectDeleter<BPackageDataReader> readerDeleter(reader);
|
||||
ObjectDeleter<BAbstractBufferedDataReader> readerDeleter(reader);
|
||||
|
||||
// write the data
|
||||
off_t bytesRemaining = data.UncompressedSize();
|
||||
|
||||
@@ -41,35 +41,34 @@ static const size_t kUncompressedReaderBufferSize
|
||||
// #pragma mark - BPackageDataReader
|
||||
|
||||
|
||||
BPackageDataReader::BPackageDataReader(BDataReader* dataReader)
|
||||
:
|
||||
fDataReader(dataReader)
|
||||
{
|
||||
}
|
||||
class PackageDataReader : public BAbstractBufferedDataReader {
|
||||
public:
|
||||
PackageDataReader(BDataReader* dataReader)
|
||||
:
|
||||
fDataReader(dataReader)
|
||||
{
|
||||
}
|
||||
|
||||
virtual ~PackageDataReader()
|
||||
{
|
||||
}
|
||||
|
||||
BPackageDataReader::~BPackageDataReader()
|
||||
{
|
||||
}
|
||||
virtual status_t Init(const BPackageData& data) = 0;
|
||||
|
||||
|
||||
status_t
|
||||
BPackageDataReader::ReadData(off_t offset, void* buffer, size_t size)
|
||||
{
|
||||
BBufferDataOutput output(buffer, size);
|
||||
return ReadDataToOutput(offset, size, &output);
|
||||
}
|
||||
protected:
|
||||
BDataReader* fDataReader;
|
||||
};
|
||||
|
||||
|
||||
// #pragma mark - UncompressedPackageDataReader
|
||||
|
||||
|
||||
class UncompressedPackageDataReader : public BPackageDataReader {
|
||||
class UncompressedPackageDataReader : public PackageDataReader {
|
||||
public:
|
||||
UncompressedPackageDataReader(BDataReader* dataReader,
|
||||
BBufferCache* bufferCache)
|
||||
:
|
||||
BPackageDataReader(dataReader),
|
||||
PackageDataReader(dataReader),
|
||||
fBufferCache(bufferCache)
|
||||
{
|
||||
}
|
||||
@@ -144,11 +143,11 @@ private:
|
||||
// #pragma mark - ZlibPackageDataReader
|
||||
|
||||
|
||||
class ZlibPackageDataReader : public BPackageDataReader {
|
||||
class ZlibPackageDataReader : public PackageDataReader {
|
||||
public:
|
||||
ZlibPackageDataReader(BDataReader* dataReader, BBufferCache* bufferCache)
|
||||
:
|
||||
BPackageDataReader(dataReader),
|
||||
PackageDataReader(dataReader),
|
||||
fBufferCache(bufferCache),
|
||||
fUncompressBuffer(NULL),
|
||||
fOffsetTable(NULL)
|
||||
@@ -407,9 +406,9 @@ BPackageDataReaderFactory::BPackageDataReaderFactory(BBufferCache* bufferCache)
|
||||
|
||||
status_t
|
||||
BPackageDataReaderFactory::CreatePackageDataReader(BDataReader* dataReader,
|
||||
const BPackageData& data, BPackageDataReader*& _reader)
|
||||
const BPackageData& data, BAbstractBufferedDataReader*& _reader)
|
||||
{
|
||||
BPackageDataReader* reader;
|
||||
PackageDataReader* reader;
|
||||
|
||||
switch (data.Compression()) {
|
||||
case B_HPKG_COMPRESSION_NONE:
|
||||
|
||||
@@ -887,9 +887,9 @@ PackageWriterImpl::_UpdateReadPackageInfo()
|
||||
throw status_t(error);
|
||||
}
|
||||
|
||||
// create a BPackageDataReader
|
||||
// create a PackageDataReader
|
||||
BFDDataReader packageFileReader(FD());
|
||||
BPackageDataReader* reader;
|
||||
BAbstractBufferedDataReader* reader;
|
||||
error = BPackageDataReaderFactory(&bufferCache)
|
||||
.CreatePackageDataReader(&packageFileReader, data, reader);
|
||||
if (error != B_OK) {
|
||||
@@ -897,7 +897,7 @@ PackageWriterImpl::_UpdateReadPackageInfo()
|
||||
strerror(error));
|
||||
throw status_t(error);
|
||||
}
|
||||
ObjectDeleter<BPackageDataReader> readerDeleter(reader);
|
||||
ObjectDeleter<BAbstractBufferedDataReader> readerDeleter(reader);
|
||||
|
||||
// read the data
|
||||
error = reader->ReadData(0, valueBuffer, size);
|
||||
|
||||
@@ -54,13 +54,13 @@ struct PackageEntryDataFetcher {
|
||||
|
||||
status_t ReadIntoString(BDataReader* dataReader, BString& _contents)
|
||||
{
|
||||
// create a BPackageDataReader
|
||||
BPackageDataReader* reader;
|
||||
// create a PackageDataReader
|
||||
BAbstractBufferedDataReader* reader;
|
||||
status_t result = BPackageDataReaderFactory(&fBufferCache)
|
||||
.CreatePackageDataReader(dataReader, fPackageData, reader);
|
||||
if (result != B_OK)
|
||||
return result;
|
||||
ObjectDeleter<BPackageDataReader> readerDeleter(reader);
|
||||
ObjectDeleter<BAbstractBufferedDataReader> readerDeleter(reader);
|
||||
|
||||
// copy data into the given string
|
||||
int32 bufferSize = fPackageData.UncompressedSize();
|
||||
|
||||
@@ -41,38 +41,37 @@ static const size_t kUncompressedReaderBufferSize
|
||||
= B_HPKG_DEFAULT_DATA_CHUNK_SIZE_ZLIB;
|
||||
|
||||
|
||||
// #pragma mark - BPackageDataReader
|
||||
// #pragma mark - PackageDataReader
|
||||
|
||||
|
||||
BPackageDataReader::BPackageDataReader(BDataReader* dataReader)
|
||||
:
|
||||
fDataReader(dataReader)
|
||||
{
|
||||
}
|
||||
class PackageDataReader : public BAbstractBufferedDataReader {
|
||||
public:
|
||||
PackageDataReader(BDataReader* dataReader)
|
||||
:
|
||||
fDataReader(dataReader)
|
||||
{
|
||||
}
|
||||
|
||||
virtual ~PackageDataReader()
|
||||
{
|
||||
}
|
||||
|
||||
BPackageDataReader::~BPackageDataReader()
|
||||
{
|
||||
}
|
||||
virtual status_t Init(const BPackageData& data) = 0;
|
||||
|
||||
|
||||
status_t
|
||||
BPackageDataReader::ReadData(off_t offset, void* buffer, size_t size)
|
||||
{
|
||||
BBufferDataOutput output(buffer, size);
|
||||
return ReadDataToOutput(offset, size, &output);
|
||||
}
|
||||
protected:
|
||||
BDataReader* fDataReader;
|
||||
};
|
||||
|
||||
|
||||
// #pragma mark - UncompressedPackageDataReader
|
||||
|
||||
|
||||
class UncompressedPackageDataReader : public BPackageDataReader {
|
||||
class UncompressedPackageDataReader : public PackageDataReader {
|
||||
public:
|
||||
UncompressedPackageDataReader(BDataReader* dataReader,
|
||||
BBufferCache* bufferCache)
|
||||
:
|
||||
BPackageDataReader(dataReader),
|
||||
PackageDataReader(dataReader),
|
||||
fBufferCache(bufferCache)
|
||||
{
|
||||
}
|
||||
@@ -147,11 +146,11 @@ private:
|
||||
// #pragma mark - ZlibPackageDataReader
|
||||
|
||||
|
||||
class ZlibPackageDataReader : public BPackageDataReader {
|
||||
class ZlibPackageDataReader : public PackageDataReader {
|
||||
public:
|
||||
ZlibPackageDataReader(BDataReader* dataReader, BBufferCache* bufferCache)
|
||||
:
|
||||
BPackageDataReader(dataReader),
|
||||
PackageDataReader(dataReader),
|
||||
fBufferCache(bufferCache),
|
||||
fUncompressBuffer(NULL),
|
||||
fOffsetTable(NULL)
|
||||
@@ -410,9 +409,9 @@ BPackageDataReaderFactory::BPackageDataReaderFactory(BBufferCache* bufferCache)
|
||||
|
||||
status_t
|
||||
BPackageDataReaderFactory::CreatePackageDataReader(BDataReader* dataReader,
|
||||
const BPackageData& data, BPackageDataReader*& _reader)
|
||||
const BPackageData& data, BAbstractBufferedDataReader*& _reader)
|
||||
{
|
||||
BPackageDataReader* reader;
|
||||
PackageDataReader* reader;
|
||||
|
||||
switch (data.Compression()) {
|
||||
case B_HPKG_COMPRESSION_NONE:
|
||||
|
||||
Reference in New Issue
Block a user