summaryrefslogtreecommitdiffhomepage
path: root/vendor/toml++/impl/print_to_stream.hpp
blob: 60eac4e4d344d3d65efd1125d632069f634622a5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
// # This file is a part of toml++ and is subject to the the terms of the MIT license.
// # Copyright (c) Mark Gillard <mark.gillard@outlook.com.au>
// # See https://github.com/marzer/tomlplusplus/blob/master/LICENSE for the full license text.
//  SPDX-License-Identifier: MIT
#pragma once

#include "forward_declarations.hpp"
#include "header_start.hpp"
#include "std_string.hpp"

TOML_IMPL_NAMESPACE_START {
  // Q: "why does print_to_stream() exist? why not just use ostream::write(), ostream::put() etc?"
  // A: - I'm using <charconv> to format numerics. Faster and locale-independent.
  //    - I can (potentially) avoid forcing users to drag in <sstream> and <iomanip>.
  //    - Strings in C++. Honestly.

  TOML_EXPORTED_FREE_FUNCTION
  TOML_ATTR(nonnull)
  void TOML_CALLCONV print_to_stream(std::ostream&, const char*, size_t);

  TOML_EXPORTED_FREE_FUNCTION
  void TOML_CALLCONV print_to_stream(std::ostream&, std::string_view);

  TOML_EXPORTED_FREE_FUNCTION
  void TOML_CALLCONV print_to_stream(std::ostream&, const std::string&);

  TOML_EXPORTED_FREE_FUNCTION
  void TOML_CALLCONV print_to_stream(std::ostream&, char);

  TOML_EXPORTED_FREE_FUNCTION
  void TOML_CALLCONV print_to_stream(std::ostream&, signed char, value_flags = {},
                                     size_t min_digits = 0);

  TOML_EXPORTED_FREE_FUNCTION
  void TOML_CALLCONV print_to_stream(std::ostream&, signed short, value_flags = {},
                                     size_t min_digits = 0);

  TOML_EXPORTED_FREE_FUNCTION
  void TOML_CALLCONV print_to_stream(std::ostream&, signed int, value_flags = {},
                                     size_t min_digits = 0);

  TOML_EXPORTED_FREE_FUNCTION
  void TOML_CALLCONV print_to_stream(std::ostream&, signed long, value_flags = {},
                                     size_t min_digits = 0);

  TOML_EXPORTED_FREE_FUNCTION
  void TOML_CALLCONV print_to_stream(std::ostream&, signed long long, value_flags = {},
                                     size_t min_digits = 0);

  TOML_EXPORTED_FREE_FUNCTION
  void TOML_CALLCONV print_to_stream(std::ostream&, unsigned char, value_flags = {},
                                     size_t min_digits = 0);

  TOML_EXPORTED_FREE_FUNCTION
  void TOML_CALLCONV print_to_stream(std::ostream&, unsigned short, value_flags = {},
                                     size_t min_digits = 0);

  TOML_EXPORTED_FREE_FUNCTION
  void TOML_CALLCONV print_to_stream(std::ostream&, unsigned int, value_flags = {},
                                     size_t min_digits = 0);

  TOML_EXPORTED_FREE_FUNCTION
  void TOML_CALLCONV print_to_stream(std::ostream&, unsigned long, value_flags = {},
                                     size_t min_digits = 0);

  TOML_EXPORTED_FREE_FUNCTION
  void TOML_CALLCONV print_to_stream(std::ostream&, unsigned long long, value_flags = {},
                                     size_t min_digits = 0);

  TOML_EXPORTED_FREE_FUNCTION
  void TOML_CALLCONV print_to_stream(std::ostream&, float, value_flags = {},
                                     bool relaxed_precision = false);

  TOML_EXPORTED_FREE_FUNCTION
  void TOML_CALLCONV print_to_stream(std::ostream&, double, value_flags = {},
                                     bool relaxed_precision = false);

  TOML_EXPORTED_FREE_FUNCTION
  void TOML_CALLCONV print_to_stream(std::ostream&, bool);

  TOML_EXPORTED_FREE_FUNCTION
  void TOML_CALLCONV print_to_stream(std::ostream&, const toml::date&);

  TOML_EXPORTED_FREE_FUNCTION
  void TOML_CALLCONV print_to_stream(std::ostream&, const toml::time&);

  TOML_EXPORTED_FREE_FUNCTION
  void TOML_CALLCONV print_to_stream(std::ostream&, const toml::time_offset&);

  TOML_EXPORTED_FREE_FUNCTION
  void TOML_CALLCONV print_to_stream(std::ostream&, const toml::date_time&);

  TOML_EXPORTED_FREE_FUNCTION
  void TOML_CALLCONV print_to_stream(std::ostream&, const source_position&);

  TOML_EXPORTED_FREE_FUNCTION
  void TOML_CALLCONV print_to_stream(std::ostream&, const source_region&);

#if TOML_ENABLE_FORMATTERS

  TOML_EXPORTED_FREE_FUNCTION
  void TOML_CALLCONV print_to_stream(std::ostream&, const array&);

  TOML_EXPORTED_FREE_FUNCTION
  void TOML_CALLCONV print_to_stream(std::ostream&, const table&);

  TOML_EXPORTED_FREE_FUNCTION
  void TOML_CALLCONV print_to_stream(std::ostream&, const value<std::string>&);

  TOML_EXPORTED_FREE_FUNCTION
  void TOML_CALLCONV print_to_stream(std::ostream&, const value<int64_t>&);

  TOML_EXPORTED_FREE_FUNCTION
  void TOML_CALLCONV print_to_stream(std::ostream&, const value<double>&);

  TOML_EXPORTED_FREE_FUNCTION
  void TOML_CALLCONV print_to_stream(std::ostream&, const value<bool>&);

  TOML_EXPORTED_FREE_FUNCTION
  void TOML_CALLCONV print_to_stream(std::ostream&, const value<date>&);

  TOML_EXPORTED_FREE_FUNCTION
  void TOML_CALLCONV print_to_stream(std::ostream&, const value<time>&);

  TOML_EXPORTED_FREE_FUNCTION
  void TOML_CALLCONV print_to_stream(std::ostream&, const value<date_time>&);

#endif

  template <typename T, typename U>
  inline void print_to_stream_bookended(std::ostream & stream, const T& val, const U& bookend) {
    print_to_stream(stream, bookend);
    print_to_stream(stream, val);
    print_to_stream(stream, bookend);
  }
}
TOML_IMPL_NAMESPACE_END;

#include "header_end.hpp"