30 mutable std::string cache_string_;
46 [[nodiscard]]
virtual std::string
className()
const;
61 [[nodiscard]]
virtual std::string
toString(
bool enter)
const;
67 explicit operator std::string()
const;
73 explicit operator const char*()
const;
80 [[nodiscard]]
const char*
toCString(
bool enter)
const;
102 template<
typename TYPE>
116 template <
typename TYPE>
127 template<
typename TYPE>
141 template<
typename TYPE>
178 struct std::formatter<T> {
185 static constexpr auto parse(format_parse_context& ctx);
193 static auto format(
const T& p, format_context& ctx);
198inline original::printable::~printable() =
default;
207 std::stringstream ss;
209 if (enter) ss <<
"\n";
213inline original::printable::operator std::string()
const {
217inline original::printable::operator
const char*()
const {
223 this->cache_string_ = this->
toString(enter);
224 return this->cache_string_.c_str();
227template<
typename TYPE>
230 if constexpr (std::is_enum_v<TYPE>) {
231 return formatEnum(t);
233 std::stringstream ss;
239template <
typename TYPE>
243 std::make_unique<std::string>(formatString<TYPE>(t));
244 return result->c_str();
247template <
typename TYPE>
250 const std::string enumName =
typeid(t).name();
251 const int enumValue =
static_cast<std::underlying_type_t<TYPE>
>(t);
252 return enumName +
"(" + std::to_string(enumValue) +
")";
256inline auto original::printable::formatString<std::nullptr_t>(
const std::nullptr_t&) -> std::string
262inline auto original::printable::formatString<std::string>(
const std::string& t) -> std::string
264 return "\"" + t +
"\"";
270 return "'" + std::string(1, t) +
"'";
276 return t != 0 ?
"true" :
"false";
279template <
typename TYPE>
285 std::stringstream ss;
292 return formatString<std::string>(ptr);
302constexpr auto std::formatter<T>::parse(std::format_parse_context &ctx) {
308auto std::formatter<T>::format(
const T &p, std::format_context &ctx) {
309 return formatter<std::string>().format(
static_cast<std::string
>(p), ctx);
Base class providing polymorphic string conversion capabilities.
Definition printable.h:29
const char * toCString(bool enter) const
Direct C-string access with formatting control.
Definition printable.h:221
static std::string formatString(TYPE *const &ptr)
Pointer-specific formatting.
friend std::ostream & operator<<(std::ostream &os, const printable &p)
Stream insertion operator for printable objects.
virtual std::string toString(bool enter) const
Generates formatted string representation.
Definition printable.h:205
virtual std::string className() const
Gets the class name for type identification.
Definition printable.h:200
static const char * formatCString(const TYPE &t)
C-string cache for temporary usage.
static std::string formatEnum(const TYPE &t)
Enum formatting utility.
static std::string formatString(const TYPE &t)
Universal value-to-string conversion.
Checks derivation or type identity.
Definition types.h:173
Main namespace for the project Original.
Definition algorithms.h:21
std::ostream & operator<<(std::ostream &os, const printable &p)
Stream insertion operator for printable objects.
Definition printable.h:295
Core type system foundations and concept definitions.