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;
279 #ifdef EXV_ENABLE_FILESYSTEM
284 class EXIV2API FileIo :
public BasicIo {
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;
473 FileIo(
const FileIo&) =
delete;
475 FileIo& operator=(
const FileIo&) =
delete;
480 std::unique_ptr<Impl> p_;
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_;
671 class EXIV2API XPathIo :
public MemIo {
675 XPathIo(
const std::string& path);
689 void ReadDataUri(
const std::string& path);
691 #elif defined(EXV_ENABLE_FILESYSTEM)
692 class EXIV2API XPathIo :
public FileIo {
698 static constexpr
auto TEMP_FILE_EXT =
".exiv2_temp";
703 static constexpr
auto GEN_FILE_EXT =
".exiv2";
707 explicit XPathIo(
const std::string& orgPath);
714 XPathIo(
const XPathIo&) =
delete;
715 XPathIo& operator=(
const XPathIo&) =
delete;
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;
908 std::unique_ptr<Impl>
p_;
927 explicit HttpIo(
const std::string& url,
size_t blockSize = 1024);
939 class 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;
981 EXIV2API DataBuf
readFile(
const std::string& path);
987 EXIV2API
size_t writeFile(
const DataBuf& buf,
const std::string& path);
992 EXIV2API
size_t curlWriter(
char* data,
size_t size,
size_t nmemb, std::string* writerData);
995 #endif // #ifndef BASICIO_HPP_
An interface for simple binary IO.
Definition: basicio.hpp:35
EXIV2API DataBuf readFile(const std::string &path)
Read file path into a DataBuf, which is returned.
Provides binary IO for the data from stdin and data uri path.
Definition: basicio.hpp:750
Internal Pimpl abstract structure of class RemoteIo.
Definition: basicio.cpp:1001
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:914
Position
Seek starting positions.
Definition: basicio.hpp:41
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
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
EXIV2API size_t writeFile(const DataBuf &buf, const std::string &path)
Write DataBuf buf to file path.
virtual ~IoCloser()
Destructor, closes the BasicIo reference.
Definition: basicio.hpp:254
std::unique_ptr< Impl > p_
Pointer to implementation.
Definition: basicio.hpp:906
ErrorCode
Complete list of all Exiv2 error codes.
Definition: error.hpp:162