14#include "arccore/common/JSONWriter.h"
16#include "arccore/base/String.h"
17#include "arccore/base/FatalErrorException.h"
22#define RAPIDJSON_NO_SIZETYPEDEFINE
25#define RAPIDJSON_HAS_STDSTRING 1
26#include "arccore/common/internal/json/rapidjson/writer.h"
27#include "arccore/common/internal/json/rapidjson/prettywriter.h"
29#include "arccore/common/internal/json/rapidjson/stringbuffer.h"
47 Impl(
bool use_hex_float)
49 , m_use_hex_float(use_hex_float)
51 m_writer.SetIndent(
' ', 1);
52 m_writer.SetFormatOptions(rapidjson::kFormatSingleLineArray);
53 m_real_ostr.precision(std::numeric_limits<Real>::max_digits10);
65 m_writer.Key((
const char*)bytes.
data(), size,
true);
76 m_writer.String((
const char*)bytes.
data(), size,
true);
78 void writeStringValue(
const std::string& value)
80 m_writer.String(value);
86 if (m_use_hex_float) {
88 sprintf(buf,
"%a", v);
98 m_real_ostr.str(std::string());
104 for (
Int64 i = 0, n = view.
size(); i < n; ++i) {
107 if (m_use_hex_float) {
108 sprintf(buf,
"%a", view[i]);
112 m_real_ostr << view[i];
114 writeStringValue(m_real_ostr.str());
120 rapidjson::StringBuffer m_buffer;
121 rapidjson::PrettyWriter<rapidjson::StringBuffer> m_writer;
122 bool m_use_hex_float;
123 std::ostringstream m_real_ostr;
130JSONWriter(FormatFlags format_flags)
133 bool use_hex_float = (int)format_flags & (int)FormatFlags::HexFloat;
134 m_p =
new Impl(use_hex_float);
146 m_p->m_writer.StartObject();
151 m_p->m_writer.EndObject();
154writeKey(StringView key)
161 m_p->m_writer.StartArray();
166 m_p->m_writer.EndArray();
170writeValue(StringView str)
172 m_p->writeStringValue(str);
175write(StringView key,
bool v)
178 m_p->m_writer.Bool(v);
181_writeInt64(StringView key,
Int64 v)
184 m_p->m_writer.Int64(v);
187_writeUInt64(StringView key,
UInt64 v)
190 m_p->m_writer.Uint64(v);
193write(StringView key,
Real v)
198write(StringView key, StringView str)
201 m_p->writeStringValue(str);
204write(StringView key,
const char* v)
207 m_p->writeStringValue(StringView(v));
210write(StringView key, std::string_view v)
213 m_p->writeStringValue(v);
216writeIfNotNull(StringView key,
const String& str)
221 m_p->writeStringValue(str);
225write(StringView key, Span<const Int32> view)
228 m_p->m_writer.StartArray();
229 for (
Int64 i = 0, n = view.size(); i < n; ++i)
230 m_p->m_writer.Int(view[i]);
231 m_p->m_writer.EndArray();
235write(StringView key, Span<const Int64> view)
238 m_p->m_writer.StartArray();
239 for (
Int64 i = 0, n = view.size(); i < n; ++i)
240 m_p->m_writer.Int64(view[i]);
241 m_p->m_writer.EndArray();
245write(StringView key, Span<const Real> view)
247 m_p->write(key, view);
253StringView JSONWriter::
256 const Byte* buf_chars =
reinterpret_cast<const Byte*
>(m_p->m_buffer.GetString());
257 Span<const Byte> bytes(buf_chars, m_p->m_buffer.GetSize());
258 return StringView(bytes);
#define ARCCORE_FATAL(...)
Macro envoyant une exception FatalErrorException.
Types et fonctions associés aux classes ArrayView et ConstArrayView.
constexpr __host__ __device__ pointer data() const noexcept
Pointeur sur le début de la vue.
constexpr __host__ __device__ SizeType size() const noexcept
Retourne la taille du tableau.
Vue d'un tableau d'éléments de type T.
Vue sur une chaîne de caractères UTF-8.
constexpr Span< const Byte > bytes() const ARCCORE_NOEXCEPT
Retourne la conversion de l'instance dans l'encodage UTF-8.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
std::uint64_t UInt64
Type entier non signé sur 64 bits.
std::int64_t Int64
Type entier signé sur 64 bits.
double Real
Type représentant un réel.
unsigned char Byte
Type d'un octet.
RAPIDJSON_NAMESPACE_BEGIN typedef unsigned SizeType
Size type (for string lengths, array sizes, etc.)