7 #include "exiv2lib_export.h"
18 #ifndef EXV_XPATH_MEMIO
19 #define EXV_XPATH_MEMIO 0
63 virtual int open() = 0;
72 virtual int close() = 0;
82 virtual size_t write(
const byte* data,
size_t wcount) = 0;
92 virtual size_t write(
BasicIo& src) = 0;
100 virtual int putb(
byte data) = 0;
111 virtual DataBuf read(
size_t rcount) = 0;
124 virtual size_t read(
byte* buf,
size_t rcount) = 0;
135 void readOrThrow(
byte* buf,
size_t rcount,
ErrorCode err = ErrorCode::kerCorruptedMetadata);
142 virtual int getb() = 0;
156 virtual void transfer(
BasicIo& src) = 0;
165 virtual int seek(int64_t offset, Position pos) = 0;
175 void seekOrThrow(int64_t offset, Position pos,
ErrorCode err);
186 virtual byte* mmap(
bool isWriteable =
false) = 0;
193 virtual int munmap() = 0;
203 [[nodiscard]]
virtual size_t tell()
const = 0;
209 [[nodiscard]]
virtual size_t size()
const = 0;
211 [[nodiscard]]
virtual bool isopen()
const = 0;
213 [[nodiscard]]
virtual int error()
const = 0;
215 [[nodiscard]]
virtual bool eof()
const = 0;
221 [[nodiscard]]
virtual const std::string& path() const noexcept = 0;
230 virtual
void populateFakeData() = 0;
293 explicit FileIo(
const std::string& path);
314 int open(
const std::string& mode);
329 int close()
override;
339 size_t write(
const byte* data,
size_t wcount)
override;
349 size_t write(
BasicIo& src)
override;
357 int putb(
byte data)
override;
368 DataBuf read(
size_t rcount)
override;
381 size_t read(
byte* buf,
size_t rcount)
override;
407 void transfer(
BasicIo& src)
override;
409 int seek(int64_t offset,
Position pos)
override;
422 byte* mmap(
bool isWriteable =
false)
override;
430 int munmap()
override;
434 virtual void setPath(
const std::string& path);
443 [[nodiscard]]
size_t tell()
const override;
450 [[nodiscard]]
size_t size()
const override;
452 [[nodiscard]]
bool isopen()
const override;
454 [[nodiscard]]
int error()
const override;
456 [[nodiscard]]
bool eof()
const override;
458 [[nodiscard]]
const std::string& path()
const noexcept
override;
467 void populateFakeData()
override;
479 std::unique_ptr<Impl> p_;
526 int close()
override;
537 size_t write(
const byte* data,
size_t wcount)
override;
548 size_t write(
BasicIo& src)
override;
556 int putb(
byte data)
override;
567 DataBuf read(
size_t rcount)
override;
580 size_t read(
byte* buf,
size_t rcount)
override;
603 void transfer(
BasicIo& src)
override;
605 int seek(int64_t offset,
Position pos)
override;
615 byte* mmap(
bool =
false)
override;
616 int munmap()
override;
625 [[nodiscard]]
size_t tell()
const override;
631 [[nodiscard]]
size_t size()
const override;
633 [[nodiscard]]
bool isopen()
const override;
635 [[nodiscard]]
int error()
const override;
637 [[nodiscard]]
bool eof()
const override;
639 [[nodiscard]]
const std::string& path()
const noexcept
override;
648 void populateFakeData()
override;
661 std::unique_ptr<Impl> p_;
673 XPathIo(
const std::string& path);
687 void ReadDataUri(
const std::string& path);
696 static constexpr
auto TEMP_FILE_EXT =
".exiv2_temp";
701 static constexpr
auto GEN_FILE_EXT =
".exiv2";
705 explicit XPathIo(
const std::string& orgPath);
721 void transfer(
BasicIo& src)
override;
733 static std::string writeDataToFile(
const std::string& orgPath);
739 std::string tempFilePath_;
776 int close()
override;
781 size_t write(
const byte* data,
size_t wcount)
override;
796 size_t write(
BasicIo& src)
override;
802 int putb(
byte data)
override;
815 DataBuf read(
size_t rcount)
override;
830 size_t read(
byte* buf,
size_t rcount)
override;
854 void transfer(
BasicIo& src)
override;
856 int seek(int64_t offset,
Position pos)
override;
862 byte* mmap(
bool =
false)
override;
867 int munmap()
override;
875 [[nodiscard]]
size_t tell()
const override;
881 [[nodiscard]]
size_t size()
const override;
883 [[nodiscard]]
bool isopen()
const override;
885 [[nodiscard]]
int error()
const override;
887 [[nodiscard]]
bool eof()
const override;
889 [[nodiscard]]
const std::string& path()
const noexcept
override;
898 void populateFakeData()
override;
906 std::unique_ptr<Impl>
p_;
925 explicit HttpIo(
const std::string& url,
size_t blockSize = 1024);
937 class EXIV2API CurlIo :
public RemoteIo {
950 explicit CurlIo(
const std::string& url,
size_t blockSize = 0);
957 size_t write(
const byte* data,
size_t wcount)
override;
963 size_t write(
BasicIo& src)
override;
979 EXIV2API DataBuf
readFile(
const std::string& path);
985 EXIV2API
size_t writeFile(
const DataBuf& buf,
const std::string& path);
990 EXIV2API
size_t curlWriter(
char* data,
size_t size,
size_t nmemb, std::string* writerData);
993 #endif // #ifndef BASICIO_HPP_
An interface for simple binary IO.
Definition: basicio.hpp:35
Provides remote binary file IO by implementing the BasicIo interface. This is an abstract class...
Definition: basicio.hpp:748
Provides binary file IO by implementing the BasicIo interface.
Definition: basicio.hpp:283
Internal Pimpl abstract structure of class RemoteIo.
Definition: basicio.cpp:1003
uint8_t byte
1 byte unsigned integer type.
Definition: types.hpp:26
Utility class containing a character array. All it does is to take care of memory allocation and dele...
Definition: types.hpp:124
Provides the http read/write access for the RemoteIo.
Definition: basicio.hpp:912
EXIV2API DataBuf readFile(const std::string &path)
Read file path into a DataBuf, which is returned.
Definition: basicio.cpp:1730
Position
Seek starting positions.
Definition: basicio.hpp:41
Internal Pimpl structure of class FileIo.
Definition: basicio.cpp:79
Internal Pimpl structure of class MemIo.
Definition: basicio.cpp:575
Provides binary IO on blocks of memory by implementing the BasicIo interface. A copy-on-write impleme...
Definition: basicio.hpp:495
EXIV2API size_t writeFile(const DataBuf &buf, const std::string &path)
Write DataBuf buf to file path.
Definition: basicio.cpp:1746
std::unique_ptr< BasicIo > UniquePtr
BasicIo auto_ptr type.
Definition: basicio.hpp:38
BasicIo & bio_
The BasicIo reference.
Definition: basicio.hpp:270
Error class for exceptions, log message class.
Class CrwImage to access Canon CRW images. References: The Canon RAW (CRW) File Format by Phil Harv...
Definition: asfvideo.hpp:15
Utility class that closes a BasicIo instance upon destruction. Meant to be used as a stack variable i...
Definition: basicio.hpp:246
virtual ~IoCloser()
Destructor, closes the BasicIo reference.
Definition: basicio.hpp:254
std::unique_ptr< Impl > p_
Pointer to implementation.
Definition: basicio.hpp:904
ErrorCode
Complete list of all Exiv2 error codes.
Definition: error.hpp:162
Internal Pimpl structure of class HttpIo.
Definition: basicio.cpp:1389
Provides binary IO for the data from stdin and data uri path.
Definition: basicio.hpp:690