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