| // Copyright 2017 The Chromium OS Authors. All rights reserved. | |
| // Use of this source code is governed by a BSD-style license that can be | |
| // found in the LICENSE file. | |
| #ifndef _BSDIFF_BSDIFF_ARGUMENTS_H_ | |
| #define _BSDIFF_BSDIFF_ARGUMENTS_H_ | |
| #include <stdint.h> | |
| #include <set> | |
| #include <string> | |
| #include <vector> | |
| #include "bsdiff/constants.h" | |
| #include "bsdiff/patch_writer_interface.h" | |
| namespace bsdiff { | |
| // Class to store the patch writer options about format, type and | |
| // brotli_quality. | |
| class BsdiffArguments { | |
| public: | |
| BsdiffArguments() : format_(BsdiffFormat::kLegacy), brotli_quality_(-1) { | |
| compressor_types_.emplace(CompressorType::kBZ2); | |
| } | |
| BsdiffArguments(BsdiffFormat format, | |
| std::set<CompressorType> types, | |
| int brotli_quality) | |
| : format_(format), | |
| compressor_types_(std::move(types)), | |
| brotli_quality_(brotli_quality) {} | |
| // Check if the compressor type is compatible with the bsdiff format. | |
| bool IsValid() const; | |
| // Getter functions. | |
| BsdiffFormat format() const { return format_; } | |
| int min_length() const { return min_length_; } | |
| std::vector<CompressorType> compressor_types() const; | |
| int brotli_quality() const { return brotli_quality_; } | |
| // Parse the command line arguments of the main function and set all the | |
| // fields accordingly. | |
| bool ParseCommandLine(int argc, char** argv); | |
| // Parse the compression type from string. | |
| static bool ParseCompressorTypes(const std::string& str, | |
| std::set<CompressorType>* types); | |
| // Parse the minimum length parameter from string. | |
| static bool ParseMinLength(const std::string& str, size_t* len); | |
| // Parse the bsdiff format from string. | |
| static bool ParseBsdiffFormat(const std::string& str, BsdiffFormat* format); | |
| // Parse the compression quality (for brotli) from string; also check if the | |
| // value is within the valid range. | |
| static bool ParseQuality(const std::string& str, | |
| int* quality, | |
| int min, | |
| int max); | |
| private: | |
| bool IsCompressorSupported(CompressorType type) const; | |
| // Current format supported are the legacy "BSDIFF40" or "BSDF2". | |
| BsdiffFormat format_; | |
| // The algorithms to compress the patch, e.g. bz2, brotli. | |
| std::set<CompressorType> compressor_types_; | |
| // The quality of brotli compressor. | |
| int brotli_quality_; | |
| size_t min_length_{0}; | |
| }; | |
| } // namespace bsdiff | |
| #endif // _BSDIFF_BSDIFF_ARGUMENTS_H_ |