file_access_compressed.h
1 /*************************************************************************/
2 /* file_access_compressed.h */
3 /*************************************************************************/
4 /* This file is part of: */
5 /* GODOT ENGINE */
6 /* http://www.godotengine.org */
7 /*************************************************************************/
8 /* Copyright (c) 2007-2016 Juan Linietsky, Ariel Manzur. */
9 /* */
10 /* Permission is hereby granted, free of charge, to any person obtaining */
11 /* a copy of this software and associated documentation files (the */
12 /* "Software"), to deal in the Software without restriction, including */
13 /* without limitation the rights to use, copy, modify, merge, publish, */
14 /* distribute, sublicense, and/or sell copies of the Software, and to */
15 /* permit persons to whom the Software is furnished to do so, subject to */
16 /* the following conditions: */
17 /* */
18 /* The above copyright notice and this permission notice shall be */
19 /* included in all copies or substantial portions of the Software. */
20 /* */
21 /* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
22 /* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
23 /* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
24 /* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
25 /* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
26 /* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
27 /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
28 /*************************************************************************/
29 #ifndef FILE_ACCESS_COMPRESSED_H
30 #define FILE_ACCESS_COMPRESSED_H
31 
32 #include "io/compression.h"
33 #include "os/file_access.h"
34 
36 
37  Compression::Mode cmode;
38  bool writing;
39  int write_pos;
40  uint8_t*write_ptr;
41  int write_buffer_size;
42  int write_max;
43  int block_size;
44  mutable bool read_eof;
45  mutable bool at_end;
46 
47  struct ReadBlock {
48  int csize;
49  int offset;
50  };
51 
52  mutable Vector<uint8_t> comp_buffer;
53  uint8_t *read_ptr;
54  mutable int read_block;
55  int read_block_count;
56  mutable int read_block_size;
57  mutable int read_pos;
58  Vector<ReadBlock> read_blocks;
59  int read_total;
60 
61 
62 
63 
64  String magic;
65  mutable Vector<uint8_t> buffer;
66  FileAccess *f;
67 public:
68 
69  void configure(const String& p_magic, Compression::Mode p_mode=Compression::MODE_FASTLZ, int p_block_size=4096);
70 
71  Error open_after_magic(FileAccess *p_base);
72 
73  virtual Error _open(const String& p_path, int p_mode_flags);
74  virtual void close();
75  virtual bool is_open() const;
76 
77  virtual void seek(size_t p_position);
78  virtual void seek_end(int64_t p_position=0);
79  virtual size_t get_pos() const;
80  virtual size_t get_len() const;
81 
82  virtual bool eof_reached() const;
83 
84  virtual uint8_t get_8() const;
85  virtual int get_buffer(uint8_t *p_dst, int p_length) const;
86 
87  virtual Error get_error() const;
88 
89  virtual void store_8(uint8_t p_dest);
90 
91  virtual bool file_exists(const String& p_name);
92 
93  virtual uint64_t _get_modified_time(const String& p_file);
94 
95 
97  virtual ~FileAccessCompressed();
98 
99 };
100 
101 #endif // FILE_ACCESS_COMPRESSED_H
virtual void seek_end(int64_t p_position=0)
seek from the end of file
Definition: file_access_compressed.cpp:240
virtual bool is_open() const
true when file is open
Definition: file_access_compressed.cpp:203
virtual void seek(size_t p_position)
seek to a given position
Definition: file_access_compressed.cpp:208
virtual void close()
close a file
Definition: file_access_compressed.cpp:147
Definition: file_access_compressed.h:35
virtual uint8_t get_8() const
get a byte
Definition: file_access_compressed.cpp:287
virtual size_t get_len() const
get size of the file
Definition: file_access_compressed.cpp:266
virtual int get_buffer(uint8_t *p_dst, int p_length) const
get an array of bytes
Definition: file_access_compressed.cpp:320
virtual void store_8(uint8_t p_dest)
store a byte
Definition: file_access_compressed.cpp:367
virtual size_t get_pos() const
get position in the file
Definition: file_access_compressed.cpp:254
virtual bool file_exists(const String &p_name)
return true if a file exists
Definition: file_access_compressed.cpp:377
virtual bool eof_reached() const
reading passed EOF
Definition: file_access_compressed.cpp:277
virtual Error _open(const String &p_path, int p_mode_flags)
open a file
Definition: file_access_compressed.cpp:99
Definition: ustring.h:64
virtual Error get_error() const
get last error
Definition: file_access_compressed.cpp:362
Definition: file_access.h:40