- fixes from Harro
This commit is contained in:
parent
23ada516aa
commit
61461ec456
3 changed files with 96 additions and 13 deletions
37
src/JSON.cc
37
src/JSON.cc
|
@ -643,6 +643,7 @@ std::string JSON::parser::parseString() {
|
||||||
const size_t length = p - _buffer - _pos;
|
const size_t length = p - _buffer - _pos;
|
||||||
char* tmp = new char[length + 1];
|
char* tmp = new char[length + 1];
|
||||||
std::strncpy(tmp, _buffer + _pos, length);
|
std::strncpy(tmp, _buffer + _pos, length);
|
||||||
|
tmp[length] = 0;
|
||||||
std::string result(tmp);
|
std::string result(tmp);
|
||||||
delete [] tmp;
|
delete [] tmp;
|
||||||
|
|
||||||
|
@ -838,11 +839,11 @@ JSON::iterator::iterator(JSON* j) : _object(j), _vi(nullptr), _oi(nullptr) {
|
||||||
JSON::iterator::iterator(const JSON::iterator& o) : _object(o._object), _vi(nullptr), _oi(nullptr) {
|
JSON::iterator::iterator(const JSON::iterator& o) : _object(o._object), _vi(nullptr), _oi(nullptr) {
|
||||||
switch (_object->_type) {
|
switch (_object->_type) {
|
||||||
case (array): {
|
case (array): {
|
||||||
_vi = new std::vector<JSON>::iterator(static_cast<std::vector<JSON>*>(_object->_payload)->begin());
|
_vi = new std::vector<JSON>::iterator(*(o._vi));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case (object): {
|
case (object): {
|
||||||
_oi = new std::map<std::string, JSON>::iterator(static_cast<std::map<std::string, JSON>*>(_object->_payload)->begin());
|
_oi = new std::map<std::string, JSON>::iterator(*(o._oi));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
|
@ -857,6 +858,18 @@ JSON::iterator::~iterator() {
|
||||||
|
|
||||||
JSON::iterator& JSON::iterator::operator=(const JSON::iterator& o) {
|
JSON::iterator& JSON::iterator::operator=(const JSON::iterator& o) {
|
||||||
_object = o._object;
|
_object = o._object;
|
||||||
|
switch (_object->_type) {
|
||||||
|
case (array): {
|
||||||
|
_vi = new std::vector<JSON>::iterator(*(o._vi));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case (object): {
|
||||||
|
_oi = new std::map<std::string, JSON>::iterator(*(o._oi));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -985,11 +998,11 @@ JSON::const_iterator::const_iterator(const JSON* j) : _object(j), _vi(nullptr),
|
||||||
JSON::const_iterator::const_iterator(const JSON::const_iterator& o) : _object(o._object), _vi(nullptr), _oi(nullptr) {
|
JSON::const_iterator::const_iterator(const JSON::const_iterator& o) : _object(o._object), _vi(nullptr), _oi(nullptr) {
|
||||||
switch (_object->_type) {
|
switch (_object->_type) {
|
||||||
case (array): {
|
case (array): {
|
||||||
_vi = new std::vector<JSON>::const_iterator(static_cast<std::vector<JSON>*>(_object->_payload)->begin());
|
_vi = new std::vector<JSON>::const_iterator(*(o._vi));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case (object): {
|
case (object): {
|
||||||
_oi = new std::map<std::string, JSON>::const_iterator(static_cast<std::map<std::string, JSON>*>(_object->_payload)->begin());
|
_oi = new std::map<std::string, JSON>::const_iterator(*(o._oi));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
|
@ -1000,11 +1013,11 @@ JSON::const_iterator::const_iterator(const JSON::const_iterator& o) : _object(o.
|
||||||
JSON::const_iterator::const_iterator(const JSON::iterator& o) : _object(o._object), _vi(nullptr), _oi(nullptr) {
|
JSON::const_iterator::const_iterator(const JSON::iterator& o) : _object(o._object), _vi(nullptr), _oi(nullptr) {
|
||||||
switch (_object->_type) {
|
switch (_object->_type) {
|
||||||
case (array): {
|
case (array): {
|
||||||
_vi = new std::vector<JSON>::const_iterator(static_cast<std::vector<JSON>*>(_object->_payload)->begin());
|
_vi = new std::vector<JSON>::const_iterator(*(o._vi));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case (object): {
|
case (object): {
|
||||||
_oi = new std::map<std::string, JSON>::const_iterator(static_cast<std::map<std::string, JSON>*>(_object->_payload)->begin());
|
_oi = new std::map<std::string, JSON>::const_iterator(*(o._oi));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
|
@ -1019,6 +1032,18 @@ JSON::const_iterator::~const_iterator() {
|
||||||
|
|
||||||
JSON::const_iterator& JSON::const_iterator::operator=(const JSON::const_iterator& o) {
|
JSON::const_iterator& JSON::const_iterator::operator=(const JSON::const_iterator& o) {
|
||||||
_object = o._object;
|
_object = o._object;
|
||||||
|
switch (_object->_type) {
|
||||||
|
case (array): {
|
||||||
|
_vi = new std::vector<JSON>::const_iterator(*(o._vi));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case (object): {
|
||||||
|
_oi = new std::map<std::string, JSON>::const_iterator(*(o._oi));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -6,8 +6,8 @@
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// allow us to use "nullptr" everywhere
|
// allow us to use "nullptr" everywhere
|
||||||
#ifndef nullptr
|
|
||||||
#include <cstddef>
|
#include <cstddef>
|
||||||
|
#ifndef nullptr
|
||||||
#define nullptr NULL
|
#define nullptr NULL
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -202,20 +202,78 @@ void test_array() {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// iterators
|
// iterators
|
||||||
for (JSON::iterator i = a.begin(); i != a.end(); ++i) {
|
{
|
||||||
std::cerr << *i << '\n';
|
size_t count = 0;
|
||||||
|
for (JSON::iterator i = a.begin(); i != a.end(); ++i) {
|
||||||
|
std::cerr << *i << '\n';
|
||||||
|
count++;
|
||||||
|
}
|
||||||
|
assert(count == a.size());
|
||||||
}
|
}
|
||||||
|
|
||||||
for (JSON::const_iterator i = a.cbegin(); i != a.cend(); ++i) {
|
{
|
||||||
std::cerr << *i << '\n';
|
/*
|
||||||
|
size_t count = 0;
|
||||||
|
for (JSON::const_iterator i = a.begin(); i != a.end(); ++i) {
|
||||||
|
std::cerr << *i << '\n';
|
||||||
|
count++;
|
||||||
|
}
|
||||||
|
assert(count == a.size());
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
size_t count = 0;
|
||||||
|
for (JSON::const_iterator i = a.cbegin(); i != a.cend(); ++i) {
|
||||||
|
std::cerr << *i << '\n';
|
||||||
|
count++;
|
||||||
|
}
|
||||||
|
assert(count == a.size());
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef __cplusplus11
|
#ifdef __cplusplus11
|
||||||
for (auto element : a) {
|
{
|
||||||
std::cerr << element << '\n';
|
size_t count = 0;
|
||||||
|
for (auto element : a) {
|
||||||
|
std::cerr << element << '\n';
|
||||||
|
count++;
|
||||||
|
}
|
||||||
|
assert(count == a.size());
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
{
|
||||||
|
JSON::iterator i;
|
||||||
|
size_t count = 0;
|
||||||
|
for (i = a.begin(); i != a.end(); ++i) {
|
||||||
|
std::cerr << *i << '\n';
|
||||||
|
count++;
|
||||||
|
}
|
||||||
|
assert(count == a.size());
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
JSON::const_iterator i;
|
||||||
|
size_t count = 0;
|
||||||
|
for (i = a.begin(); i != a.end(); ++i) {
|
||||||
|
std::cerr << *i << '\n';
|
||||||
|
count++;
|
||||||
|
}
|
||||||
|
assert(count == a.size());
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
JSON::const_iterator i;
|
||||||
|
size_t count = 0;
|
||||||
|
for (i = a.cbegin(); i != a.cend(); ++i) {
|
||||||
|
std::cerr << *i << '\n';
|
||||||
|
count++;
|
||||||
|
}
|
||||||
|
assert(count == a.size());
|
||||||
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
// get payload
|
// get payload
|
||||||
std::vector<JSON>* array = static_cast<std::vector<JSON>*>(a.data());
|
std::vector<JSON>* array = static_cast<std::vector<JSON>*>(a.data());
|
||||||
|
|
Loading…
Reference in a new issue