Added interface Printable.

This commit is contained in:
Benoît Blanchon
2014-07-01 13:44:36 +02:00
parent c3359d3eb9
commit 4d5a7114c1
8 changed files with 42 additions and 22 deletions

View File

@ -37,7 +37,7 @@ private:
JsonValue items[N];
int itemCount;
virtual size_t writeTo(Print& p)
virtual size_t writeTo(Print& p) const
{
size_t n = 0;

View File

@ -94,6 +94,7 @@
<ClInclude Include="JsonObjectBase.h" />
<ClInclude Include="Print.h" />
<ClInclude Include="JsonValue.h" />
<ClInclude Include="Printable.h" />
<ClInclude Include="StringBuilder.h" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />

View File

@ -50,5 +50,8 @@
<ClInclude Include="Print.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Printable.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup>
</Project>

View File

@ -45,7 +45,7 @@ private:
KeyValuePair items[N];
int itemCount;
virtual size_t writeTo(Print& p)
virtual size_t writeTo(Print& p) const
{
size_t n = 0;

View File

@ -7,8 +7,9 @@
#include "JsonValue.h"
#include "Print.h"
#include "Printable.h"
class JsonObjectBase
class JsonObjectBase : public Printable
{
public:
@ -18,6 +19,6 @@ public:
return writeTo(sb);
}
virtual size_t writeTo(Print& p) = 0;
virtual size_t writeTo(Print& p) const = 0;
};

View File

@ -8,12 +8,12 @@
#include <cstdio>
#include <cstring>
size_t JsonValue::writeBooleanTo(Print& p)
size_t JsonValue::writeBooleanTo(Print& p) const
{
return p.write(content.boolean ? "true" : "false");
}
size_t JsonValue::writeNumberTo(Print& p)
size_t JsonValue::writeNumberTo(Print& p) const
{
char tmp[16];
@ -22,7 +22,7 @@ size_t JsonValue::writeNumberTo(Print& p)
return p.write(tmp);
}
size_t JsonValue::writeObjectTo(Print& p)
size_t JsonValue::writeObjectTo(Print& p) const
{
if (content.object)
return ((JsonObjectBase*)content.object)->writeTo(p);
@ -30,7 +30,7 @@ size_t JsonValue::writeObjectTo(Print& p)
return p.write("null");
}
size_t JsonValue::writeStringTo(Print& p)
size_t JsonValue::writeStringTo(Print& p) const
{
auto s = content.string;

View File

@ -5,11 +5,10 @@
#pragma once
#include "Printable.h"
#include "StringBuilder.h"
class JsonObjectBase;
class JsonValue
class JsonValue : public Printable
{
public:
@ -35,13 +34,13 @@ public:
content.boolean = value;
}
JsonValue(JsonObjectBase& value)
JsonValue(Printable& value)
: implementation(&JsonValue::writeObjectTo)
{
content.object = &value;
}
size_t writeTo(Print& p)
virtual size_t writeTo(Print& p) const
{
// handmade polymorphism
return (this->*implementation)(p);
@ -51,18 +50,18 @@ private:
union Content
{
bool boolean;
double number;
JsonObjectBase* object;
const char* string;
bool boolean;
double number;
Printable* object;
const char* string;
};
Content content;
size_t(JsonValue::*implementation)(Print& p);
size_t(JsonValue::*implementation)(Print& p)const;
size_t writeBooleanTo(Print& p);
size_t writeNumberTo(Print& p);
size_t writeObjectTo(Print& p);
size_t writeStringTo(Print& p);
size_t writeBooleanTo(Print& p) const;
size_t writeNumberTo(Print& p) const;
size_t writeObjectTo(Print& p) const;
size_t writeStringTo(Print& p) const;
};

View File

@ -0,0 +1,16 @@
/*
* Arduino JSON library
* Benoit Blanchon 2014 - MIT License
*/
#pragma once
class Print;
class Printable
{
public:
virtual size_t writeTo(Print& p) const = 0;
};