Files
ArduinoJson/JsonGenerator/JsonValue.h

67 lines
1.3 KiB
C
Raw Normal View History

2014-06-27 13:42:26 +02:00
/*
* Arduino JSON library
* Benoit Blanchon 2014 - MIT License
*/
#pragma once
2014-07-01 13:44:36 +02:00
#include "Printable.h"
2014-06-27 13:42:26 +02:00
#include "StringBuilder.h"
2014-07-01 13:44:36 +02:00
class JsonValue : public Printable
2014-06-27 13:42:26 +02:00
{
public:
JsonValue()
{
}
JsonValue(const char* value)
: implementation(&JsonValue::printStringTo)
2014-06-27 13:42:26 +02:00
{
content.string = value;
}
JsonValue(double value)
: implementation(&JsonValue::printNumberTo)
2014-06-27 13:42:26 +02:00
{
content.number = value;
}
JsonValue(bool value)
: implementation(&JsonValue::printBooleanTo)
2014-06-27 13:42:26 +02:00
{
content.boolean = value;
}
2014-07-01 13:44:36 +02:00
JsonValue(Printable& value)
: implementation(&JsonValue::printObjectTo)
2014-06-27 13:42:26 +02:00
{
content.object = &value;
}
virtual size_t printTo(Print& p) const
2014-06-27 13:42:26 +02:00
{
// handmade polymorphism
2014-07-01 13:36:22 +02:00
return (this->*implementation)(p);
}
private:
2014-06-27 13:42:26 +02:00
union Content
{
2014-07-01 13:44:36 +02:00
bool boolean;
double number;
Printable* object;
const char* string;
2014-06-27 13:42:26 +02:00
};
Content content;
2014-07-01 13:44:36 +02:00
size_t(JsonValue::*implementation)(Print& p)const;
size_t printBooleanTo(Print& p) const;
size_t printNumberTo(Print& p) const;
size_t printObjectTo(Print& p) const;
size_t printStringTo(Print& p) const;
};