mirror of
https://github.com/facebook/zstd.git
synced 2025-03-07 01:10:04 +02:00
``` for f in $(find . \( -path ./.git -o -path ./tests/fuzz/corpora -o -path ./tests/regression/data-cache -o -path ./tests/regression/cache \) -prune -o -type f); do sed -i '/Copyright .* \(Yann Collet\)\|\(Meta Platforms\)/ s/Copyright .*/Copyright (c) Meta Platforms, Inc. and affiliates./' $f; done git checkout HEAD -- build/VS2010/libzstd-dll/libzstd-dll.rc build/VS2010/zstd/zstd.rc tests/test-license.py contrib/linux-kernel/test/include/linux/xxhash.h examples/streaming_compression_thread_pool.c lib/legacy/zstd_v0*.c lib/legacy/zstd_v0*.h nano ./programs/windres/zstd.rc nano ./build/VS2010/zstd/zstd.rc nano ./build/VS2010/libzstd-dll/libzstd-dll.rc ```
73 lines
1.6 KiB
C++
73 lines
1.6 KiB
C++
/*
|
|
* 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", "");
|
|
}
|
|
};
|
|
|
|
}
|