36#include <condition_variable>
59int file_overwrite_monitor(std::string filename,
FileBuffer *p);
64#define FILEBUFFER_FLAG_LOADED_BIT 0x1
65#define FILEBUFFER_FLAG_KNOWN_SIZE_BIT 0x2
66#define FILEBUFFER_FLAG_ERROR_BIT 0x4
67#define FILEBUFFER_FLAG_NEVER_FREE 0x8
68#define FILEBUFFER_FLAG_PARTIAL_RELOADABLE 0x10
69#define FILEBUFFER_FLAG_SEG_DONE 0x20
71#define FILEBUFFER_FLAG_LOADED (FILEBUFFER_FLAG_LOADED_BIT|FILEBUFFER_FLAG_KNOWN_SIZE_BIT)
72#define FILEBUFFER_FLAG_KNOWN_SIZE FILEBUFFER_FLAG_KNOWN_SIZE_BIT
110class DataBuffer :
public std::enable_shared_from_this<DataBuffer>
136 memcpy(
data(), p, sz);
149 uint8_t&
at(
size_t index)
151 return (*
this)[index];
163class FileBuffer:
public std::enable_shared_from_this<FileBuffer>
199 std::map<size_t, std::shared_ptr<FragmentBlock>, std::greater<size_t>>
m_seg_map;
214 if (offset >= blk->m_output_offset
215 && offset < blk->m_output_offset + blk->m_output_size)
220 std::shared_ptr<FragmentBlock>
get_map_it(
size_t offset,
bool alloc =
false)
228 auto blk = it->second;
233 std::lock_guard<std::mutex> lck(blk->m_mutex);
234 blk->m_data.resize(blk->m_output_size);
252 OVERLAPPED m_OverLapped;
253 REQUEST_OPLOCK_INPUT_BUFFER m_Request;
254 HANDLE m_file_handle;
256 std::thread m_file_monitor;
269 std::shared_ptr<DataBuffer>
request_data(
size_t offset,
size_t sz);
291 int reload(std::string filename,
bool async =
false);
319 uint8_t &
at(
size_t index)
321 return (*
this)[index];
329 int mapfile(
const std::string &filename,
size_t sz);
342std::shared_ptr<FileBuffer>
get_file_buffer(std::string filename,
bool async=
false);
347bool IsMBR(std::shared_ptr<DataBuffer> p);
348size_t ScanTerm(std::shared_ptr<DataBuffer> p,
size_t&
pos,
size_t offset = 512,
size_t limited = 0x800000);
std::shared_ptr< FileBuffer > get_file_buffer(std::string filename, bool async=false)
Definition buffer.cpp:1178
bool check_file_exist(std::string filename, bool start_async_load=true)
Definition buffer.cpp:1806
#define FILEBUFFER_FLAG_NEVER_FREE
Definition buffer.h:67
#define FILEBUFFER_FLAG_ERROR_BIT
Definition buffer.h:66
void clean_up_filemap()
Definition buffer.cpp:2039
#define FILEBUFFER_FLAG_LOADED_BIT
Definition buffer.h:64
bool IsMBR(std::shared_ptr< DataBuffer > p)
size_t ScanTerm(std::shared_ptr< DataBuffer > p, size_t &pos, size_t offset=512, size_t limited=0x800000)
Definition rominfo.cpp:246
void set_current_dir(const std::string &dir)
Definition buffer.cpp:70
#define FILEBUFFER_FLAG_KNOWN_SIZE_BIT
Definition buffer.h:65
int ref_other_buffer(std::shared_ptr< FileBuffer > p, size_t offset, size_t size)
Definition buffer.cpp:101
DataBuffer(void *p, size_t sz)
Definition buffer.h:132
uint8_t * data()
Definition buffer.h:138
ALLOCATION_WAYS m_allocate_way
Definition buffer.h:125
int resize(size_t sz)
Definition buffer.cpp:77
DataBuffer()
Definition buffer.h:128
uint8_t * m_pDatabuffer
Definition buffer.h:121
ALLOCATION_WAYS
Definition buffer.h:113
@ MALLOC
Definition buffer.h:114
@ REF
Definition buffer.h:115
ALLOCATION_WAYS get_m_allocate_way() const noexcept
Definition buffer.h:120
size_t m_MemSize
Definition buffer.h:123
friend class FileBuffer
Definition buffer.h:160
std::shared_ptr< FileBuffer > m_ref
Definition buffer.h:124
uint8_t & at(size_t index)
Definition buffer.h:149
size_t m_DataSize
Definition buffer.h:122
size_t size()
Definition buffer.h:139
virtual ~DataBuffer()
Definition buffer.h:153
uint8_t & operator[](size_t index)
Definition buffer.h:142
Definition buffer.cpp:132
std::atomic_int m_dataflags
Definition buffer.h:243
friend class DataBuffer
Definition buffer.h:166
size_t m_DataSize
Definition buffer.h:190
std::mutex m_async_mutex
Definition buffer.h:197
friend class FSFlat
Definition buffer.h:168
std::string m_filename
Definition buffer.h:337
ALLOCATION_WAYS get_m_allocate_way() const noexcept
Definition buffer.h:265
std::map< size_t, std::shared_ptr< FragmentBlock >, std::greater< size_t > > m_seg_map
Definition buffer.h:199
size_t size()
Definition buffer.h:293
bool IsError() const noexcept
Definition buffer.h:286
uint8_t * data() noexcept
Definition buffer.h:306
friend class Zip_file_Info
Definition buffer.h:177
friend class FSHttp
Definition buffer.h:170
int64_t request_data(void *data, size_t offset, size_t sz)
Definition buffer.cpp:1568
size_t m_MemSize
Definition buffer.h:191
std::shared_ptr< FragmentBlock > request_new_blk()
Definition buffer.cpp:1633
int unmapfile()
Definition buffer.cpp:1782
std::atomic_bool m_reset_stream
Definition buffer.h:208
size_t m_seg_blk_size
Definition buffer.h:206
std::shared_ptr< FileBuffer > m_ref
Definition buffer.h:193
friend class Tar
Definition buffer.h:175
friend class Zip
Definition buffer.h:176
size_t m_last_request_offset
Definition buffer.h:202
int mapfile(const std::string &filename, size_t sz)
Definition buffer.cpp:1286
friend class Fat
Definition buffer.h:174
int resize(size_t sz)
Definition buffer.cpp:1748
std::mutex m_pool_load_cv_mutex
Definition buffer.h:204
ALLOCATION_WAYS m_allocate_way
Definition buffer.h:339
int m_pool_size
Definition buffer.h:336
friend class FSzstd
Definition buffer.h:172
std::condition_variable m_pool_load_cv
Definition buffer.h:203
friend class FSCompressStream
Definition buffer.h:173
friend class FSGz
Definition buffer.h:171
uint64_t m_timesample
Definition buffer.h:259
std::shared_ptr< FragmentBlock > get_map_it(size_t offset, bool alloc=false)
Definition buffer.h:220
std::thread m_async_thread
Definition buffer.h:245
int64_t request_data_from_segment(void *data, size_t offset, size_t sz)
Definition buffer.cpp:1456
int ref_other_buffer(std::shared_ptr< FileBuffer > p, size_t offset, size_t size)
Definition buffer.cpp:1374
uint8_t & at(size_t index)
Definition buffer.h:319
int reload(std::string filename, bool async=false)
Definition buffer.cpp:1386
std::mutex m_seg_map_mutex
Definition buffer.h:200
friend class FSHttps
Definition buffer.h:169
bool IsLoaded() const noexcept
Definition buffer.h:271
bool IsKnownSize() const noexcept
Definition buffer.h:281
FileBuffer()
Definition buffer.cpp:1246
uint8_t & operator[](size_t index)
Definition buffer.h:311
std::mutex m_data_mutex
Definition buffer.h:187
std::shared_ptr< FragmentBlock > m_last_db
Definition buffer.h:205
~FileBuffer()
Definition buffer.cpp:1270
size_t m_total_buffer_size
Definition buffer.h:207
std::condition_variable m_request_cv
Definition buffer.h:248
ALLOCATION_WAYS
Definition buffer.h:179
@ MMAP
Definition buffer.h:181
@ MALLOC
Definition buffer.h:180
@ SEGMENT
Definition buffer.h:184
@ REF
Definition buffer.h:182
@ VMALLOC
Definition buffer.h:183
bool IsRefable() const noexcept
Definition buffer.h:276
friend class FSBase
Definition buffer.h:167
bool check_offset_in_seg(size_t offset, std::shared_ptr< FragmentBlock > blk)
Definition buffer.h:212
void truncate_old_data_in_pool()
Definition buffer.cpp:1426
uint8_t * m_pDatabuffer
Definition buffer.h:189
std::queue< size_t > m_offset_request
Definition buffer.h:201
std::mutex m_request_cv_mutex
Definition buffer.h:249
int reserve(size_t sz)
Definition buffer.cpp:1729
std::atomic_size_t m_available_size
Definition buffer.h:247
int swap(FileBuffer &a)
Definition buffer.cpp:1772
uint8_t * data()
Definition buffer.h:99
virtual ~FragmentBlock()
Definition buffer.h:106
size_t m_input_offset
Definition buffer.h:87
std::shared_ptr< FileBuffer > m_input
Definition buffer.h:89
size_t m_ret
Definition buffer.h:90
std::vector< uint8_t > m_data
Definition buffer.h:95
size_t m_input_sz
Definition buffer.h:88
std::mutex m_mutex
Definition buffer.h:96
@ USING
Definition buffer.h:83
@ CONVERT_PARTIAL
Definition buffer.h:85
@ CONVERT_START
Definition buffer.h:84
@ CONVERT_DONE
Definition buffer.h:82
std::atomic_int m_dataflags
Definition buffer.h:97
virtual int DataConvert()
Definition buffer.h:94
size_t m_actual_size
Definition buffer.h:91
size_t m_output_offset
Definition buffer.h:93
uint8_t * m_pData
Definition buffer.h:98
size_t m_output_size
Definition buffer.h:92
auto pos
Definition usbhotplug.cpp:159