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.
63 lines
1.4 KiB
63 lines
1.4 KiB
2 years ago
|
/*
|
||
|
* Copyright (C) 2022 Riyyi
|
||
|
*
|
||
|
* SPDX-License-Identifier: MIT
|
||
|
*/
|
||
|
|
||
|
#include <cstddef> // size_t
|
||
|
#include <iomanip> // setprecision
|
||
|
#include <ios> // fixed
|
||
|
#include <limits> // numeric_limits
|
||
|
#include <sstream> // stringstream
|
||
|
#include <string>
|
||
|
#include <string_view>
|
||
|
|
||
|
#include "util/format/builder.h"
|
||
|
|
||
|
namespace Util::Format {
|
||
|
|
||
|
void Builder::putLiteral(std::string_view literal)
|
||
|
{
|
||
|
for (size_t i = 0; i < literal.length(); ++i) {
|
||
|
putCharacter(literal[i]);
|
||
|
if (literal[i] == '{' || literal[i] == '}') {
|
||
|
++i;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Builder::putF32(float number, size_t precision) const
|
||
|
{
|
||
|
precision = (precision > std::numeric_limits<float>::digits10) ? m_precision : precision;
|
||
|
|
||
|
std::stringstream stream;
|
||
|
stream
|
||
|
<< std::fixed
|
||
|
<< std::setprecision(precision)
|
||
|
<< number;
|
||
|
std::string string = stream.str();
|
||
|
string = string.substr(0, string.find_first_of('0', string.find('.')));
|
||
|
m_builder << string;
|
||
|
}
|
||
|
|
||
|
void Builder::putF64(double number, size_t precision) const
|
||
|
{
|
||
|
precision = (precision > std::numeric_limits<double>::digits10) ? m_precision : precision;
|
||
|
|
||
|
std::stringstream stream;
|
||
|
stream
|
||
|
<< std::fixed
|
||
|
<< std::setprecision(precision)
|
||
|
<< number;
|
||
|
std::string string = stream.str();
|
||
|
string = string.substr(0, string.find_first_of('0', string.find('.')));
|
||
|
m_builder << string;
|
||
|
}
|
||
|
|
||
|
void Builder::resetSpecifiers()
|
||
|
{
|
||
|
setPrecision();
|
||
|
}
|
||
|
|
||
|
} // namespace Util::Format
|