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