1 // Copyright (C) 2006-2014 CEA/DEN, EDF R&D
3 // This library is free software; you can redistribute it and/or
4 // modify it under the terms of the GNU Lesser General Public
5 // License as published by the Free Software Foundation; either
6 // version 2.1 of the License, or (at your option) any later version.
8 // This library is distributed in the hope that it will be useful,
9 // but WITHOUT ANY WARRANTY; without even the implied warranty of
10 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11 // Lesser General Public License for more details.
13 // You should have received a copy of the GNU Lesser General Public
14 // License along with this library; if not, write to the Free Software
15 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
20 #include "AnyInputPort.hxx"
21 #include "TypeCode.hxx"
27 #include "YacsTrace.hxx"
29 using namespace YACS::ENGINE;
32 AnyInputPort::AnyInputPort(const std::string& name, Node *node, TypeCode* type, bool canBeNull)
33 : InputPort(name, node, type, canBeNull),
34 DataPort(name, node, type),
40 AnyInputPort::AnyInputPort(const AnyInputPort& other, Node *newHelder)
41 : InputPort(other, newHelder),
42 DataPort(other, newHelder),
43 Port(other, newHelder),
47 _value=other._value->clone();
50 AnyInputPort::~AnyInputPort()
54 DEBTRACE("_value ref count: " << _value->getRefCnt());
59 //! Save the current data value for further reinitialization of the port
63 void AnyInputPort::exSaveInit()
65 if(_initValue) _initValue->decrRef();
67 _initValue->incrRef();
70 //! Restore the saved data value to current data value
72 * If no data has been saved (_initValue == 0) don't restore
74 void AnyInputPort::exRestoreInit()
84 void AnyInputPort::put(Any *data)
86 YACS::BASES::Lock lock(&_mutex);
92 DEBTRACE("value ref count: " << _value->getRefCnt());
96 bool AnyInputPort::isEmpty()
101 void *AnyInputPort::get() const
103 return (void *)_value;
106 std::string AnyInputPort::getAsString()
108 YACS::BASES::Lock lock(&_mutex);
109 return getRuntime()->convertNeutralAsString(edGetType(),_value);
112 void AnyInputPort::put(const void *data) throw(ConversionException)
117 InputPort *AnyInputPort::clone(Node *newHelder) const
119 return new AnyInputPort(*this,newHelder);
122 std::string AnyInputPort::dump()
126 std::string what="AnyInputPort::get : no value currently in input port with name \""; what+=_name; what+="\"";
127 throw Exception(what);
129 stringstream xmldump;
130 switch (_value->getType()->kind())
133 xmldump << "<value><double>" << _value->getDoubleValue() << "</double></value>" << endl;
136 xmldump << "<value><int>" << _value->getIntValue() << "</int></value>" << endl;
139 xmldump << "<value><boolean>" << _value->getBoolValue() << "</boolean></value>" << endl;
142 xmldump << "<value><string>" << _value->getStringValue() << "</string></value>" << endl;
145 xmldump << "<value><error> NO_SERIALISATION_AVAILABLE </error></value>" << endl;
148 return xmldump.str();