7 using bmap_type
= std::vector
<std::pair
<size_t, size_t>>;
11 bmap_t(size_t img_size
, size_t blk_size
= 4096)
12 : m_img_size(img_size
),
14 m_blk_count(default_blocks_count(img_size
, blk_size
))
16 set_mapped_range(0, m_blk_count
- 1);
19 bmap_t
& set_image_size(size_t size
) {
24 bmap_t
& set_block_size(size_t size
= 4096) {
29 bmap_t
& set_blocks_count(size_t size
= 0) {
33 m_blk_count
= default_blocks_count(m_img_size
, m_blk_size
);
37 bmap_t
& set_mapped_range(size_t begin
, size_t end
) {
38 m_blk_map
.emplace_back(begin
, end
);
42 static size_t default_blocks_count(size_t img_size
, size_t blk_size
) {
43 return img_size
/ blk_size
+ (img_size
% blk_size
? 1 : 0);
46 size_t image_size() const { return m_img_size
; }
47 size_t block_size() const { return m_blk_size
; }
48 size_t blocks_count() const { return m_blk_count
; }
50 const bmap_type
& mapped_ranges() const { return m_blk_map
; }
52 bool is_mapped_block(size_t index
) const;
55 size_t m_img_size
= 0;
56 size_t m_blk_size
= 4096;
57 size_t m_blk_count
= 0;
59 mutable bool m_gap_set
= false;
60 mutable size_t m_gap_begin
= 0;
61 mutable size_t m_gap_end
= 0;
62 mutable size_t m_next_gap_begin
= 0;
65 bool load_bmap(const std::string
& filename
, bmap_t
& bmap
);