62int main(
int argc,
char* argv[])
67 bpo::options_description options(
"Allowed options");
70 (
"help,h",
"print usage message")
71 (
"file,f",bpo::value<std::string>(),
"file to compress")
72 (
"log_severity,l",bpo::value<std::string>(),
"severity of FairLogger");
75 bpo::variables_map vm;
76 bpo::store(bpo::parse_command_line(argc, argv, options), vm);
79 if (vm.count(
"help")) {
80 std::cout << options <<
"\n";
85 if (vm.count(
"file")) {
86 return vm[
"file"].as<std::string>();
88 LOG(error) <<
"missing path to input file";
93 if (vm.count(
"log_severity")) {
94 fair::Logger::SetConsoleSeverity(vm[
"log_severity"].as<std::string>().c_str());
97 std::vector<source_type> tokens = readFile<source_type>(
filename);
100 auto histogram = makeDenseHistogram::fromSamples(tokens.begin(), tokens.end());
102 auto renormedHistogram =
renorm(std::move(histogram),
metrics);
106 std::vector<stream_type> encoderBuffer;
107 std::vector<source_type>
decodeBuffer(tokens.size(), 0);
108 std::vector<source_type> incompressibleSymbols;
110 if (renormedHistogram.hasIncompressibleSymbol()) {
111 LOG(info) <<
"With incompressible symbols";
112 [[maybe_unused]]
auto res = encoder.process(tokens.begin(), tokens.end(), std::back_inserter(encoderBuffer), std::back_inserter(incompressibleSymbols));
113 LOGP(info,
"nIncompressible {}", incompressibleSymbols.size());
114 decoder.process(encoderBuffer.end(),
decodeBuffer.begin(), tokens.size(),
NSTREAMS, incompressibleSymbols.end());
116 LOG(info) <<
"Without incompressible symbols";
117 encoder.process(std::begin(tokens), std::end(tokens), std::back_inserter(encoderBuffer));
123 [&
pos](
const auto&
a,
const auto&
b) {
124 const bool cmp = a == b;
126 LOG(error) << fmt::format(
"[{}] {} != {}", pos, a, b);
131 LOG(info) <<
"Decoder passed tests";
133 LOG(error) <<
"Decoder failed tests";
std::tuple< ransState_t, stream_IT > renorm(ransState_t state, stream_IT outputIter, count_t frequency, size_t symbolTablePrecision)