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