Skip to content

Commit

Permalink
cast parameter settings in the constraints to target parameter type
Browse files Browse the repository at this point in the history
  • Loading branch information
Alexander Voigt authored and Alexander Voigt committed Mar 23, 2015
1 parent f760a89 commit b43f180
Showing 1 changed file with 35 additions and 7 deletions.
42 changes: 35 additions & 7 deletions meta/Parameters.m
Original file line number Diff line number Diff line change
Expand Up @@ -168,6 +168,9 @@
IsComplexParameter[sym_] :=
!IsRealParameter[sym];

IsRealExpression[parameter_ /; MemberQ[allModelParameters, parameter]] :=
IsRealParameter[parameter];

IsRealExpression[expr_?NumericQ] :=
Element[expr, Reals];

Expand Down Expand Up @@ -654,40 +657,65 @@
Return[ass];
];

CastTo[expr_String, toType_ /; toType === None] := expr;

CastTo[expr_String, toType_] :=
Switch[toType,
CConversion`ScalarType[CConversion`realScalarCType],
"Re(" <> expr <> ")"
,
CConversion`VectorType[CConversion`realScalarCType,_] |
CConversion`ArrayType[ CConversion`realScalarCType,_] |
CConversion`MatrixType[CConversion`realScalarCType,__],
expr <> ".real()"
,
CConversion`ScalarType[CConversion`complexScalarCType],
expr
,
CConversion`VectorType[CConversion`complexScalarCType,_] |
CConversion`ArrayType[ CConversion`complexScalarCType,_] |
CConversion`MatrixType[CConversion`complexScalarCType,__],
expr <> ".cast<std::complex<double> >()"
,
_,
Print["Error: CastTo: cannot cast expression ", expr, " to ", toType];
""
];

CheckParameter[parameter_] :=
MemberQ[allModelParameters, parameter] || MemberQ[allInputParameters, parameter];

SetParameter[parameter_, value_String, class_String] :=
SetParameter[parameter_, value_String, class_String, castToType_:None] :=
Module[{parameterStr},
If[CheckParameter[parameter],
parameterStr = CConversion`ToValidCSymbolString[parameter];
class <> "->set_" <> parameterStr <> "(" <> value <> ");\n",
class <> "->set_" <> parameterStr <> "(" <> CastTo[value,castToType] <> ");\n",
""
]
];

SetParameter[parameter_[idx_Integer], value_String, class_String] :=
SetParameter[parameter_[idx_Integer], value_String, class_String, castToType_:None] :=
Module[{parameterStr},
If[CheckParameter[parameter],
parameterStr = CConversion`ToValidCSymbolString[parameter];
class <> "->set_" <> parameterStr <> "(" <> ToString[idx] <> ", " <>
value <> ");\n",
CastTo[value,castToType] <> ");\n",
""
]
];

SetParameter[parameter_[idx1_Integer, idx2_Integer], value_String, class_String] :=
SetParameter[parameter_[idx1_Integer, idx2_Integer], value_String, class_String, castToType_:None] :=
Module[{parameterStr},
If[CheckParameter[parameter],
parameterStr = CConversion`ToValidCSymbolString[parameter];
class <> "->set_" <> parameterStr <> "(" <> ToString[idx1] <> ", " <>
ToString[idx2] <> ", " <> value <> ");\n",
ToString[idx2] <> ", " <> CastTo[value,castToType] <> ");\n",
""
]
];

SetParameter[parameter_, value_, class_String] :=
SetParameter[parameter, CConversion`RValueToCFormString[value], class];
SetParameter[parameter, CConversion`RValueToCFormString[value], class, GetType[parameter]]

SaveParameterLocally[parameters_List, prefix_String, caller_String] :=
Module[{i, result = ""},
Expand Down

0 comments on commit b43f180

Please sign in to comment.