79class CLASS_DECL_ACME memory_file :
81 virtual public memory_container
93 memory_file(::file::e_open eopen);
94 memory_file(memsize iSize);
95 memory_file(
const memory_file &
file);
96 memory_file(memory_file &&
file);
97 memory_file(
const void * pmemory, memsize dwSize);
98 memory_file(const ::block &
block);
99 template < prototype_payload PAYLOAD >
100 memory_file(PAYLOAD & payload, ::file::e_open eopen = {});
101 memory_file(
memory_base & memory, ::file::e_open eopen = {});
102 memory_file(
memory_base * pmemory, ::file::e_open eopen = {});
103 template <
typename MEMORY>
104 memory_file(const ::pointer<MEMORY> & pmemory, ::file::e_open eopen = {}) : memory_file((
MEMORY *)pmemory.get(), eopen) {}
105 ~memory_file()
override;
112 virtual bool is_valid()
const override;
113 memsize erase_begin(
void * pdata, memsize uiCount);
114 memsize erase_begin(memsize uiCount);
117 void load_string(
string & str);
118 void translate(filesize offset, ::enum_seek eseek)
override;
119 filesize get_position()
const override;
120 virtual void raw_set_position(memsize memsize);
126 void set_size(filesize dwNewLen)
override;
127 ::filesize size()
const override;
132 using ::file::file::read;
133 virtual memsize read(
void * p, ::memsize s)
override;
136 using ::file::file::write;
137 void write(
const void * p, ::memsize s)
override;
140 void write(
::file::readable * pfileIn, memsize uiBufSize = 16_MiB)
override;
142 void put_byte_back(::u8 uch)
override;
144 virtual void write_from_hex(const ::block &
block)
override;
146 void flush()
override;
148 string as_string()
const override;
152 bool is_in_memory_file()
const override {
return true; }
154 using ::file::file::full_data;
155 ::u8 * full_data_begin()
override;
156 ::u8 * full_data_end()
override;
157 const ::u8 * full_data_begin()
const override;
158 const ::u8 * full_data_end()
const override;
159 ::u8 * data_begin()
override;
160 ::u8 * data_end()
override;
161 const ::u8 * data_begin()
const override;
162 const ::u8 * data_end()
const override;
164 using ::file::file::data;
173 void copy_this(
const memory_file &
file);
177 memory_file & operator = (
const memory_file &
file);
179 inline memsize _get_left() {
return m_pmemory->size() - m_position; }
180 inline bool _is_end_of_file()
const {
return m_position >= m_pmemory->size(); }
182 inline ::i32 _get_unsigned_char()
185 return _get_left() < 1 ? -1 : ((::u8 *)m_pmemory.m_p->data())[m_position++];
189 inline ::u8 get_byte_unbounded()
192 return m_pbyte[m_position++];
197 inline ::i32 _get_unsigned_short()
207 auto i = *(::u16 *)&m_pmemory.m_p->data()[m_position];
216 inline ::u16 get_u16_unbounded()
219 auto u = *(::u16 *)(m_pbyte + m_position);
228 inline bool _get_u64(::u64 & hn)
238 hn = *((::u64 *)&(m_pmemory.m_p->data()[m_position]));
247 inline ::u64 get_u64_unbounded()
250 auto u = *(::u64 *)(m_pbyte + m_position);
259 ::i32 get_unsigned_char()
override;
260 ::i32 get_unsigned_short()
override;
261 bool get_u64(::u64 & hn)
override;
268 memsize read_inline(
void * p, ::memsize s)
271 auto target = (::u8 *)p;
273 if(::is_null(m_pmemory))
280 memsize left = m_pmemory->size() - m_position;
299 auto source = m_pmemory->m_begin + m_position;
301 inline_byte_array_copy(target,
source, s);
312 void write_inline(
const void * p, ::memsize s)
322 auto source = (const ::u8 *)p;
324 auto e = m_position + s;
333 if (!m_pmemory || e > m_pmemory->size())
340 auto target = m_pmemory->m_begin + m_position;
342 inline_byte_array_copy(target,
source, s);