Skip to content
This repository was archived by the owner on May 18, 2019. It is now read-only.

Commit f92a4a0

Browse files
sjoelundOpenModelica-Hudson
authored andcommitted
Add support for a Mutable data structure
1 parent 8780cf7 commit f92a4a0

File tree

2 files changed

+73
-0
lines changed

2 files changed

+73
-0
lines changed

Compiler/Util/Mutable.mo

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
/*
2+
* This file is part of OpenModelica.
3+
*
4+
* Copyright (c) 1998-2014, Open Source Modelica Consortium (OSMC),
5+
* c/o Linköpings universitet, Department of Computer and Information Science,
6+
* SE-58183 Linköping, Sweden.
7+
*
8+
* All rights reserved.
9+
*
10+
* THIS PROGRAM IS PROVIDED UNDER THE TERMS OF GPL VERSION 3 LICENSE OR
11+
* THIS OSMC PUBLIC LICENSE (OSMC-PL) VERSION 1.2.
12+
* ANY USE, REPRODUCTION OR DISTRIBUTION OF THIS PROGRAM CONSTITUTES
13+
* RECIPIENT'S ACCEPTANCE OF THE OSMC PUBLIC LICENSE OR THE GPL VERSION 3,
14+
* ACCORDING TO RECIPIENTS CHOICE.
15+
*
16+
* The OpenModelica software and the Open Source Modelica
17+
* Consortium (OSMC) Public License (OSMC-PL) are obtained
18+
* from OSMC, either from the above address,
19+
* from the URLs: http://www.ida.liu.se/projects/OpenModelica or
20+
* http://www.openmodelica.org, and in the OpenModelica distribution.
21+
* GNU version 3 is obtained from: http://www.gnu.org/copyleft/gpl.html.
22+
*
23+
* This program is distributed WITHOUT ANY WARRANTY; without
24+
* even the implied warranty of MERCHANTABILITY or FITNESS
25+
* FOR A PARTICULAR PURPOSE, EXCEPT AS EXPRESSLY SET FORTH
26+
* IN THE BY RECIPIENT SELECTED SUBSIDIARY LICENSE CONDITIONS OF OSMC-PL.
27+
*
28+
* See the full OSMC Public License conditions for more details.
29+
*
30+
*/
31+
32+
encapsulated uniontype Mutable<T>
33+
"Creating mutable (shared) objects
34+
35+
This uniontype contains routines for creating and updating objects,
36+
similar to array<> structures."
37+
38+
impure function create
39+
input T data;
40+
output Mutable<T> mutable;
41+
external "C" mutable=mutableCreate(data) annotation(Include="
42+
static inline void* mutableCreate(void *data)
43+
{
44+
return mmc_mk_box1(0, data);
45+
}
46+
");
47+
end create;
48+
49+
impure function update
50+
input Mutable<T> mutable;
51+
input T data;
52+
external "C" mutableUpdate(mutable, data) annotation(Include="
53+
static inline void mutableUpdate(void *mutable, void *data)
54+
{
55+
MMC_STRUCTDATA(mutable)[0] = data;
56+
}
57+
");
58+
end update;
59+
60+
impure function access
61+
input Mutable<T> mutable;
62+
output T data;
63+
external "C" data=mutableAccess(mutable) annotation(Include="
64+
static inline void* mutableAccess(void *mutable)
65+
{
66+
return MMC_STRUCTDATA(mutable)[0];
67+
}
68+
");
69+
end access;
70+
71+
annotation(__OpenModelica_Interface="util");
72+
end Mutable;

Compiler/boot/LoadCompilerSources.mos

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -217,6 +217,7 @@ if true then /* Suppress output */
217217
"../Util/Lapack.mo",
218218
"../Util/List.mo",
219219
"../Util/ModelicaExternalC.mo",
220+
"../Util/Mutable.mo",
220221
"../Util/Print.mo",
221222
"../Util/Settings.mo",
222223
"../Util/StackOverflow.mo",

0 commit comments

Comments
 (0)