code/include/swoc/bwf_std.h (38 lines of code) (raw):
// SPDX-License-Identifier: Apache-2.0
// Copyright Apache Software Foundation 2019
/** @file
BufferWriter formatters for types in the std namespace.
*/
#pragma once
#include <atomic>
#include <chrono>
#include <bitset>
#include "swoc/swoc_version.h"
#include "swoc/bwf_base.h"
namespace swoc { inline namespace SWOC_VERSION_NS {
using namespace literals;
/// Format atomics by stripping the atomic and formatting the underlying type.
template <typename T>
BufferWriter &
bwformat(BufferWriter &w, bwf::Spec const &spec, std::atomic<T> const &v) {
return ::swoc::bwformat(w, spec, v.load());
}
BufferWriter &bwformat(BufferWriter &w, bwf::Spec const &spec, std::error_code const &ec);
template <size_t N>
BufferWriter &
bwformat(BufferWriter &w, bwf::Spec const & /* spec */, std::bitset<N> const &bits) {
for (unsigned idx = 0; idx < N; ++idx) {
w.write(bits[idx] ? '1' : '0');
}
return w;
}
template <typename Rep, typename Period>
BufferWriter &
bwformat(BufferWriter &w, bwf::Spec const &spec, std::chrono::duration<Rep, Period> const &d) {
return bwformat(w, spec, d.count());
}
template <typename Clock, typename Duration>
BufferWriter &
bwformat(BufferWriter &w, bwf::Spec const &spec, std::chrono::time_point<Clock, Duration> const &t) {
return bwformat(w, spec, t.time_since_epoch());
}
inline BufferWriter &
bwformat(BufferWriter &w, bwf::Spec const &spec, std::exception const &e) {
w.write("Exception - "_tv);
return bwformat(w, spec, e.what());
}
}} // namespace swoc::SWOC_VERSION_NS