ZeroErr
Loading...
Searching...
No Matches
text.h
Go to the documentation of this file.
1#pragma once
2
3#include <cstddef>
4
5#include "zeroerr/buffer.h"
6#include "zeroerr/string.h"
7
8// Avoid duplicating diagnostic setup in each caller. Keep equivalent template
9// instantiations available for linker folding without changing user build flags.
10#if defined(_MSC_VER)
11#define ZEROERR_DIAGNOSTIC_NOINLINE __declspec(noinline)
12#elif defined(__GNUC__) || defined(__clang__)
13#define ZEROERR_DIAGNOSTIC_NOINLINE __attribute__((noinline))
14#else
15#define ZEROERR_DIAGNOSTIC_NOINLINE
16#endif
17
18namespace zeroerr {
19struct Printer;
20namespace detail {
21
22// Plain append-only storage. Pure concatenation does not construct an iostream,
23// streambuf, locale, or virtual table; only value printing needs the adapter.
25public:
26 TextBuffer();
28 TextBuffer(const TextBuffer&) = delete;
29 TextBuffer& operator=(const TextBuffer&) = delete;
30
31 void append(const char* data, std::size_t size);
32 void append(char value);
33 const char* data() const;
34 std::size_t size() const;
35 zeroerr::String str() const;
36
37private:
38 char local_[256];
39 char* data_;
40 std::size_t size_;
41 std::size_t capacity_;
42};
43
45public:
47};
48
49// Borrowed values are printed synchronously while their caller is alive. The
50// callback preserves PrinterExt and arbitrary ostream insertion overloads.
52 const void* object;
53 void (*print)(Printer&, const void*);
54};
55
56zeroerr::String formatText(const char* fmt, const DiagnosticValue* values, std::size_t count,
57 std::size_t* ends);
58zeroerr::String comparisonText(const zeroerr::String& prefix, DiagnosticValue lhs, const char* op,
59 DiagnosticValue rhs, bool& result);
61zeroerr::String joinDiagnostic(const zeroerr::String& lhs, const char* op, const zeroerr::String& rhs);
62zeroerr::String assertionText(const zeroerr::String& condition, const zeroerr::String& message,
63 const char* file, unsigned line);
64
65} // namespace detail
66} // namespace zeroerr
Definition buffer.h:7
Definition string.h:41
Definition text.h:24
void append(const char *data, std::size_t size)
Definition text.cpp:22
zeroerr::String str() const
Definition text.cpp:48
~TextBuffer()
Definition text.cpp:18
TextBuffer()
Definition text.cpp:17
TextBuffer(const TextBuffer &)=delete
std::size_t size() const
Definition text.cpp:47
const char * data() const
Definition text.cpp:46
TextBuffer & operator=(const TextBuffer &)=delete
Definition text.h:44
StringBuffer stream
Definition text.h:46
zeroerr::String joinDiagnostic(const zeroerr::String &lhs, const char *op, const zeroerr::String &rhs)
Definition text.cpp:114
zeroerr::String valueText(DiagnosticValue value)
Definition text.cpp:63
zeroerr::String assertionText(const zeroerr::String &condition, const zeroerr::String &message, const char *file, unsigned line)
Definition assert_text.cpp:8
zeroerr::String comparisonText(const zeroerr::String &prefix, DiagnosticValue lhs, const char *op, DiagnosticValue rhs, bool &result)
Definition text.cpp:69
zeroerr::String formatText(const char *fmt, const DiagnosticValue *values, std::size_t count, std::size_t *ends)
Definition text.cpp:83
Definition assert_text.cpp:5
A functor class Printer for printing a value of any type.
Definition print.h:74
void(* print)(Printer &, const void *)
Definition text.h:53
const void * object
Definition text.h:52