diff options
author | 2023-12-11 10:48:02 +1100 | |
---|---|---|
committer | 2023-12-11 10:48:02 +1100 | |
commit | 05e69b43e9770e16c4bf1c6ca3e585e64c3f6ff9 (patch) | |
tree | 00ff2118ddc01455ee55785283a2fcfb9bfaf77e /3rdparty/zstd/contrib/pzstd/Logging.h | |
parent | 1a4287925e3982e2f782dee6f62b198984b839de (diff) |
Added Zstandard support for zip archives and CHDs. (#11827)
* 3rdparty/zstd: Added Zstandard compression library version 1.5.5.
* util/unzip.cpp: Added support for Zstandard compression (method 93).
* util/chdcodec.cpp: Added support for Zstandard compression.
* 3rdparty/flac: Always define NDEBUG to avoid log spam.
Diffstat (limited to '3rdparty/zstd/contrib/pzstd/Logging.h')
-rw-r--r-- | 3rdparty/zstd/contrib/pzstd/Logging.h | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/3rdparty/zstd/contrib/pzstd/Logging.h b/3rdparty/zstd/contrib/pzstd/Logging.h new file mode 100644 index 00000000000..84a08d20080 --- /dev/null +++ b/3rdparty/zstd/contrib/pzstd/Logging.h @@ -0,0 +1,72 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * All rights reserved. + * + * This source code is licensed under both the BSD-style license (found in the + * LICENSE file in the root directory of this source tree) and the GPLv2 (found + * in the COPYING file in the root directory of this source tree). + */ +#pragma once + +#include <cstdio> +#include <mutex> + +namespace pzstd { + +constexpr int kLogError = 1; +constexpr int kLogInfo = 2; +constexpr int kLogDebug = 3; +constexpr int kLogVerbose = 4; + +class Logger { + std::mutex mutex_; + FILE* out_; + const int level_; + + using Clock = std::chrono::system_clock; + Clock::time_point lastUpdate_; + std::chrono::milliseconds refreshRate_; + + public: + explicit Logger(int level, FILE* out = stderr) + : out_(out), level_(level), lastUpdate_(Clock::now()), + refreshRate_(150) {} + + + bool logsAt(int level) { + return level <= level_; + } + + template <typename... Args> + void operator()(int level, const char *fmt, Args... args) { + if (level > level_) { + return; + } + std::lock_guard<std::mutex> lock(mutex_); + std::fprintf(out_, fmt, args...); + } + + template <typename... Args> + void update(int level, const char *fmt, Args... args) { + if (level > level_) { + return; + } + std::lock_guard<std::mutex> lock(mutex_); + auto now = Clock::now(); + if (now - lastUpdate_ > refreshRate_) { + lastUpdate_ = now; + std::fprintf(out_, "\r"); + std::fprintf(out_, fmt, args...); + } + } + + void clear(int level) { + if (level > level_) { + return; + } + std::lock_guard<std::mutex> lock(mutex_); + std::fprintf(out_, "\r%79s\r", ""); + } +}; + +} |