7#include "exiv2lib_export.h"
18#ifndef EXV_XPATH_MEMIO
19#define EXV_XPATH_MEMIO 0
82 virtual size_t write(
const byte* data,
size_t wcount) = 0;
100 virtual int putb(
byte data) = 0;
124 virtual size_t read(
byte* buf,
size_t rcount) = 0;
135 void readOrThrow(
byte* buf,
size_t rcount,
ErrorCode err = ErrorCode::kerCorruptedMetadata);
186 virtual byte*
mmap(
bool isWriteable =
false) = 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;
279#ifdef EXV_ENABLE_FILESYSTEM
294 explicit FileIo(
const std::string& path);
315 int open(
const std::string& mode);
330 int close()
override;
340 size_t write(
const byte* data,
size_t wcount)
override;
350 size_t write(
BasicIo& src)
override;
358 int putb(
byte data)
override;
369 DataBuf read(
size_t rcount)
override;
382 size_t read(
byte* buf,
size_t rcount)
override;
408 void transfer(
BasicIo& src)
override;
410 int seek(int64_t offset,
Position pos)
override;
423 byte* mmap(
bool isWriteable =
false)
override;
431 int munmap()
override;
435 virtual void setPath(
const std::string& path);
444 [[nodiscard]]
size_t tell()
const override;
451 [[nodiscard]]
size_t size()
const override;
453 [[nodiscard]]
bool isopen()
const override;
455 [[nodiscard]]
int error()
const override;
457 [[nodiscard]]
bool eof()
const override;
459 [[nodiscard]]
const std::string& path()
const noexcept override;
468 void populateFakeData()
override;
480 std::unique_ptr<Impl> p_;
510 MemIo(
const byte* data,
size_t size);
528 int close()
override;
539 size_t write(
const byte* data,
size_t wcount)
override;
550 size_t write(
BasicIo& src)
override;
558 int putb(
byte data)
override;
569 DataBuf read(
size_t rcount)
override;
582 size_t read(
byte* buf,
size_t rcount)
override;
605 void transfer(
BasicIo& src)
override;
607 int seek(int64_t offset,
Position pos)
override;
617 byte* mmap(
bool =
false)
override;
618 int munmap()
override;
627 [[nodiscard]]
size_t tell()
const override;
633 [[nodiscard]]
size_t size()
const override;
635 [[nodiscard]]
bool isopen()
const override;
637 [[nodiscard]]
int error()
const override;
639 [[nodiscard]]
bool eof()
const override;
641 [[nodiscard]]
const std::string& path()
const noexcept override;
650 void populateFakeData()
override;
663 std::unique_ptr<Impl> p_;
676 XPathIo(
const std::string& path);
689 void ReadDataUri(
const std::string& path);
691#elif defined(EXV_ENABLE_FILESYSTEM)
698 static constexpr auto TEMP_FILE_EXT =
".exiv2_temp";
703 static constexpr auto GEN_FILE_EXT =
".exiv2";
708 explicit XPathIo(
const std::string& orgPath);
723 void transfer(
BasicIo& src)
override;
735 static std::string writeDataToFile(
const std::string& orgPath);
741 std::string tempFilePath_;
778 int close()
override;
783 size_t write(
const byte* data,
size_t wcount)
override;
798 size_t write(
BasicIo& src)
override;
804 int putb(
byte data)
override;
817 DataBuf read(
size_t rcount)
override;
832 size_t read(
byte* buf,
size_t rcount)
override;
856 void transfer(
BasicIo& src)
override;
858 int seek(int64_t offset,
Position pos)
override;
864 byte* mmap(
bool =
false)
override;
869 int munmap()
override;
877 [[nodiscard]]
size_t tell()
const override;
883 [[nodiscard]]
size_t size()
const override;
885 [[nodiscard]]
bool isopen()
const override;
887 [[nodiscard]]
int error()
const override;
889 [[nodiscard]]
bool eof()
const override;
891 [[nodiscard]]
const std::string& path() const noexcept override;
900 void populateFakeData() override;
927 explicit HttpIo(
const std::string& url,
size_t blockSize = 1024);
939class EXIV2API CurlIo :
public RemoteIo {
952 explicit CurlIo(
const std::string& url,
size_t blockSize = 0);
959 size_t write(
const byte* data,
size_t wcount)
override;
965 size_t write(
BasicIo& src)
override;
981EXIV2API DataBuf readFile(
const std::string& path);
987EXIV2API
size_t writeFile(
const DataBuf& buf,
const std::string& path);
992EXIV2API
size_t curlWriter(
char* data,
size_t size,
size_t nmemb, std::string* writerData);
An interface for simple binary IO.
Definition basicio.hpp:35
virtual size_t write(const byte *data, size_t wcount)=0
Write data to the IO source. Current IO position is advanced by the number of bytes written.
virtual bool isopen() const =0
Returns true if the IO source is open, otherwise false.
virtual int open()=0
Open the IO source using the default access mode. The default mode should allow for reading and writi...
Position
Seek starting positions.
Definition basicio.hpp:41
virtual bool eof() const =0
Returns true if the IO position has reached the end, otherwise false.
virtual size_t size() const =0
Get the current size of the IO source in bytes.
virtual int getb()=0
Read one byte from the IO source. Current IO position is advanced by one byte.
virtual int close()=0
Close the IO source. After closing a BasicIo instance can not be read or written. Closing flushes any...
virtual size_t tell() const =0
Get the current IO position.
virtual ~BasicIo()=default
Destructor.
virtual int seek(int64_t offset, Position pos)=0
Move the current IO position.
virtual const std::string & path() const noexcept=0
Return the path to the IO resource. Often used to form comprehensive error messages where only a Basi...
virtual int munmap()=0
Remove a mapping established with mmap(). If the mapped area is writeable, this ensures that changes ...
virtual size_t write(BasicIo &src)=0
Write data that is read from another BasicIo instance to the IO source. Current IO position is advanc...
std::unique_ptr< BasicIo > UniquePtr
BasicIo auto_ptr type.
Definition basicio.hpp:38
virtual DataBuf read(size_t rcount)=0
Read data from the IO source. Reading starts at the current IO position and the position is advanced ...
virtual void transfer(BasicIo &src)=0
Remove all data from this object's IO source and then transfer data from the src BasicIo object into ...
virtual int putb(byte data)=0
Write one byte to the IO source. Current IO position is advanced by one byte.
virtual int error() const =0
Returns 0 if the IO source is in a valid state, otherwise nonzero.
virtual byte * mmap(bool isWriteable=false)=0
Direct access to the IO data. For files, this is done by mapping the file into the process's address ...
virtual size_t read(byte *buf, size_t rcount)=0
Read data from the IO source. Reading starts at the current IO position and the position is advanced ...
Internal Pimpl structure of class FileIo.
Definition basicio.cpp:69
Provides binary file IO by implementing the BasicIo interface.
Definition basicio.hpp:284
FileIo(const FileIo &)=delete
Copy constructor.
FileIo & operator=(const FileIo &)=delete
Assignment operator.
Provides the http read/write access for the RemoteIo.
Definition basicio.hpp:914
HttpIo(const std::string &url, size_t blockSize=1024)
Constructor that accepts the http URL on which IO will be performed. The constructor does not open th...
Utility class that closes a BasicIo instance upon destruction. Meant to be used as a stack variable i...
Definition basicio.hpp:246
IoCloser & operator=(const IoCloser &)=delete
Assignment operator.
IoCloser(BasicIo &bio)
Constructor, takes a BasicIo reference.
Definition basicio.hpp:251
virtual ~IoCloser()
Destructor, closes the BasicIo reference.
Definition basicio.hpp:254
void close()
Close the BasicIo if it is open.
Definition basicio.hpp:262
BasicIo & bio_
The BasicIo reference.
Definition basicio.hpp:270
IoCloser(const IoCloser &)=delete
Copy constructor.
Internal Pimpl structure of class MemIo.
Definition basicio.cpp:563
Provides binary IO on blocks of memory by implementing the BasicIo interface. A copy-on-write impleme...
Definition basicio.hpp:497
MemIo & operator=(const MemIo &)=delete
Assignment operator.
MemIo(const MemIo &)=delete
Copy constructor.
Internal Pimpl abstract structure of class RemoteIo.
Definition basicio.cpp:1001
Provides remote binary file IO by implementing the BasicIo interface. This is an abstract class....
Definition basicio.hpp:750
RemoteIo()
Destructor. Releases all managed memory.
Provides binary IO for the data from stdin and data uri path.
Definition basicio.hpp:692
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
ErrorCode
Complete list of all Exiv2 error codes.
Definition error.hpp:162
Utility class containing a character array. All it does is to take care of memory allocation and dele...
Definition types.hpp:124