Skip to content

Commit

Permalink
- destructors of array-classes are now virtual
Browse files Browse the repository at this point in the history
- hpcom cpp-codegeneration is now generating the new array classes


git-svn-id: https://openmodelica.org/svn/OpenModelica/trunk@21860 f25d12d1-65f4-0310-ae8a-bbce733d8d8e
  • Loading branch information
Marcus Walther committed Aug 13, 2014
1 parent 7a66c38 commit e242b04
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 16 deletions.
14 changes: 7 additions & 7 deletions Compiler/Template/CodegenCpp.tpl
Expand Up @@ -761,13 +761,13 @@ case SIMCODE(modelInfo=MODELINFO(__)) then
end functionDimStateSets;


template createAssignArray(DAE.ComponentRef sourceOrTargetArrayCref, String sourceArrayName, String targetArrayName, SimCode simCode, Boolean useFlatArrayNotation)
template createAssignArray(DAE.ComponentRef sourceOrTargetArrayCref, String sourceArrayName, String targetArrayName, SimCode simCode, Boolean useFlatArrayNotationSource, Boolean useFlatArrayNotationTarget)
::=
match SimCodeUtil.cref2simvar(sourceOrTargetArrayCref, simCode)
case v as SIMVAR(numArrayElement=num) then
if useFlatArrayNotation then (
if boolOr(useFlatArrayNotationSource,useFlatArrayNotationTarget) then (
<<
<%HpcOmMemory.getSubscriptListOfArrayCref(sourceOrTargetArrayCref, num) |> ai => '<%targetArrayName%><%subscriptsToCStr(ai,false)%> = <%sourceArrayName%><%subscriptsToCStr(ai,true)%>;';separator="\n"%>
<%HpcOmMemory.getSubscriptListOfArrayCref(sourceOrTargetArrayCref, num) |> ai => '<%targetArrayName%><%subscriptsToCStr(ai,useFlatArrayNotationTarget)%> = <%sourceArrayName%><%subscriptsToCStr(ai,useFlatArrayNotationSource)%>;';separator="\n"%>
>>
)
else (
Expand All @@ -785,7 +785,7 @@ case SIMCODE(modelInfo=MODELINFO(__)) then
let arrayname1 = arraycref(crA, useFlatArrayNotation)
match nStates case 1 then
'case <%i1%>:
<%createAssignArray(crA, arrayname1, "A", simCode, useFlatArrayNotation)%>
<%createAssignArray(crA, arrayname1, "A", simCode, useFlatArrayNotation, false)%>
return true;
'
else ""
Expand All @@ -796,7 +796,7 @@ case SIMCODE(modelInfo=MODELINFO(__)) then
let arrayname1 = arraycref(crA, useFlatArrayNotation)
match nStates case 1 then "" else
'case <%i1%>:
<%createAssignArray(crA, arrayname1, "A", simCode, useFlatArrayNotation)%>
<%createAssignArray(crA, arrayname1, "A", simCode, useFlatArrayNotation, false)%>
return true;
'

Expand All @@ -807,7 +807,7 @@ case SIMCODE(modelInfo=MODELINFO(__)) then
let arrayname1 = arraycref(crA, useFlatArrayNotation)
match nStates case 1 then
'case <%i1%>:
<%createAssignArray(crA, "A", arrayname1, simCode, useFlatArrayNotation)%>
<%createAssignArray(crA, "A", arrayname1, simCode, false, useFlatArrayNotation)%>
break;
'
else ""
Expand All @@ -818,7 +818,7 @@ case SIMCODE(modelInfo=MODELINFO(__)) then
let arrayname1 = arraycref(crA, useFlatArrayNotation)
match nStates case 1 then "" else
'case <%i1%>:
<%createAssignArray(crA, "A", arrayname1, simCode, useFlatArrayNotation)%>
<%createAssignArray(crA, "A", arrayname1, simCode, false, useFlatArrayNotation)%>
break;
'

Expand Down
12 changes: 9 additions & 3 deletions Compiler/Template/CodegenCppHpcom.tpl
Expand Up @@ -451,6 +451,8 @@ match simVar
case v as SIMVAR(name=CREF_QUAL(__),arrayCref=SOME(arrayCrefLocal),numArrayElement=num,type_=varType) then
let &dims = buffer "" /*BUFD*/
let arrayName = arraycref2(name,dims)
let typeString = variableType(type_)
let arraysize = arrayextentDims(name,v.numArrayElement)
match(hpcOmMemoryOpt)
case SOME(hpcOmMemory) then
let varDeclarations = HpcOmMemory.expandCref(arrayCrefLocal,num) |> crefLocal => MemberVariableDefine4(HpcOmMemory.getPositionMappingByArrayName(hpcOmMemory,crefLocal), crefLocal, varType, useFlatArrayNotation, createConstructorDeclaration); separator="\n"
Expand All @@ -460,7 +462,7 @@ match simVar
>>
else
<<
<%if createConstructorDeclaration then '' else 'multi_array<<%variableType(v.type_)%>,<%dims%>> <%arrayName%>; //no cacheMap defined' %>
<%if createConstructorDeclaration then '' else 'StatArrayDim<%dims%><<%variableType(v.type_)%>,<%arraysize%>> <%arrayName%>; //no cacheMap defined' %>
>>
end match
case SIMVAR(numArrayElement=_::_) then
Expand Down Expand Up @@ -492,6 +494,8 @@ match simVar
case v as SIMVAR(name=CREF_IDENT(__),arrayCref=SOME(arrayCrefLocal),numArrayElement=num,type_=varType) then
let &dims = buffer "" /*BUFD*/
let arrayName = arraycref2(name,dims)
let typeString = variableType(type_)
let arraysize = arrayextentDims(name,v.numArrayElement)
match(hpcOmMemoryOpt)
case SOME(hpcOmMemory) then
let varDeclarations = HpcOmMemory.expandCref(arrayCrefLocal,num) |> crefLocal => MemberVariableDefine4(HpcOmMemory.getPositionMappingByArrayName(hpcOmMemory,crefLocal), crefLocal, varType, useFlatArrayNotation, createConstructorDeclaration); separator="\n"
Expand All @@ -501,12 +505,14 @@ match simVar
>>
else
<<
<%if createConstructorDeclaration then '' else 'multi_array<<%variableType(v.type_)%>,<%dims%>> <%arrayName%>; //no cacheMap defined' %>
<%if createConstructorDeclaration then '' else 'StatArrayDim<%dims%><<%typeString%>,<%arraysize%>> <%arrayName%>; //no cacheMap defined' %>
>>
end match
case v as SIMVAR(name=CREF_QUAL(__),arrayCref=SOME(arrayCrefLocal),numArrayElement=num,type_=varType) then
let &dims = buffer "" /*BUFD*/
let arrayName = arraycref2(name,dims)
let typeString = variableType(type_)
let arraysize = arrayextentDims(name,v.numArrayElement)
match(hpcOmMemoryOpt)
case SOME(hpcOmMemory) then
let varDeclarations = HpcOmMemory.expandCref(name,num) |> crefLocal => MemberVariableDefine4(HpcOmMemory.getPositionMappingByArrayName(hpcOmMemory,crefLocal), crefLocal, varType, useFlatArrayNotation, createConstructorDeclaration); separator="\n"
Expand All @@ -516,7 +522,7 @@ match simVar
>>
else
<<
<%if createConstructorDeclaration then '' else 'multi_array<<%variableType(v.type_)%>,<%dims%>> <%arrayName%>; //no cacheMap defined' %>
<%if createConstructorDeclaration then '' else 'StatArrayDim<%dims%><<%typeString%>, <%arraysize%>> <%arrayName%>; //no cacheMap defined' %>
>>
end match
/*special case for varibales that marked as array but are not arrays */
Expand Down
15 changes: 9 additions & 6 deletions SimulationRuntime/cpp/Include/Core/Math/Array.h
Expand Up @@ -7,6 +7,8 @@ template<class T>class BaseArray
public:
BaseArray(){};

virtual ~BaseArray(){}

virtual T& operator()(unsigned int i)
{
throw std::invalid_argument("Wrong virtual Array operator call");
Expand Down Expand Up @@ -72,7 +74,7 @@ template<typename T, std::size_t size>class StatArrayDim1 : public BaseArray<T>
_real_array.assign(0.0);
}

~StatArrayDim1() {}
virtual ~StatArrayDim1() {}

//void assign(StatArrayDim1<T,size> otherArray)
//{
Expand Down Expand Up @@ -167,7 +169,7 @@ template<typename T ,std::size_t size1,std::size_t size2>class StatArrayDim2 : p
return *this;
}

~StatArrayDim2(){}
virtual ~StatArrayDim2(){}

/*
void assign(const StatArrayDim2<T,size1,size2> otherArray)
Expand Down Expand Up @@ -249,7 +251,7 @@ template<typename T ,std::size_t size1, std::size_t size2, std::size_t size3> cl
_real_array.assign(0.0);
}

~StatArrayDim3(){}
virtual ~StatArrayDim3(){}

/*void assign(StatArrayDim3<T,size1,size2,size3> otherArray)
{
Expand Down Expand Up @@ -603,7 +605,7 @@ template<typename T>class DynArrayDim1 : public BaseArray<T>

}

~DynArrayDim1()
virtual ~DynArrayDim1()
{
}

Expand Down Expand Up @@ -719,7 +721,8 @@ template<typename T >class DynArrayDim2 : public BaseArray<T>
_multi_array.resize(v);//
_multi_array.reindex(1);
}
~DynArrayDim2(){}

virtual ~DynArrayDim2(){}

/*void assign(DynArrayDim2<T> otherArray)
{
Expand Down Expand Up @@ -825,7 +828,7 @@ template<typename T> class DynArrayDim3 : public BaseArray<T>
_multi_array.reindex(1);
}

~DynArrayDim3(){}
virtual ~DynArrayDim3(){}

void assign(DynArrayDim3<T> otherArray)
{
Expand Down

0 comments on commit e242b04

Please sign in to comment.