You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
69 lines
1.5 KiB
69 lines
1.5 KiB
/* |
|
* Copyright (C) 2022 Riyyi |
|
* |
|
* SPDX-License-Identifier: MIT |
|
*/ |
|
|
|
#pragma once |
|
|
|
#include <cstdint> // uint8_t |
|
#include <cstdio> // FILE, stdout |
|
#include <sstream> // stringstream |
|
#include <string_view> |
|
|
|
#include "util/format/format.h" |
|
#include "util/timer.h" |
|
|
|
namespace Util::Format { |
|
|
|
void variadicPrint(FILE* file, std::string_view format, TypeErasedParameters& parameters); |
|
|
|
template<size_t N, typename... Parameters> |
|
void print(const char (&format)[N], const Parameters&... parameters) |
|
{ |
|
VariadicParameters variadicParameters { parameters... }; |
|
variadicPrint(stdout, { format, N - 1 }, variadicParameters); |
|
} |
|
|
|
template<size_t N, typename... Parameters> |
|
void print(FILE* file, const char (&format)[N], const Parameters&... parameters) |
|
{ |
|
VariadicParameters variadicParameters { parameters... }; |
|
variadicPrint(file, { format, N - 1 }, variadicParameters); |
|
} |
|
|
|
// ----------------------------------------- |
|
|
|
class PrintOperatorStyle { |
|
public: |
|
PrintOperatorStyle(FILE* file); |
|
virtual ~PrintOperatorStyle(); |
|
|
|
Builder& builder() { return m_builder; } |
|
|
|
private: |
|
FILE* m_file; |
|
|
|
std::stringstream m_stream; |
|
Builder m_builder; |
|
}; |
|
|
|
template<typename T> |
|
const PrintOperatorStyle& operator<<(const PrintOperatorStyle& printOperatorStyle, const T& value) |
|
{ |
|
_format(const_cast<PrintOperatorStyle&>(printOperatorStyle).builder(), value); |
|
return printOperatorStyle; |
|
} |
|
|
|
PrintOperatorStyle print(); |
|
PrintOperatorStyle print(FILE* file); |
|
|
|
// ----------------------------------------- |
|
|
|
} // namespace Util::Format |
|
|
|
namespace Util { |
|
|
|
using Util::Format::print; |
|
|
|
} // namespace Util
|
|
|