Rearranged a bit. Use the new macro in valuenode.h introduced in the previous commit...
authordooglus <dooglus@1f10aa63-cdf2-0310-b900-c93c546f37ac>
Wed, 9 Jan 2008 13:09:29 +0000 (13:09 +0000)
committerdooglus <dooglus@1f10aa63-cdf2-0310-b900-c93c546f37ac>
Wed, 9 Jan 2008 13:09:29 +0000 (13:09 +0000)
git-svn-id: http://svn.voria.com/code@1299 1f10aa63-cdf2-0310-b900-c93c546f37ac

synfig-core/trunk/src/synfig/valuenode_add.cpp
synfig-core/trunk/src/synfig/valuenode_add.h

index bf9f949..e11fc21 100644 (file)
@@ -59,7 +59,7 @@ using namespace synfig;
 synfig::ValueNode_Add::ValueNode_Add(const ValueBase &value):
        LinkableValueNode(value.get_type())
 {
-       set_scalar(1.0);
+       set_link("scalar",ValueNode_Const::create(Real(1.0)));
        ValueBase::Type id(value.get_type());
 
        switch(id)
@@ -92,12 +92,6 @@ synfig::ValueNode_Add::ValueNode_Add(const ValueBase &value):
                assert(0);
                throw runtime_error("synfig::ValueNode_Add:Bad type "+ValueBase::type_name(id));
        }
-
-       assert(get_lhs()->get_type()==id);
-       assert(get_rhs()->get_type()==id);
-       assert(get_type()==id);
-
-       DCAST_HACK_ENABLE();
 }
 
 LinkableValueNode*
@@ -117,51 +111,6 @@ synfig::ValueNode_Add::~ValueNode_Add()
        unlink_all();
 }
 
-void
-ValueNode_Add::set_scalar(Real value)
-{
-       set_link("scalar",ValueNode_Const::create(value));
-}
-
-bool
-synfig::ValueNode_Add::set_scalar(ValueNode::Handle value)
-{
-       if(value->get_type()!=ValueBase::TYPE_REAL&& !PlaceholderValueNode::Handle::cast_dynamic(value))
-               return false;
-       scalar=value;
-       return true;
-}
-
-bool
-synfig::ValueNode_Add::set_lhs(ValueNode::Handle x)
-{
-       assert(get_type());
-
-       if(!x ||
-          (get_type()==ValueBase::TYPE_NIL && !check_type(x->get_type())) ||
-          (get_type()!=ValueBase::TYPE_NIL && x->get_type()!=get_type() && !PlaceholderValueNode::Handle::cast_dynamic(x)))
-               return false;
-
-       ref_a=x;
-
-       return true;
-}
-
-bool
-synfig::ValueNode_Add::set_rhs(ValueNode::Handle x)
-{
-       assert(get_type());
-
-       if(!x ||
-          (get_type()==ValueBase::TYPE_NIL && !check_type(x->get_type())) ||
-          (get_type()!=ValueBase::TYPE_NIL && x->get_type()!=get_type() && !PlaceholderValueNode::Handle::cast_dynamic(x)))
-               return false;
-
-       ref_b=x;
-
-       return true;
-}
-
 synfig::ValueBase
 synfig::ValueNode_Add::operator()(Time t)const
 {
@@ -191,28 +140,20 @@ synfig::ValueNode_Add::operator()(Time t)const
 bool
 ValueNode_Add::set_link_vfunc(int i,ValueNode::Handle value)
 {
-       assert(i>=0 && i<3);
+       assert(i>=0 && i<link_count());
        switch(i)
        {
-               case 0:
-                       if(set_lhs(value)) { signal_child_changed()(i);signal_value_changed()(); return true; }
-                       return false;
-               case 1:
-                       if(set_rhs(value)) { signal_child_changed()(i);signal_value_changed()(); return true; }
-                       return false;
-               case 2:
-                       scalar=value;
-                       signal_child_changed()(i);signal_value_changed()();
-                       return true;
+       case 0: CHECK_TYPE_AND_SET_VALUE(ref_a,  get_type());
+       case 1: CHECK_TYPE_AND_SET_VALUE(ref_b,  get_type());
+       case 2: CHECK_TYPE_AND_SET_VALUE(scalar, ValueBase::TYPE_REAL);
        }
-
        return false;
 }
 
 ValueNode::LooseHandle
 ValueNode_Add::get_link_vfunc(int i)const
 {
-       assert(i>=0 && i<3);
+       assert(i>=0 && i<link_count());
        switch(i)
        {
                case 0: return ref_a;
@@ -231,7 +172,7 @@ ValueNode_Add::link_count()const
 String
 ValueNode_Add::link_local_name(int i)const
 {
-       assert(i>=0 && i<3);
+       assert(i>=0 && i<link_count());
        switch(i)
        {
                case 0: return _("LHS");
@@ -244,7 +185,7 @@ ValueNode_Add::link_local_name(int i)const
 String
 ValueNode_Add::link_name(int i)const
 {
-       assert(i>=0 && i<3);
+       assert(i>=0 && i<link_count());
        switch(i)
        {
                case 0: return "lhs";
index e8b0bb2..c757234 100644 (file)
@@ -41,65 +41,27 @@ struct ValueNode_Add : public LinkableValueNode
        typedef etl::handle<const ValueNode_Add> ConstHandle;
 
 protected:
-
        ValueNode_Add(const ValueBase &value);
 
 private:
-
        ValueNode::RHandle ref_a;
        ValueNode::RHandle ref_b;
        ValueNode::RHandle scalar;
 
 public:
-
+       LinkableValueNode* create_new()const;
+       static ValueNode_Add* create(const ValueBase &value=ValueBase());
        virtual ~ValueNode_Add();
-
-//     static Handle create(ValueBase::Type id=ValueBase::TYPE_NIL);
-
-       //! Sets the left-hand-side value_node
-       bool set_lhs(ValueNode::Handle a);
-
-       //! Gets the left-hand-side value_node
-       ValueNode::Handle get_lhs()const { return ref_a; }
-
-       //! Sets the right-hand-side value_node
-       bool set_rhs(ValueNode::Handle b);
-
-       //! Gets the right-hand-side value_node
-       ValueNode::Handle get_rhs()const { return ref_b; }
-
-       //! Sets the scalar value_node
-       bool set_scalar(ValueNode::Handle x);
-
-       //! Gets the scalar value_node
-       ValueNode::Handle get_scalar()const { return scalar; }
-
-       void set_scalar(Real x);
-
+       virtual ValueBase operator()(Time t)const;
        virtual bool set_link_vfunc(int i,ValueNode::Handle x);
-
        virtual ValueNode::LooseHandle get_link_vfunc(int i)const;
-
        virtual int link_count()const;
-
        virtual String link_local_name(int i)const;
        virtual String link_name(int i)const;
        virtual int get_link_index_from_name(const String &name)const;
-
-       virtual ValueBase operator()(Time t)const;
-
        virtual String get_name()const;
        virtual String get_local_name()const;
-
-//     static bool check_type(const ValueBase::Type &type);
-
-       LinkableValueNode* create_new()const;
-
-public:
-       using synfig::LinkableValueNode::get_link_vfunc;
-       using synfig::LinkableValueNode::set_link_vfunc;
        static bool check_type(ValueBase::Type type);
-       static ValueNode_Add* create(const ValueBase &value=ValueBase());
 }; // END of class ValueNode_Add
 
 }; // END of namespace synfig