Reorder Reflect functions

This commit is contained in:
Fangrui Song 2018-01-06 11:26:37 -08:00
parent 0c9f572637
commit 4758b70d00
2 changed files with 39 additions and 24 deletions

View File

@ -24,6 +24,7 @@ void Reflect(Reader& visitor, int16_t& value) {
void Reflect(Writer& visitor, int16_t& value) {
visitor.Int(value);
}
// int32_t
void Reflect(Reader& visitor, int32_t& value) {
if (visitor.IsInt())
@ -32,6 +33,7 @@ void Reflect(Reader& visitor, int32_t& value) {
void Reflect(Writer& visitor, int32_t& value) {
visitor.Int(value);
}
// int64_t
void Reflect(Reader& visitor, int64_t& value) {
if (visitor.IsInt64())
@ -40,6 +42,7 @@ void Reflect(Reader& visitor, int64_t& value) {
void Reflect(Writer& visitor, int64_t& value) {
visitor.Int64(value);
}
// uint64_t
void Reflect(Reader& visitor, uint64_t& value) {
if (visitor.IsUint64())
@ -48,6 +51,7 @@ void Reflect(Reader& visitor, uint64_t& value) {
void Reflect(Writer& visitor, uint64_t& value) {
visitor.Uint64(value);
}
// bool
void Reflect(Reader& visitor, bool& value) {
if (visitor.IsBool())
@ -56,6 +60,7 @@ void Reflect(Reader& visitor, bool& value) {
void Reflect(Writer& visitor, bool& value) {
visitor.Bool(value);
}
// std::string
void Reflect(Reader& visitor, std::string& value) {
if (visitor.IsString())

View File

@ -97,23 +97,27 @@ void Reflect(Writer& visitor, uint64_t& value);
// bool
void Reflect(Reader& visitor, bool& value);
void Reflect(Writer& visitor, bool& value);
// std::string
void Reflect(Reader& visitor, std::string& value);
void Reflect(Writer& visitor, std::string& value);
// Writer:
// std::optional
template <typename T>
void Reflect(Writer& visitor, std::vector<T>& values) {
visitor.StartArray();
for (auto& value : values)
Reflect(visitor, value);
visitor.EndArray();
void Reflect(Reader& visitor, optional<T>& value) {
if (visitor.IsNull())
return;
T real_value{};
Reflect(visitor, real_value);
value = real_value;
}
template <typename T>
void Reflect(Writer& visitor, optional<T>& value) {
if (value)
Reflect(visitor, value.value());
}
// std::variant (Writer only)
template <typename T0, typename T1>
void Reflect(Writer& visitor, std::variant<T0, T1>& value) {
if (value.index() == 0)
@ -121,6 +125,28 @@ void Reflect(Writer& visitor, std::variant<T0, T1>& value) {
else
Reflect(visitor, std::get<1>(value));
}
// std::vector
template <typename T>
void Reflect(Reader& visitor, std::vector<T>& values) {
if (!visitor.IsArray())
return;
for (auto& entry : visitor.GetArray()) {
T entry_value;
Reflect(entry, entry_value);
values.push_back(entry_value);
}
}
template <typename T>
void Reflect(Writer& visitor, std::vector<T>& values) {
visitor.StartArray();
for (auto& value : values)
Reflect(visitor, value);
visitor.EndArray();
}
// Writer:
inline void DefaultReflectMemberStart(Writer& visitor) {
visitor.StartObject();
}
@ -156,24 +182,8 @@ void ReflectMember(Writer& visitor, const char* name, optional<T>& value) {
void ReflectMember(Writer& visitor, const char* name, std::string& value);
// Reader:
template <typename T>
void Reflect(Reader& visitor, std::vector<T>& values) {
if (!visitor.IsArray())
return;
for (auto& entry : visitor.GetArray()) {
T entry_value;
Reflect(entry, entry_value);
values.push_back(entry_value);
}
}
template <typename T>
void Reflect(Reader& visitor, optional<T>& value) {
if (visitor.IsNull())
return;
T real_value{};
Reflect(visitor, real_value);
value = real_value;
}
inline void DefaultReflectMemberStart(Reader& visitor) {}
template <typename T>
bool ReflectMemberStart(Reader& visitor, T& value) {