Skip to content

Commit

Permalink
- Added the boxptr functions for the MetaModelica builtin Integer fun…
Browse files Browse the repository at this point in the history
…ctions

git-svn-id: https://openmodelica.org/svn/OpenModelica/trunk@6224 f25d12d1-65f4-0310-ae8a-bbce733d8d8e
  • Loading branch information
sjoelund committed Sep 26, 2010
1 parent a5bfaaa commit 1a8ba82
Show file tree
Hide file tree
Showing 2 changed files with 69 additions and 0 deletions.
56 changes: 56 additions & 0 deletions c_runtime/meta_modelica_builtin.cpp
Expand Up @@ -94,6 +94,42 @@ intMin_rettype intMin(modelica_integer i1, modelica_integer i2)
return i1 < i2 ? i1 : i2;
}

modelica_metatype boxptr_intAdd(modelica_metatype i1, modelica_metatype i2)
{
return (void*) ((long)i1+(long)i2);
}

modelica_metatype boxptr_intSub(modelica_metatype i1, modelica_metatype i2)
{
return (void*) ((long)i1-(long)i2);
}

modelica_metatype boxptr_intMul(modelica_metatype i1, modelica_metatype i2)
{
// Unbox first to avoid overflow
return mmc_mk_icon(mmc__unbox__integer(i1)*mmc__unbox__integer(i2));
}

modelica_metatype boxptr_intDiv(modelica_metatype i1, modelica_metatype i2)
{
return mmc_mk_icon((long)i1/(long)i2);
}

modelica_metatype boxptr_intMod(modelica_metatype i1, modelica_metatype i2)
{
return (void*) ((long)i1%(long)i2);
}

modelica_metatype boxptr_intMax(modelica_metatype i1, modelica_metatype i2)
{
return i1 > i2 ? i1 : i2;
}

modelica_metatype boxptr_intMin(modelica_metatype i1, modelica_metatype i2)
{
return i1 < i2 ? i1 : i2;
}

intLt_rettype intLt(modelica_integer i1, modelica_integer i2)
{
return i1 < i2;
Expand Down Expand Up @@ -149,6 +185,26 @@ intString_rettype intString(modelica_integer i)
return res;
}

modelica_metatype boxptr_intAbs(modelica_metatype i)
{
return mmc_mk_icon(abs(mmc__unbox__integer(i)));
}

modelica_metatype boxptr_intNeg(modelica_metatype i)
{
return mmc_mk_icon(-(mmc__unbox__integer(i)));
}

modelica_metatype boxptr_intReal(modelica_metatype i)
{
return mmc_mk_rcon(-(mmc__unbox__integer(i)));
}

modelica_metatype boxptr_intString(modelica_metatype i)
{
return mmc_mk_scon(intString(mmc__unbox__integer(i)));
}

/* Real Operations */
realAdd_rettype realAdd(modelica_real r1, modelica_real r2)
{
Expand Down
13 changes: 13 additions & 0 deletions c_runtime/meta_modelica_builtin.h
Expand Up @@ -69,6 +69,14 @@ intMod_rettype intMod(modelica_integer, modelica_integer);
intMax_rettype intMax(modelica_integer, modelica_integer);
intMin_rettype intMin(modelica_integer, modelica_integer);

modelica_metatype boxptr_intAdd(modelica_metatype, modelica_metatype);
modelica_metatype boxptr_intSub(modelica_metatype, modelica_metatype);
modelica_metatype boxptr_intMul(modelica_metatype, modelica_metatype);
modelica_metatype boxptr_intDiv(modelica_metatype, modelica_metatype);
modelica_metatype boxptr_intMod(modelica_metatype, modelica_metatype);
modelica_metatype boxptr_intMax(modelica_metatype, modelica_metatype);
modelica_metatype boxptr_intMin(modelica_metatype, modelica_metatype);

typedef modelica_boolean intLt_rettype;
typedef modelica_boolean intLe_rettype;
typedef modelica_boolean intEq_rettype;
Expand All @@ -93,6 +101,11 @@ intNeg_rettype intNeg(modelica_integer);
intReal_rettype intReal(modelica_integer);
intString_rettype intString(modelica_integer);

modelica_metatype boxptr_intAbs(modelica_metatype);
modelica_metatype boxptr_intNeg(modelica_metatype);
modelica_metatype boxptr_intReal(modelica_metatype);
modelica_metatype boxptr_intString(modelica_metatype);

/* Real Operations */
typedef modelica_real realAdd_rettype;
typedef modelica_real realSub_rettype;
Expand Down

0 comments on commit 1a8ba82

Please sign in to comment.