Files
ArduinoJson/JsonGeneratorTests/JsonValue.h
2014-06-30 18:37:54 +02:00

68 lines
1.3 KiB
C++

/*
* Arduino JSON library
* Benoit Blanchon 2014 - MIT License
*/
#pragma once
#include "StringBuilder.h"
class JsonObjectBase;
class JsonValue
{
public:
JsonValue()
{
}
JsonValue(const char* value)
: implementation(&JsonValue::writeStringTo)
{
content.string = value;
}
JsonValue(double value)
: implementation(&JsonValue::writeNumberTo)
{
content.number = value;
}
JsonValue(bool value)
: implementation(&JsonValue::writeBooleanTo)
{
content.boolean = value;
}
JsonValue(JsonObjectBase& value)
: implementation(&JsonValue::writeObjectTo)
{
content.object = &value;
}
void writeTo(StringBuilder& sb)
{
// handmade polymorphism
(this->*implementation)(sb);
}
private:
union Content
{
bool boolean;
double number;
JsonObjectBase* object;
const char* string;
};
Content content;
void (JsonValue::*implementation)(StringBuilder& sb);
void writeBooleanTo(StringBuilder& sb);
void writeNumberTo(StringBuilder& sb);
void writeObjectTo(StringBuilder& sb);
void writeStringTo(StringBuilder& sb);
};