xref: /netbsd-src/external/bsd/zstd/dist/contrib/pzstd/Options.h (revision 3117ece4fc4a4ca4489ba793710b60b0d26bab6c)
1*3117ece4Schristos /*
2*3117ece4Schristos  * Copyright (c) Meta Platforms, Inc. and affiliates.
3*3117ece4Schristos  * All rights reserved.
4*3117ece4Schristos  *
5*3117ece4Schristos  * This source code is licensed under both the BSD-style license (found in the
6*3117ece4Schristos  * LICENSE file in the root directory of this source tree) and the GPLv2 (found
7*3117ece4Schristos  * in the COPYING file in the root directory of this source tree).
8*3117ece4Schristos  */
9*3117ece4Schristos #pragma once
10*3117ece4Schristos 
11*3117ece4Schristos #define ZSTD_STATIC_LINKING_ONLY
12*3117ece4Schristos #define ZSTD_DISABLE_DEPRECATE_WARNINGS /* No deprecation warnings, pzstd itself is deprecated
13*3117ece4Schristos                                          * and uses deprecated functions
14*3117ece4Schristos                                          */
15*3117ece4Schristos #include "zstd.h"
16*3117ece4Schristos #undef ZSTD_STATIC_LINKING_ONLY
17*3117ece4Schristos 
18*3117ece4Schristos #include <cstdint>
19*3117ece4Schristos #include <string>
20*3117ece4Schristos #include <vector>
21*3117ece4Schristos 
22*3117ece4Schristos namespace pzstd {
23*3117ece4Schristos 
24*3117ece4Schristos struct Options {
25*3117ece4Schristos   enum class WriteMode { Regular, Auto, Sparse };
26*3117ece4Schristos 
27*3117ece4Schristos   unsigned numThreads;
28*3117ece4Schristos   unsigned maxWindowLog;
29*3117ece4Schristos   unsigned compressionLevel;
30*3117ece4Schristos   bool decompress;
31*3117ece4Schristos   std::vector<std::string> inputFiles;
32*3117ece4Schristos   std::string outputFile;
33*3117ece4Schristos   bool overwrite;
34*3117ece4Schristos   bool keepSource;
35*3117ece4Schristos   WriteMode writeMode;
36*3117ece4Schristos   bool checksum;
37*3117ece4Schristos   int verbosity;
38*3117ece4Schristos 
39*3117ece4Schristos   enum class Status {
40*3117ece4Schristos     Success, // Successfully parsed options
41*3117ece4Schristos     Failure, // Failure to parse options
42*3117ece4Schristos     Message  // Options specified to print a message (e.g. "-h")
43*3117ece4Schristos   };
44*3117ece4Schristos 
45*3117ece4Schristos   Options();
46*3117ece4Schristos   Options(unsigned numThreads, unsigned maxWindowLog, unsigned compressionLevel,
47*3117ece4Schristos           bool decompress, std::vector<std::string> inputFiles,
48*3117ece4Schristos           std::string outputFile, bool overwrite, bool keepSource,
49*3117ece4Schristos           WriteMode writeMode, bool checksum, int verbosity)
50*3117ece4Schristos       : numThreads(numThreads), maxWindowLog(maxWindowLog),
51*3117ece4Schristos         compressionLevel(compressionLevel), decompress(decompress),
52*3117ece4Schristos         inputFiles(std::move(inputFiles)), outputFile(std::move(outputFile)),
53*3117ece4Schristos         overwrite(overwrite), keepSource(keepSource), writeMode(writeMode),
54*3117ece4Schristos         checksum(checksum), verbosity(verbosity) {}
55*3117ece4Schristos 
56*3117ece4Schristos   Status parse(int argc, const char **argv);
57*3117ece4Schristos 
58*3117ece4Schristos   ZSTD_parameters determineParameters() const {
59*3117ece4Schristos     ZSTD_parameters params = ZSTD_getParams(compressionLevel, 0, 0);
60*3117ece4Schristos     params.fParams.contentSizeFlag = 0;
61*3117ece4Schristos     params.fParams.checksumFlag = checksum;
62*3117ece4Schristos     if (maxWindowLog != 0 && params.cParams.windowLog > maxWindowLog) {
63*3117ece4Schristos       params.cParams.windowLog = maxWindowLog;
64*3117ece4Schristos       params.cParams = ZSTD_adjustCParams(params.cParams, 0, 0);
65*3117ece4Schristos     }
66*3117ece4Schristos     return params;
67*3117ece4Schristos   }
68*3117ece4Schristos 
69*3117ece4Schristos   std::string getOutputFile(const std::string &inputFile) const;
70*3117ece4Schristos };
71*3117ece4Schristos }
72