Skip to content

Commit

Permalink
allow for postfix and struct specification in inline element getters
Browse files Browse the repository at this point in the history
  • Loading branch information
Alexander Voigt authored and Alexander Voigt committed Nov 28, 2014
1 parent 0a48778 commit 8b488dd
Showing 1 changed file with 24 additions and 18 deletions.
42 changes: 24 additions & 18 deletions meta/CConversion.m
Expand Up @@ -179,31 +179,37 @@
CreateInlineSetter[parameter, CreateSetterInputType[type]];

(* Creates a C++ inline element getter *)
CreateInlineElementGetter[parameter_String, elementType_String, dim_Integer] :=
elementType <> " get_" <> parameter <> "(int i) const" <>
" { return " <> parameter <> "(i); }\n";
CreateInlineElementGetter[parameter_String, elementType_String, dim_Integer, postFix_String:"", struct_String:""] :=
elementType <> " get_" <> parameter <> postFix <> "(int i) const" <>
" { return " <> struct <> parameter <> "(i); }\n";

CreateInlineElementGetter[parameter_String, elementType_String, dim1_Integer, dim2_Integer] :=
elementType <> " get_" <> parameter <> "(int i, int k) const" <>
" { return " <> parameter <> "(i,k); }\n";
CreateInlineElementGetter[parameter_String, elementType_String, dim1_Integer, dim2_Integer, postFix_String:"", struct_String:""] :=
elementType <> " get_" <> parameter <> postFix <> "(int i, int k) const" <>
" { return " <> struct <> parameter <> "(i,k); }\n";

CreateInlineElementGetter[parameter_String, CConversion`ArrayType[realScalarCType, entries_]] :=
CreateInlineElementGetter[parameter, "double", entries];
CreateInlineElementGetter[parameter_String, CConversion`ScalarType[realScalarCType], postFix_String:"", struct_String:""] :=
CreateInlineGetter[parameter, "double", postFix, struct];

CreateInlineElementGetter[parameter_String, CConversion`ArrayType[complexScalarCType, entries_]] :=
CreateInlineElementGetter[parameter, "const std::complex<double>&", entries];
CreateInlineElementGetter[parameter_String, CConversion`ScalarType[complexScalarCType], postFix_String:"", struct_String:""] :=
CreateInlineGetter[parameter, "const std::complex<double>&", postFix, struct];

CreateInlineElementGetter[parameter_String, CConversion`VectorType[realScalarCType, entries_]] :=
CreateInlineElementGetter[parameter, "double", entries];
CreateInlineElementGetter[parameter_String, CConversion`ArrayType[realScalarCType, entries_], postFix_String:"", struct_String:""] :=
CreateInlineElementGetter[parameter, "double", entries, postFix, struct];

CreateInlineElementGetter[parameter_String, CConversion`VectorType[complexScalarCType, entries_]] :=
CreateInlineElementGetter[parameter, "const std::complex<double>&", entries];
CreateInlineElementGetter[parameter_String, CConversion`ArrayType[complexScalarCType, entries_], postFix_String:"", struct_String:""] :=
CreateInlineElementGetter[parameter, "const std::complex<double>&", entries, postFix, struct];

CreateInlineElementGetter[parameter_String, CConversion`MatrixType[realScalarCType, dim1_, dim2_]] :=
CreateInlineElementGetter[parameter, "double", dim1, dim2];
CreateInlineElementGetter[parameter_String, CConversion`VectorType[realScalarCType, entries_], postFix_String:"", struct_String:""] :=
CreateInlineElementGetter[parameter, "double", entries, postFix, struct];

CreateInlineElementGetter[parameter_String, CConversion`MatrixType[complexScalarCType, dim1_, dim2_]] :=
CreateInlineElementGetter[parameter, "const std::complex<double>&", dim1, dim2];
CreateInlineElementGetter[parameter_String, CConversion`VectorType[complexScalarCType, entries_], postFix_String:"", struct_String:""] :=
CreateInlineElementGetter[parameter, "const std::complex<double>&", entries, postFix, struct];

CreateInlineElementGetter[parameter_String, CConversion`MatrixType[realScalarCType, dim1_, dim2_], postFix_String:"", struct_String:""] :=
CreateInlineElementGetter[parameter, "double", dim1, dim2, postFix, struct];

CreateInlineElementGetter[parameter_String, CConversion`MatrixType[complexScalarCType, dim1_, dim2_], postFix_String:"", struct_String:""] :=
CreateInlineElementGetter[parameter, "const std::complex<double>&", dim1, dim2, postFix, struct];

(* Creates a C++ inline getter *)
CreateInlineGetter[parameter_String, type_String, postFix_String:"", struct_String:""] :=
Expand Down

0 comments on commit 8b488dd

Please sign in to comment.