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);
340 size_t write(
const byte* data,
size_t wcount)
override;
382 size_t read(
byte* buf,
size_t rcount)
override;
423 byte*
mmap(
bool isWriteable =
false)
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";
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;
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 ...
Provides binary file IO by implementing the BasicIo interface.
Definition basicio.hpp:284
int open(const std::string &mode)
Open the file using the specified mode.
DataBuf read(size_t rcount) override
Read data from the file. Reading starts at the current file position and the position is advanced by ...
~FileIo() override
Destructor. Flushes and closes an open file.
bool isopen() const override
Returns true if the file is open, otherwise false.
int open() override
Open the file using the default access mode of "rb". This method can also be used to "reopen" a file ...
int seek(int64_t offset, Position pos) override
Move the current IO position.
size_t write(const byte *data, size_t wcount) override
Write data to the file. The file position is advanced by the number of bytes written.
virtual void setPath(const std::string &path)
close the file source and set a new path.
size_t tell() const override
Get the current file position.
const std::string & path() const noexcept override
Returns the path of the file.
size_t read(byte *buf, size_t rcount) override
Read data from the file. Reading starts at the current file position and the position is advanced by ...
int munmap() override
Remove a mapping established with mmap(). If the mapped area is writeable, this ensures that changes ...
int error() const override
Returns 0 if the file is in a valid state, otherwise nonzero.
bool eof() const override
Returns true if the file position has reached the end, otherwise false.
int close() override
Flush and unwritten data and close the file . It is safe to call close on an already closed instance.
size_t write(BasicIo &src) override
Write data that is read from another BasicIo instance to the file. The file position is advanced by t...
FileIo(const std::string &path)
Constructor that accepts the file path on which IO will be performed. The constructor does not open t...
size_t size() const override
Flush any buffered writes and get the current file size in bytes.
int getb() override
Read one byte from the file. The file position is advanced by one byte.
byte * mmap(bool isWriteable=false) override
Map the file into the process's address space. The file must be open before mmap() is called....
int putb(byte data) override
Write one byte to the file. The file position is advanced by one byte.
void transfer(BasicIo &src) override
Remove the contents of the file and then transfer data from the src BasicIo object into the empty fil...
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
void transfer(BasicIo &src) override
Change the name of the temp file and make it untemporary before calling the method of superclass File...
XPathIo(const std::string &orgPath)
Default constructor that reads data from stdin/data uri path and writes them to the temp file.
static std::string writeDataToFile(const std::string &orgPath)
Read the data from stdin/data uri path and write them to the file.
~XPathIo() override
Destructor. Releases all managed memory and removes the temp file.
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
EXIV2API size_t writeFile(const DataBuf &buf, const std::string &path)
Write DataBuf buf to file path.
EXIV2API DataBuf readFile(const std::string &path)
Read file path into a DataBuf, which is returned.
Utility class containing a character array. All it does is to take care of memory allocation and dele...
Definition types.hpp:124