Added namespace for the parser

This commit is contained in:
Benoît Blanchon
2014-07-03 14:00:51 +02:00
parent 78a920a5fc
commit 50b2a1b4a7
12 changed files with 156 additions and 122 deletions

View File

@ -6,6 +6,8 @@
#include "JsonArray.h" #include "JsonArray.h"
#include "JsonHashTable.h" #include "JsonHashTable.h"
using namespace ArduinoJson::Parser;
JsonArray::JsonArray(char* json, jsmntok_t* tokens) JsonArray::JsonArray(char* json, jsmntok_t* tokens)
: JsonObjectBase(json, tokens) : JsonObjectBase(json, tokens)
{ {

View File

@ -7,16 +7,20 @@
#include "JsonObjectBase.h" #include "JsonObjectBase.h"
class JsonHashTable; namespace ArduinoJson
class JsonArray : public JsonObjectBase
{ {
namespace Parser
{
class JsonHashTable;
class JsonArray : public JsonObjectBase
{
template <int N> template <int N>
friend class JsonParser; friend class JsonParser;
friend class JsonHashTable; friend class JsonHashTable;
public: public:
JsonArray() {} JsonArray() {}
@ -32,8 +36,10 @@ public:
long getLong(int index); long getLong(int index);
char* getString(int index); char* getString(int index);
private: private:
JsonArray(char* json, jsmntok_t* tokens); JsonArray(char* json, jsmntok_t* tokens);
jsmntok_t* getToken(int index); jsmntok_t* getToken(int index);
}; };
}
}

View File

@ -3,10 +3,11 @@
* Benoit Blanchon 2014 - MIT License * Benoit Blanchon 2014 - MIT License
*/ */
#include <string.h> // for strcmp()
#include "JsonArray.h" #include "JsonArray.h"
#include "JsonHashTable.h" #include "JsonHashTable.h"
#include <string.h> // for strcmp() using namespace ArduinoJson::Parser;
JsonHashTable::JsonHashTable(char* json, jsmntok_t* tokens) JsonHashTable::JsonHashTable(char* json, jsmntok_t* tokens)
: JsonObjectBase(json, tokens) : JsonObjectBase(json, tokens)

View File

@ -7,16 +7,20 @@
#include "JsonObjectBase.h" #include "JsonObjectBase.h"
class JsonArray; namespace ArduinoJson
class JsonHashTable : public JsonObjectBase
{ {
namespace Parser
{
class JsonArray;
class JsonHashTable : public JsonObjectBase
{
template <int N> template <int N>
friend class JsonParser; friend class JsonParser;
friend class JsonArray; friend class JsonArray;
public: public:
JsonHashTable() {} JsonHashTable() {}
@ -29,8 +33,10 @@ public:
long getLong(const char* key); long getLong(const char* key);
char* getString(const char* key); char* getString(const char* key);
private: private:
JsonHashTable(char* json, jsmntok_t* tokens); JsonHashTable(char* json, jsmntok_t* tokens);
jsmntok_t* getToken(const char* key); jsmntok_t* getToken(const char* key);
}; };
}
}

View File

@ -3,9 +3,10 @@
* Benoit Blanchon 2014 - MIT License * Benoit Blanchon 2014 - MIT License
*/ */
#include <stdlib.h> // for strtol, strtod
#include "JsonObjectBase.h" #include "JsonObjectBase.h"
#include <stdlib.h> // for strtol, strtod using namespace ArduinoJson::Parser;
int JsonObjectBase::getNestedTokenCount(jsmntok_t* token) int JsonObjectBase::getNestedTokenCount(jsmntok_t* token)
{ {

View File

@ -7,9 +7,13 @@
#include "jsmn.h" #include "jsmn.h"
class JsonObjectBase namespace ArduinoJson
{ {
public: namespace Parser
{
class JsonObjectBase
{
public:
JsonObjectBase() JsonObjectBase()
{ {
@ -21,7 +25,7 @@ public:
return json != 0 && tokens != 0; return json != 0 && tokens != 0;
} }
protected: protected:
JsonObjectBase(char* json, jsmntok_t* tokens) JsonObjectBase(char* json, jsmntok_t* tokens)
{ {
@ -44,4 +48,6 @@ protected:
char* json; char* json;
jsmntok_t* tokens; jsmntok_t* tokens;
}; };
}
}

View File

@ -8,23 +8,27 @@
#include "JsonHashTable.h" #include "JsonHashTable.h"
#include "JsonArray.h" #include "JsonArray.h"
/* namespace ArduinoJson
* The JSON parser.
*
* You need to specifiy the number of token to be allocated for that parser.
* Values from 16 to 32 are recommended.
* The parser size will be MAX_TOKEN*8 bytes.
* Don't forget that the memory size of standard Arduino board is only 2KB
*
* CAUTION: JsonArray and JsonHashTable contain pointers to tokens of the
* JsonParser, so they need the JsonParser to be in memory to work.
* As a result, you must not create JsonArray and JsonHashTable that have a
* longer life that the JsonParser.
*/
template <int MAX_TOKENS>
class JsonParser
{ {
public: namespace Parser
{
/*
* The JSON parser.
*
* You need to specifiy the number of token to be allocated for that parser.
* Values from 16 to 32 are recommended.
* The parser size will be MAX_TOKEN*8 bytes.
* Don't forget that the memory size of standard Arduino board is only 2KB
*
* CAUTION: JsonArray and JsonHashTable contain pointers to tokens of the
* JsonParser, so they need the JsonParser to be in memory to work.
* As a result, you must not create JsonArray and JsonHashTable that have a
* longer life that the JsonParser.
*/
template <int MAX_TOKENS>
class JsonParser
{
public:
/* /*
* Parse the JSON string and return a array. * Parse the JSON string and return a array.
@ -48,7 +52,7 @@ public:
return JsonHashTable(json, parse(json)); return JsonHashTable(json, parse(json));
} }
private: private:
jsmntok_t* parse(char* json) jsmntok_t* parse(char* json)
{ {
@ -62,4 +66,6 @@ private:
} }
jsmntok_t tokens[MAX_TOKENS]; jsmntok_t tokens[MAX_TOKENS];
}; };
}
}

View File

@ -7,6 +7,7 @@
#include "JsonParser.h" #include "JsonParser.h"
using namespace Microsoft::VisualStudio::CppUnitTestFramework; using namespace Microsoft::VisualStudio::CppUnitTestFramework;
using namespace ArduinoJson::Parser;
namespace ArduinoJsonParserTests namespace ArduinoJsonParserTests
{ {

View File

@ -7,6 +7,7 @@
#include "JsonParser.h" #include "JsonParser.h"
using namespace Microsoft::VisualStudio::CppUnitTestFramework; using namespace Microsoft::VisualStudio::CppUnitTestFramework;
using namespace ArduinoJson::Parser;
namespace ArduinoJsonParserTests namespace ArduinoJsonParserTests
{ {

View File

@ -9,6 +9,7 @@
using namespace std; using namespace std;
using namespace Microsoft::VisualStudio::CppUnitTestFramework; using namespace Microsoft::VisualStudio::CppUnitTestFramework;
using namespace ArduinoJson::Parser;
namespace ArduinoJsonParserTests namespace ArduinoJsonParserTests
{ {

View File

@ -9,6 +9,7 @@
using namespace std; using namespace std;
using namespace Microsoft::VisualStudio::CppUnitTestFramework; using namespace Microsoft::VisualStudio::CppUnitTestFramework;
using namespace ArduinoJson::Parser;
namespace ArduinoJsonParserTests namespace ArduinoJsonParserTests
{ {

View File

@ -5,6 +5,8 @@
#include <JsonParser.h> #include <JsonParser.h>
using namespace ArduinoJson::Parser;
void ParseAnObject() void ParseAnObject()
{ {
char json[] = "{\"Name\":\"Blanchon\",\"Skills\":[\"C\",\"C++\",\"C#\"],\"Age\":32,\"Online\":true}"; char json[] = "{\"Name\":\"Blanchon\",\"Skills\":[\"C\",\"C++\",\"C#\"],\"Age\":32,\"Online\":true}";