1/* 2 * Copyright 2009-2014, Haiku, Inc. 3 * Distributed under the terms of the MIT License. 4 */ 5#ifndef _PACKAGE__HPKG__DATA_READER_H_ 6#define _PACKAGE__HPKG__DATA_READER_H_ 7 8 9#include <SupportDefs.h> 10 11 12class BDataIO; 13 14 15namespace BPackageKit { 16 17namespace BHPKG { 18 19 20class BDataReader { 21public: 22 virtual ~BDataReader(); 23 24 virtual status_t ReadData(off_t offset, void* buffer, 25 size_t size) = 0; 26}; 27 28 29class BAbstractBufferedDataReader : public BDataReader { 30public: 31 virtual ~BAbstractBufferedDataReader(); 32 33 virtual status_t ReadData(off_t offset, void* buffer, 34 size_t size); 35 virtual status_t ReadDataToOutput(off_t offset, size_t size, 36 BDataIO* output) = 0; 37}; 38 39 40class BFDDataReader : public BDataReader { 41public: 42 BFDDataReader(int fd); 43 44 void SetFD(int fd); 45 46 virtual status_t ReadData(off_t offset, void* buffer, 47 size_t size); 48 49private: 50 int fFD; 51}; 52 53 54class BAttributeDataReader : public BDataReader { 55public: 56 BAttributeDataReader(int fd, 57 const char* attribute, uint32 type); 58 59 virtual status_t ReadData(off_t offset, void* buffer, 60 size_t size); 61 62private: 63 int fFD; 64 uint32 fType; 65 const char* fAttribute; 66}; 67 68 69class BBufferDataReader : public BAbstractBufferedDataReader { 70public: 71 BBufferDataReader(const void* data, size_t size); 72 73 virtual status_t ReadData(off_t offset, void* buffer, 74 size_t size); 75 virtual status_t ReadDataToOutput(off_t offset, size_t size, 76 BDataIO* output); 77 78private: 79 const void* fData; 80 size_t fSize; 81}; 82 83 84} // namespace BHPKG 85 86} // namespace BPackageKit 87 88 89#endif // _PACKAGE__HPKG__DATA_READER_H_ 90