1 // Copyright (C) 2006-2015 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"
23 #include "AutoLocker.hxx"
26 #include "YacsTrace.hxx"
32 using namespace YACS::ENGINE;
35 AnyInputPort::AnyInputPort(const std::string& name, Node *node, TypeCode* type, bool canBeNull)
36 : InputPort(name, node, type, canBeNull),
37 DataPort(name, node, type),
43 AnyInputPort::AnyInputPort(const AnyInputPort& other, Node *newHelder)
44 : InputPort(other, newHelder),
45 DataPort(other, newHelder),
46 Port(other, newHelder),
50 _value=other._value->clone();
53 AnyInputPort::~AnyInputPort()
57 DEBTRACE("_value ref count: " << _value->getRefCnt());
62 //! Save the current data value for further reinitialization of the port
66 void AnyInputPort::exSaveInit()
68 if(_initValue) _initValue->decrRef();
70 _initValue->incrRef();
73 //! Restore the saved data value to current data value
75 * If no data has been saved (_initValue == 0) don't restore
77 void AnyInputPort::exRestoreInit()
87 void AnyInputPort::put(Any *data)
89 YACS::BASES::AutoLocker<YACS::BASES::Mutex> lock(&_mutex);
95 DEBTRACE("value ref count: " << _value->getRefCnt());
99 bool AnyInputPort::isEmpty()
104 void *AnyInputPort::get() const
106 return (void *)_value;
109 std::string AnyInputPort::getAsString()
111 YACS::BASES::AutoLocker<YACS::BASES::Mutex> lock(&_mutex);
112 return getRuntime()->convertNeutralAsString(edGetType(),_value);
115 void AnyInputPort::put(const void *data) throw(ConversionException)
120 InputPort *AnyInputPort::clone(Node *newHelder) const
122 return new AnyInputPort(*this,newHelder);
125 std::string AnyInputPort::dump()
129 std::string what="AnyInputPort::get : no value currently in input port with name \""; what+=_name; what+="\"";
130 throw Exception(what);
132 stringstream xmldump;
133 switch (_value->getType()->kind())
136 xmldump << "<value><double>" << setprecision(16) << _value->getDoubleValue() << "</double></value>" << endl;
139 xmldump << "<value><int>" << _value->getIntValue() << "</int></value>" << endl;
142 xmldump << "<value><boolean>" << _value->getBoolValue() << "</boolean></value>" << endl;
145 xmldump << "<value><string>" << _value->getStringValue() << "</string></value>" << endl;
148 xmldump << "<value><error> NO_SERIALISATION_AVAILABLE </error></value>" << endl;
151 return xmldump.str();