1
#include "MathMLSolverStableHeaders.h"
2
#include "MathMLASTFragmentExpression.h"
9
//---------------------------------------------------------------------------------
10
FragmentExpression::FragmentExpression( const String& name, CloneFlags cloneFlags )
14
, mCloneFlags( cloneFlags )
17
//---------------------------------------------------------------------------------
18
FragmentExpression::~FragmentExpression()
20
if ( mCloneFlags & CLONEFLAG_DEEPCOPY_FRAGMENT )
25
// Parameters have to be deleted here
26
if ( mCloneFlags & CLONEFLAG_DEEPCOPY_FRAGMENT_PARAMS )
28
for (size_t i=0, count = mParameterList.size(); i<count; ++i)
30
delete mParameterList.at( i );
35
//---------------------------------------------------------------------------------
36
void FragmentExpression::accept( IVisitor* visitor ) const
38
visitor->visit( this );
41
//---------------------------------------------------------------------------------
42
const String& FragmentExpression::getName() const
47
//---------------------------------------------------------------------------------
48
unsigned int FragmentExpression::getArgc() const
53
//---------------------------------------------------------------------------------
54
void FragmentExpression::setArgc( unsigned int argc )
59
//---------------------------------------------------------------------------------
60
INode* FragmentExpression::getFragment() const
65
//---------------------------------------------------------------------------------
66
void FragmentExpression::setFragment( INode* fragment )
71
//---------------------------------------------------------------------------------
72
const FragmentExpression::ParameterList& FragmentExpression::getParameterList() const
74
return mParameterList;
77
//---------------------------------------------------------------------------------
78
/*void FragmentExpression::setParameterList( const ParameterList& parameterList )
80
mParameterMap = parameterList;
83
//---------------------------------------------------------------------------------
84
void FragmentExpression::addParameter( const String& parameterName, INode* parameter )
86
mParameterMap[parameterName] = parameter;
87
mParameterList.push_back(parameter);
88
if (mParameterSymbolSet.find(parameterName) == mParameterSymbolSet.end())
89
mParameterSymbolList.push_back(parameterName);
91
//-----------------------------------------------------------------------
92
const FragmentExpression::ParameterMap& FragmentExpression::getParameterMap() const
96
//-----------------------------------------------------------------------
97
void FragmentExpression::addParameterSymbol( const String& parameterSymbol )
99
if (mParameterSymbolSet.find(parameterSymbol) == mParameterSymbolSet.end())
100
mParameterSymbolList.push_back(parameterSymbol);
102
//-----------------------------------------------------------------------
103
const FragmentExpression::ParameterSymbolList& FragmentExpression::getParameterSymbolList() const
105
return mParameterSymbolList;
108
//-----------------------------------------------------------------
109
INode* FragmentExpression::clone(CloneFlags cloneFlags) const
111
FragmentExpression* copy = new FragmentExpression( mName, cloneFlags );
115
copy->mFragment = cloneFlags & CLONEFLAG_DEEPCOPY_FRAGMENT ? mFragment->clone(cloneFlags) : mFragment;
122
if ( cloneFlags & CLONEFLAG_DEEPCOPY_FRAGMENT_PARAMS )
124
// A deep copy of the parameter nodes is required
125
copy->mParameterList.reserve(mParameterList.size());
126
ParameterMap::const_iterator it = mParameterMap.begin();
127
for ( ; it != mParameterMap.end(); ++it )
129
const String& parameterName = it->first;
130
const INode* parameterNode = it->second;
131
INode* clonedParameterNode = parameterNode->clone(cloneFlags);
132
copy->mParameterMap.insert(std::make_pair(parameterName, clonedParameterNode));
133
copy->mParameterList.push_back(clonedParameterNode);
138
copy->mParameterMap = mParameterMap;
139
copy->mParameterList = mParameterList;
141
copy->mParameterSymbolList = mParameterSymbolList;
142
copy->mParameterSymbolSet = mParameterSymbolSet;