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