GridFormat
0.6.0
I/O-Library for grid-like data structures
Toggle main menu visibility
Loading...
Searching...
No Matches
common.hpp
Go to the documentation of this file.
1
// SPDX-FileCopyrightText: 2022-2023 Dennis Gläser <dennis.glaeser@iws.uni-stuttgart.de>
2
// SPDX-License-Identifier: MIT
8
#ifndef GRIDFORMAT_COMPRESSION_COMMON_HPP_
9
#define GRIDFORMAT_COMPRESSION_COMMON_HPP_
10
11
#include <vector>
12
#include <utility>
13
#include <numeric>
14
15
#include <gridformat/common/exceptions.hpp>
16
#include <gridformat/common/serialization.hpp>
17
18
namespace
GridFormat::Compression {
19
22
23
inline
constexpr
std::size_t
default_block_size
= (1 << 15);
24
26
template
<std::
int
egral HeaderType = std::
size_t
>
27
struct
Blocks {
28
const
HeaderType block_size;
29
const
HeaderType residual_block_size;
30
const
HeaderType number_of_blocks;
31
32
Blocks(HeaderType size_in_bytes, HeaderType block_size)
33
: block_size{block_size}
34
, residual_block_size{size_in_bytes%block_size}
35
, number_of_blocks{residual_block_size ? size_in_bytes/block_size + 1 : size_in_bytes/block_size}
36
{}
37
};
38
40
template
<std::
int
egral HeaderType = std::
size_t
>
41
struct
CompressedBlocks {
42
const
HeaderType block_size;
43
const
HeaderType residual_block_size;
44
const
HeaderType number_of_blocks;
45
const
std::vector<HeaderType> compressed_block_sizes;
46
47
CompressedBlocks(
const
Blocks<HeaderType>
& blocks,
48
std::vector<HeaderType>&& comp_block_sizes)
49
: block_size{blocks.block_size}
50
, residual_block_size{blocks.residual_block_size}
51
, number_of_blocks{blocks.number_of_blocks}
52
, compressed_block_sizes{std::move(comp_block_sizes)} {
53
if
(compressed_block_sizes.size() != number_of_blocks)
54
throw
SizeError(
"Mismatch between blocks and number of compressed blocks"
);
55
}
56
57
std::size_t compressed_size()
const
{
58
return
std::accumulate(
59
compressed_block_sizes.begin(),
60
compressed_block_sizes.end(),
61
1
62
);
63
}
64
};
65
67
68
}
// end namespace GridFormat::Compression
69
70
#endif
// GRIDFORMAT_COMPRESSION_COMMON_HPP_
GridFormat::Compression::default_block_size
constexpr std::size_t default_block_size
as in VTK (https://gitlab.kitware.com/vtk/vtk/-/blob/65fc526a83ac829628a9462f61fa57f1801e2c7e/IO/XML/...
Definition
common.hpp:23
GridFormat::Compression::Blocks
Stores the block sizes used for compressing the given amount of bytes.
Definition
common.hpp:27
gridformat
compression
common.hpp
Generated by
1.18.0