Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
More vivification infrastructure stuff.
  • Loading branch information
Rob Meijer committed Feb 25, 2012
1 parent ddce162 commit 8f5b0c4
Show file tree
Hide file tree
Showing 4 changed files with 12 additions and 5 deletions.
2 changes: 1 addition & 1 deletion Node.cpp
Expand Up @@ -30,7 +30,7 @@ namespace jsonme {
Node operator[](std::string const & name) const { return Node(0,this);}
size_t size() const { return 0;}
Node operator[](size_t index) const { return Node(0,this);}
operator Scalar() const { return Scalar(); }
operator Scalar() const { return Scalar(this); }
};
Node::Node(AbstractNode *node):mNode(node){}
Node::Node(AbstractNode *node,AbstractNode const *parent):mNode(new NullNode(parent)){}
Expand Down
7 changes: 6 additions & 1 deletion Scalar.cpp
Expand Up @@ -20,7 +20,11 @@
namespace jsonme {
//This implements the NullObject design pattern for the AbstractScalar interface.
class NullScalar: public AbstractScalar {
AbstractNode const *mParent;
NullScalar(NullScalar const &c);
jsonme::NullScalar& operator=(const jsonme::NullScalar&);
public:
NullScalar(AbstractNode const *parent):mParent(parent){}
jsonme::scalartype scalartype() const { return NULLVAL;}
operator long double() const { return 0;}
operator long long() const { return 0;}
Expand All @@ -33,7 +37,8 @@ namespace jsonme {
NullScalar & operator=(bool) { return *this;}
};
//The default constructor wraps a NullScalar.
Scalar::Scalar():mScalar(new NullScalar()){}
//Scalar::Scalar():mScalar(new NullScalar()){}
Scalar::Scalar(AbstractNode const *parent):mScalar(new NullScalar(parent)){}
//Alternative constructor wraps a dynamically allocated implementation of the AbstractScalar interface.
Scalar::Scalar(AbstractScalar *scalar):mScalar(scalar){}
//Simple method forwarding.
Expand Down
4 changes: 2 additions & 2 deletions gobj/GobjectImplNode.cpp
Expand Up @@ -109,12 +109,12 @@ namespace jsonme {
GobjectImplNode::operator Scalar() const {
//Only scalar type node's can be cast to a scalar. Other node's return a wrapped NullScalar.
if (!mNode) {
return Scalar();
return Scalar(this);
}
if (this->nodetype() == jsonme::SCALAR) {
return Scalar(new GobjectImplScalar(mNode));
} else {
return Scalar();
return Scalar(this);
}
}
}
Expand Down
4 changes: 3 additions & 1 deletion json-me.hpp
Expand Up @@ -52,13 +52,15 @@ namespace jsonme {
virtual AbstractScalar & operator=(std::string in)=0;
virtual AbstractScalar & operator=(bool in)=0;
};
class AbstractNode;
//A value semantics proxy to the implementation specific scalar.
class Scalar: public AbstractScalar {
boost::shared_ptr<AbstractScalar> mScalar;
public:
Scalar();
//Scalar();
~Scalar() throw() {}
Scalar(AbstractScalar *scalar);
Scalar(AbstractNode const *parent);
jsonme::scalartype scalartype() const;
operator long double() const;
operator long long() const;
Expand Down

0 comments on commit 8f5b0c4

Please sign in to comment.