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