1 /*
2    mkvmerge -- utility for splicing together matroska files
3    from component media subtypes
4 
5    Distributed under the GPL v2
6    see the file COPYING for details
7    or visit https://www.gnu.org/licenses/old-licenses/gpl-2.0.html
8 
9    IO callback class definitions
10 
11    Written by Moritz Bunkus <moritz@bunkus.org>.
12 */
13 
14 #pragma once
15 
16 #include "common/common_pch.h"
17 
18 class mm_file_io_private_c;
19 class mm_file_io_c: public mm_io_c {
20 protected:
21   MTX_DECLARE_PRIVATE(mm_file_io_private_c)
22 
23   explicit mm_file_io_c(mm_file_io_private_c &p);
24 
25 public:
26   mm_file_io_c(const std::string &path, const open_mode mode = MODE_READ);
27   virtual ~mm_file_io_c();
28 
29   virtual uint64_t getFilePointer() override;
30 #if defined(SYS_WINDOWS)
31   virtual uint64_t get_real_file_pointer();
32 #endif
33   virtual void setFilePointer(int64_t offset, libebml::seek_mode mode = libebml::seek_beginning) override;
34   virtual void close() override;
35   virtual bool eof() override;
36   virtual void clear_eof() override;
37   virtual int truncate(int64_t pos) override;
38 
39   virtual std::string get_file_name() const override;
40 
41 public:
42   static void prepare_path(const std::string &path);
43   static memory_cptr slurp(std::string const &file_name);
44 
45   static mm_io_cptr open(const std::string &path, const open_mode mode = MODE_READ);
46 
47   static void enable_flushing_on_close(bool enable);
48 
49 protected:
50   virtual uint32_t _read(void *buffer, size_t size) override;
51   virtual size_t _write(const void *buffer, size_t size) override;
52 };
53