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