- VS2012: build/tests

- JSON: style and exceptions catch by ref fix
- NumberParser: case-insensitive hex parsing
- Dynamic::Var: const std::string& cast operator specialization (coaxing std::string ctor)
- LocalDateTime: strftime fix (buffer too small for full tz string, use %Z instead of %z - makes no difference on windows but is more portable)
- small buildwin.cmd vsvars32.bat call fix
This commit is contained in:
Aleksandar Fabijanic
2012-09-24 03:51:40 +00:00
parent a6cc973fe3
commit d8397b9153
30 changed files with 3715 additions and 3739 deletions

View File

@@ -37,45 +37,52 @@
#include "Poco/JSON/Object.h"
#include "Poco/JSON/Stringifier.h"
namespace Poco
{
namespace JSON
{
using Poco::Dynamic::Var;
namespace Poco {
namespace JSON {
Array::Array()
{
}
Array::Array(const Array& copy) : _values(copy._values)
{
}
Array::~Array()
{
}
DynamicAny Array::get(unsigned int index) const
Var Array::get(unsigned int index) const
{
DynamicAny value;
Var value;
try
{
value = _values.at(index);
}
catch(std::out_of_range)
catch(std::out_of_range&)
{
//Ignore, we return an empty value
}
return value;
}
Array::Ptr Array::getArray(unsigned int index) const
{
Array::Ptr result;
DynamicAny value = get(index);
Var value = get(index);
if ( value.type() == typeid(Array::Ptr) )
{
result = value.extract<Array::Ptr>();
@@ -88,7 +95,7 @@ Object::Ptr Array::getObject(unsigned int index) const
{
Object::Ptr result;
DynamicAny value = get(index);
Var value = get(index);
if ( value.type() == typeid(Object::Ptr) )
{
result = value.extract<Object::Ptr>();
@@ -96,9 +103,10 @@ Object::Ptr Array::getObject(unsigned int index) const
return result;
}
bool Array::isObject(unsigned int index) const
{
DynamicAny value = get(index);
Var value = get(index);
return value.type() == typeid(Object::Ptr);
}
@@ -144,4 +152,5 @@ void Array::stringify(std::ostream& out, unsigned int indent) const
out << "]";
}
}} // Namespace Poco::JSON

View File

@@ -36,15 +36,19 @@
#include "Poco/JSON/DefaultHandler.h"
#include "Poco/JSON/Object.h"
namespace Poco
{
namespace JSON
{
using Poco::Dynamic::Var;
namespace Poco {
namespace JSON {
DefaultHandler::DefaultHandler() : Handler()
{
}
DefaultHandler::~DefaultHandler()
{
}
@@ -60,7 +64,7 @@ void DefaultHandler::startObject()
}
else
{
DynamicAny parent = _stack.top();
Var parent = _stack.top();
if ( parent.type() == typeid(Array::Ptr) )
{
@@ -96,7 +100,7 @@ void DefaultHandler::startArray()
}
else
{
DynamicAny parent = _stack.top();
Var parent = _stack.top();
if ( parent.type() == typeid(Array::Ptr) )
{
@@ -128,9 +132,9 @@ void DefaultHandler::key(const std::string& k)
}
void DefaultHandler::setValue(const Poco::DynamicAny& value)
void DefaultHandler::setValue(const Var& value)
{
DynamicAny parent = _stack.top();
Var parent = _stack.top();
if ( parent.type() == typeid(Array::Ptr) )
{

View File

@@ -40,10 +40,12 @@
#include <iostream>
#include <sstream>
namespace Poco
{
namespace JSON
{
using Poco::Dynamic::Var;
namespace Poco {
namespace JSON {
Object::Object()
@@ -51,19 +53,21 @@ Object::Object()
}
Object::Object(const Object& copy) : _values(copy._values)
{
}
Object::~Object()
{
}
DynamicAny Object::get(const std::string& key) const
Var Object::get(const std::string& key) const
{
DynamicAny value;
Var value;
ValueMap::const_iterator it = _values.find(key);
if ( it != _values.end() )
@@ -78,7 +82,7 @@ Array::Ptr Object::getArray(const std::string& key) const
{
Array::Ptr result;
DynamicAny value = get(key);
Var value = get(key);
if ( value.type() == typeid(Array::Ptr) )
{
result = value.extract<Array::Ptr>();
@@ -91,7 +95,7 @@ Object::Ptr Object::getObject(const std::string& key) const
{
Object::Ptr result;
DynamicAny value = get(key);
Var value = get(key);
if ( value.type() == typeid(Object::Ptr) )
{
result = value.extract<Object::Ptr>();

File diff suppressed because it is too large Load Diff

View File

@@ -41,24 +41,29 @@
#include "Poco/JSON/Query.h"
namespace Poco
{
namespace JSON
{
Query::Query(const DynamicAny& source) : _source(source)
using Poco::Dynamic::Var;
namespace Poco {
namespace JSON {
Query::Query(const Var& source) : _source(source)
{
}
Query::~Query()
{
}
Object::Ptr Query::findObject(const std::string& path) const
{
Object::Ptr obj;
DynamicAny result = find(path);
Var result = find(path);
if ( result.type() == typeid(Object::Ptr) )
{
obj = result.extract<Object::Ptr>();
@@ -66,10 +71,11 @@ Object::Ptr Query::findObject(const std::string& path) const
return obj;
}
Array::Ptr Query::findArray(const std::string& path) const
{
Array::Ptr arr;
DynamicAny result = find(path);
Var result = find(path);
if ( result.type() == typeid(Array::Ptr) )
{
arr = result.extract<Array::Ptr>();
@@ -78,9 +84,9 @@ Array::Ptr Query::findArray(const std::string& path) const
}
DynamicAny Query::find(const std::string& path) const
Var Query::find(const std::string& path) const
{
DynamicAny result = _source;
Var result = _source;
StringTokenizer tokenizer(path, ".");
for(StringTokenizer::Iterator token = tokenizer.begin(); token != tokenizer.end(); token++)
{
@@ -138,4 +144,5 @@ DynamicAny Query::find(const std::string& path) const
return result;
}
}} // Namespace Poco::JSON

View File

@@ -39,12 +39,15 @@
#include "Poco/JSON/Array.h"
#include "Poco/JSON/Object.h"
namespace Poco
{
namespace JSON
{
void Stringifier::stringify(const DynamicAny& any, std::ostream& out, unsigned int indent)
using Poco::Dynamic::Var;
namespace Poco {
namespace JSON {
void Stringifier::stringify(const Var& any, std::ostream& out, unsigned int indent)
{
if ( any.type() == typeid(Object::Ptr) )
{
@@ -111,4 +114,5 @@ void Stringifier::stringify(const DynamicAny& any, std::ostream& out, unsigned i
}
}
}} // Namespace Poco::JSON

View File

@@ -38,13 +38,17 @@
#include "Poco/JSON/TemplateCache.h"
#include "Poco/JSON/Query.h"
namespace Poco
{
namespace JSON
{
using Poco::Dynamic::Var;
namespace Poco {
namespace JSON {
POCO_IMPLEMENT_EXCEPTION(JSONTemplateException, Exception, "Template Exception")
class Part
{
public:
@@ -58,11 +62,12 @@ public:
{
}
virtual void render(const DynamicAny& data, std::ostream& out) const = 0;
virtual void render(const Var& data, std::ostream& out) const = 0;
typedef std::vector<SharedPtr<Part> > VectorParts;
};
class StringPart : public Part
{
public:
@@ -81,7 +86,7 @@ public:
}
void render(const DynamicAny& data, std::ostream& out) const
void render(const Var& data, std::ostream& out) const
{
out << _content;
}
@@ -103,6 +108,7 @@ private:
std::string _content;
};
class MultiPart : public Part
{
public:
@@ -125,7 +131,7 @@ public:
}
void render(const DynamicAny& data, std::ostream& out) const
void render(const Var& data, std::ostream& out) const
{
for(VectorParts::const_iterator it = _parts.begin(); it != _parts.end(); ++it)
{
@@ -138,6 +144,7 @@ protected:
VectorParts _parts;
};
class EchoPart : public Part
{
public:
@@ -151,10 +158,10 @@ public:
}
void render(const DynamicAny& data, std::ostream& out) const
void render(const Var& data, std::ostream& out) const
{
Query query(data);
DynamicAny value = query.find(_query);
Var value = query.find(_query);
if ( ! value.isEmpty() )
{
@@ -167,6 +174,7 @@ private:
std::string _query;
};
class LogicQuery
{
public:
@@ -178,18 +186,18 @@ public:
{
}
virtual bool apply(const DynamicAny& data) const
virtual bool apply(const Var& data) const
{
bool logic = false;
Query query(data);
DynamicAny value = query.find(_queryString);
Var value = query.find(_queryString);
if ( ! value.isEmpty() ) // When empty, logic will be false
{
if ( value.isString() )
// An empty string must result in false, otherwise true
// Which is not the case when we convert to bool with DynamicAny
// Which is not the case when we convert to bool with Var
{
std::string s = value.convert<std::string>();
logic = ! s.empty();
@@ -198,7 +206,7 @@ public:
{
// All other values, try to convert to bool
// An empty object or array will turn into false
// all other values depend on the convert<> in DynamicAny
// all other values depend on the convert<> in Var
logic = value.convert<bool>();
}
}
@@ -210,6 +218,7 @@ protected:
std::string _queryString;
};
class LogicExistQuery : public LogicQuery
{
public:
@@ -221,10 +230,10 @@ public:
{
}
virtual bool apply(const DynamicAny& data) const
virtual bool apply(const Var& data) const
{
Query query(data);
DynamicAny value = query.find(_queryString);
Var value = query.find(_queryString);
return !value.isEmpty();
}
@@ -242,7 +251,7 @@ public:
{
}
virtual bool apply(const DynamicAny& data) const
virtual bool apply(const Var& data) const
{
return true;
}
@@ -273,7 +282,7 @@ public:
_queries.push_back(new LogicElseQuery());
}
void render(const DynamicAny& data, std::ostream& out) const
void render(const Var& data, std::ostream& out) const
{
int count = 0;
for(std::vector<SharedPtr<LogicQuery> >::const_iterator it = _queries.begin(); it != _queries.end(); ++it, ++count)
@@ -291,6 +300,7 @@ private:
std::vector<SharedPtr<LogicQuery> > _queries;
};
class LoopPart : public MultiPart
{
public:
@@ -304,7 +314,7 @@ public:
}
void render(const DynamicAny& data, std::ostream& out) const
void render(const Var& data, std::ostream& out) const
{
Query query(data);
@@ -316,7 +326,7 @@ public:
{
for(int i = 0; i < array->size(); i++)
{
DynamicAny value = array->get(i);
Var value = array->get(i);
dataObject->set(_name, value);
MultiPart::render(data, out);
}
@@ -361,7 +371,7 @@ public:
}
void render(const DynamicAny& data, std::ostream& out) const
void render(const Var& data, std::ostream& out) const
{
TemplateCache* cache = TemplateCache::instance();
if ( cache == NULL )
@@ -383,12 +393,14 @@ private:
};
Template::Template(const Path& templatePath)
: _parts(NULL)
, _templatePath(templatePath)
{
}
Template::Template()
: _parts(NULL)
{
@@ -713,6 +725,7 @@ void Template::readWhiteSpace(std::istream& in)
}
}
std::string Template::readString(std::istream& in)
{
std::string str;
@@ -728,9 +741,11 @@ std::string Template::readString(std::istream& in)
return str;
}
void Template::render(const DynamicAny& data, std::ostream& out) const
void Template::render(const Var& data, std::ostream& out) const
{
_parts->render(data, out);
}
}} // Namespace Poco::JSON

View File

@@ -94,7 +94,7 @@ Template::Ptr TemplateCache::getTemplate(const Path& path)
tpl->parse();
_cache[templatePathname] = tpl;
}
catch(JSONTemplateException jte)
catch(JSONTemplateException& jte)
{
if ( _logger )
{
@@ -128,7 +128,7 @@ Template::Ptr TemplateCache::getTemplate(const Path& path)
tpl->parse();
_cache[templatePathname] = tpl;
}
catch(JSONTemplateException jte)
catch(JSONTemplateException& jte)
{
if ( _logger )
{