libplatform/io/File.h Source File
File.h
1 #ifndef MP4V2_PLATFORM_IO_FILE_H
2 #define MP4V2_PLATFORM_IO_FILE_H
3 
4 namespace mp4v2 { namespace platform { namespace io {
5 
7 
8 class MP4V2_EXPORT FileProvider
9 {
10 public:
11  static FileProvider& standard();
12 
13 public:
15  enum Mode {
20  };
21 
23  typedef int64_t Size;
24 
25 public:
26  virtual ~FileProvider() { }
27 
28  virtual bool open( std::string name, Mode mode ) = 0;
29  virtual bool seek( Size pos ) = 0;
30  virtual bool read( void* buffer, Size size, Size& nin, Size maxChunkSize ) = 0;
31  virtual bool write( const void* buffer, Size size, Size& nout, Size maxChunkSize ) = 0;
32  virtual bool close() = 0;
33  virtual bool getSize( Size& nout ) = 0;
34 
35 protected:
36  FileProvider() { }
37 };
38 
50 
51 class MP4V2_EXPORT File : public FileProvider
52 {
53 public:
72 
73  explicit File( std::string name = "", Mode mode = MODE_UNDEFINED, FileProvider* = NULL );
74 
83 
84  ~File();
85 
99 
100  bool open( std::string name = "", Mode mode = MODE_UNDEFINED );
101 
112 
113  bool close();
114 
124 
125  bool seek( Size pos );
126 
144 
145  bool read( void* buffer, Size size, Size& nin, Size maxChunkSize = 0 );
146 
164 
165  bool write( const void* buffer, Size size, Size& nout, Size maxChunkSize = 0 );
166 
176 
177  bool getSize( Size& nout );
178 
179 private:
180  std::string _name;
181  bool _isOpen;
182  Mode _mode;
183  Size _size;
184  Size _position;
185  FileProvider& _provider;
186 
187 public:
188  const std::string& name;
189  const bool& isOpen;
190  const Mode& mode;
191  const Size& size;
192  const Size& position;
193 
194 public:
195  void setName( const std::string& name );
196  void setMode( Mode mode );
197 };
198 
200 
202 {
203 public:
205 
206  bool open( std::string name, Mode mode );
207  bool seek( Size pos );
208  bool read( void* buffer, Size size, Size& nin, Size maxChunkSize );
209  bool write( const void* buffer, Size size, Size& nout, Size maxChunkSize );
210  bool close();
211  bool getSize( Size& nout );
212 
213 private:
214  MP4FileProvider _call;
215  void* _handle;
216 };
217 
219 
220 }}} // namespace mp4v2::platform::io
221 
222 #endif // MP4V2_PLATFORM_IO_FILE_H
mp4v2::platform::io::File::position
const Size & position
read-only: file position
Definition: File.h:192
MP4FileProvider_s
Structure of functions implementing custom file provider.
Definition: file.h:36
mp4v2::platform::io::FileProvider::MODE_MODIFY
@ MODE_MODIFY
file may be read/written
Definition: File.h:18
mp4v2::platform::io::FileProvider::Mode
Mode
file operation mode flags
Definition: File.h:15
mp4v2::platform::io::FileProvider::Size
int64_t Size
type used to represent all file sizes and offsets
Definition: File.h:23
mp4v2::platform::io::FileProvider::MODE_READ
@ MODE_READ
file may be read
Definition: File.h:17
mp4v2::platform::io::FileProvider::MODE_UNDEFINED
@ MODE_UNDEFINED
undefined
Definition: File.h:16
mp4v2::platform::io::File
File implementation.
Definition: File.h:51
mp4v2::platform::io::FileProvider
Definition: File.h:8
mp4v2::platform::io::File::size
const Size & size
read-only: file size
Definition: File.h:191
mp4v2::platform::io::File::isOpen
const bool & isOpen
read-only: true if file is open
Definition: File.h:189
mp4v2::platform::io::CustomFileProvider
Definition: File.h:201
mp4v2::platform::io::FileProvider::MODE_CREATE
@ MODE_CREATE
file will be created/truncated for read/write
Definition: File.h:19
mp4v2::platform::io::File::name
const std::string & name
read-only: file pathname or empty-string if not applicable
Definition: File.h:188
mp4v2::platform::io::File::mode
const Mode & mode
read-only: file mode
Definition: File.h:190