Skip to content
GitLab
Menu
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
monticore
EmbeddedMontiArc
generators
EMAM2Cpp
Commits
5833fdab
Commit
5833fdab
authored
Nov 13, 2018
by
Nils Kaminski
Browse files
Implement free method for dynamic events
parent
82d8a08f
Changes
5
Hide whitespace changes
Inline
Side-by-side
src/main/java/de/monticore/lang/monticar/generator/ExecuteInstruction.java
View file @
5833fdab
...
...
@@ -54,7 +54,7 @@ public class ExecuteInstruction implements Instruction {
String
inst
=
componentName
.
substring
(
0
,
componentName
.
indexOf
(
"["
));
String
id
=
componentName
.
substring
(
componentName
.
indexOf
(
"["
)+
1
,
componentName
.
lastIndexOf
(
"]"
));
return
String
.
format
(
"if(_%s_connected[%s]){ executeDynamicConnects(&(%s)); %s}"
,
inst
,
id
,
componentName
,
exec
);
return
String
.
format
(
"if(_
_
%s_connected[%s]){ executeDynamicConnects(&(%s)); %s}"
,
inst
,
id
,
componentName
,
exec
);
}
return
exec
;
...
...
src/main/java/de/monticore/lang/monticar/generator/cpp/converter/EventDynamicConnectConverter.java
View file @
5833fdab
...
...
@@ -18,14 +18,26 @@ import java.util.*;
public
class
EventDynamicConnectConverter
{
protected
static
final
String
DYNPORTID
=
"_%s_dynPortID"
;
protected
static
final
String
THISCOMPONENTPORTREQUEST
=
"int "
+
DYNPORTID
+
" = __%s_connect_request.front(); __%s_connect_request.pop();\n"
;
protected
static
final
String
THISCOMPONENTPORTREQUEST
=
"int "
+
DYNPORTID
+
" = __%s_connect_request.front(); __%s_connect_request.pop(); _connected_idxs[%d] = "
+
DYNPORTID
+
";\n"
;
protected
static
final
String
DYNPORTIDININSTANCE
=
"_%s_%s_dynPortID"
;
protected
static
final
String
DYNPORTIDININSTANCEINIT
=
"int "
+
DYNPORTIDININSTANCE
+
" = -1;\n"
;
protected
static
final
String
DYNINSTANCEID
=
"_%s_dynINSTID"
;
protected
static
final
String
DYNINSTANCECONNECT
=
"int "
+
DYNINSTANCEID
+
" = dynamicconnect(%d, __%s_connected); if( "
+
DYNINSTANCEID
+
" < 0 ){return; }\n"
;
protected
static
final
String
DYNINSTANCECONNECT
=
"int "
+
DYNINSTANCEID
+
" = dynamicconnect(%d, __%s_connected); if( "
+
DYNINSTANCEID
+
" < 0 ){return; } _connected_idxs[%d] = "
+
DYNINSTANCEID
+
";\n"
;
protected
static
final
String
FREE_CONNECTIONTRACARRAY
=
"__event_connects_%s"
;
protected
static
final
String
FREE_THISCOMPONENTPORTREQUEST
=
"int "
+
DYNPORTID
+
" = _connected_idxs[%d];\n"
;
protected
static
final
String
FREE_DYNINSTANCECONNECT
=
"int "
+
DYNINSTANCEID
+
" = _connected_idxs[%d];\n"
;
protected
static
final
String
FREE_DYNPORTIDININSTANCE
=
"int "
+
DYNPORTIDININSTANCE
+
" = _connected_idxs[%d];\n"
;
protected
static
int
free_method_index_counter
=
0
;
public
static
boolean
generateDynamicConnectEvent
(
EMADynamicEventHandlerInstanceSymbol
event
,
EMAComponentInstanceSymbol
componentSymbol
,
Method
executeMethod
,
BluePrintCPP
bluePrint
)
{
free_method_index_counter
=
0
;
List
<
String
>
names
=
new
ArrayList
<>();
event
.
getCondition
().
getConnectPortNames
(
names
);
java
.
util
.
Collections
.
sort
(
names
);
...
...
@@ -35,6 +47,8 @@ public class EventDynamicConnectConverter {
Map
<
String
,
List
<
String
>>
newPortsInstances
=
getNewPortsOfInstances
(
event
);
generateConnectMethod
(
names
,
componentSymbol
,
bluePrint
);
Method
free
=
generateFreeMethod
(
names
,
event
,
bluePrint
);
String
bodyname
=
"__event_body_"
+
event
.
getName
().
replace
(
"["
,
"_"
).
replace
(
"]"
,
"_"
);
Method
body
=
new
Method
(
bodyname
,
"void"
);
...
...
@@ -44,17 +58,38 @@ public class EventDynamicConnectConverter {
body
.
addInstruction
(
new
TargetCodeInstruction
(
"while("
+
EventConnectInstructionCPP
.
getEventNameCPP
(
event
.
getName
())+
"()){\n"
));
generateHandleConnectRequestsOfQueues
(
names
,
body
);
generateHandleConnectRequestsOfDynamicInstances
(
newInstances
,
body
,
componentSymbol
);
generateHandleConnectRequestInInstances
(
newPortsInstances
,
body
);
generateHandleConnectRequestsOfQueues
(
names
,
body
,
free
);
generateHandleConnectRequestsOfDynamicInstances
(
newInstances
,
body
,
componentSymbol
,
free
);
generateHandleConnectRequestInInstances
(
newPortsInstances
,
body
,
free
);
generateConnects
(
event
,
body
,
bluePrint
,
executeMethod
);
generateConnects
(
event
,
body
,
bluePrint
,
executeMethod
,
free
);
// generateDummyConnects(event, componentSymbol, executeMethod, bluePrint);
//finish everything that needs to be set
//
body
.
getInstructions
().
add
(
1
,
new
TargetCodeInstruction
(
"int* _connected_idxs = (int *)calloc("
+
free_method_index_counter
+
", sizeof(int));\n"
));
generateEndOfFreeMethod
(
event
,
free
);
String
varName
=
"__event_connects_"
+
convertName
(
event
.
getName
());
if
(!
bluePrint
.
getVariable
(
varName
).
isPresent
()){
Variable
v
=
new
Variable
();
v
.
setName
(
varName
);
v
.
setTypeNameTargetLanguage
(
"std::vector<int*>"
);
v
.
setPublic
(
false
);
bluePrint
.
addVariable
(
v
);
}
body
.
addInstruction
(
new
TargetCodeInstruction
(
varName
+
".push_back(_connected_idxs);\n"
));
body
.
addInstruction
(
new
TargetCodeInstruction
(
"}\n"
));
bluePrint
.
addMethod
(
body
);
return
true
;
}
...
...
@@ -93,6 +128,50 @@ public class EventDynamicConnectConverter {
bluePrint
.
addMethod
(
method
);
}
protected
static
Method
generateFreeMethod
(
List
<
String
>
names
,
EMADynamicEventHandlerInstanceSymbol
event
,
BluePrintCPP
bluePrint
){
String
name
=
"free_"
+
String
.
join
(
"_"
,
names
);
Method
method
=
null
;
if
(
bluePrint
.
getMethod
(
name
).
isPresent
()){
Log
.
info
(
"Extend free method: "
+
name
+
"(...)"
,
"EventConverter"
);
method
=
bluePrint
.
getMethod
(
name
).
get
();
}
else
{
Log
.
info
(
"Create free method: "
+
name
+
"(...)"
,
"EventConverter"
);
method
=
new
Method
(
name
,
"void"
);
for
(
String
n
:
names
){
Variable
v
=
new
Variable
();
v
.
setName
(
n
+
"_Idx"
);
v
.
setTypeNameTargetLanguage
(
"int"
);
method
.
addParameter
(
v
);
}
}
method
.
addInstruction
(
new
TargetCodeInstruction
(
"for(long i = __event_connects_"
+
convertName
(
event
.
getName
())+
".size()-1; i >= 0; --i){\n"
));
method
.
addInstruction
(
new
TargetCodeInstruction
(
"int* _connected_idxs = __event_connects_"
+
convertName
(
event
.
getName
())+
".at(i);\n"
));
method
.
addInstruction
(
new
TargetCodeInstruction
(
"if( "
));
for
(
int
i
=
0
;
i
<
names
.
size
();
++
i
){
method
.
addInstruction
(
new
TargetCodeInstruction
(
"(_connected_idxs["
+
i
+
"] == "
+
names
.
get
(
i
)+
"_Idx)"
));
if
(
i
<
names
.
size
()-
1
){
method
.
addInstruction
(
new
TargetCodeInstruction
(
" && "
));
}
}
method
.
addInstruction
(
new
TargetCodeInstruction
(
" ){\n"
));
bluePrint
.
addMethod
(
method
);
return
method
;
}
protected
static
void
generateEndOfFreeMethod
(
EMADynamicEventHandlerInstanceSymbol
event
,
Method
free
){
String
name
=
String
.
format
(
FREE_CONNECTIONTRACARRAY
,
convertName
(
event
.
getName
()));
free
.
addInstruction
(
new
TargetCodeInstruction
(
name
+
".erase("
+
name
+
".begin()+i);\n"
));
free
.
addInstruction
(
new
TargetCodeInstruction
(
"free(_connected_idxs);\n"
));
free
.
addInstruction
(
new
TargetCodeInstruction
(
"}\n}\n"
));
}
protected
static
void
generateDynamicMethod
(
BluePrintCPP
bluePrint
,
String
eventBodyName
){
Optional
<
Method
>
dynamic
=
bluePrint
.
getMethod
(
"dynamic"
);
if
(!
dynamic
.
isPresent
()){
...
...
@@ -149,30 +228,42 @@ public class EventDynamicConnectConverter {
return
newPorts
;
}
protected
static
void
generateHandleConnectRequestsOfQueues
(
List
<
String
>
names
,
Method
body
){
protected
static
void
generateHandleConnectRequestsOfQueues
(
List
<
String
>
names
,
Method
body
,
Method
free
){
for
(
String
name
:
names
){
body
.
addInstruction
(
new
TargetCodeInstruction
(
String
.
format
(
THISCOMPONENTPORTREQUEST
,
name
,
name
,
name
)));
name
,
name
,
name
,
free_method_index_counter
,
name
)));
free
.
addInstruction
(
new
TargetCodeInstruction
(
String
.
format
(
FREE_THISCOMPONENTPORTREQUEST
,
name
,
free_method_index_counter
)));
free_method_index_counter
++;
}
}
protected
static
void
generateHandleConnectRequestsOfDynamicInstances
(
List
<
String
>
instancenames
,
Method
body
,
EMAComponentInstanceSymbol
componentSymbol
){
protected
static
void
generateHandleConnectRequestsOfDynamicInstances
(
List
<
String
>
instancenames
,
Method
body
,
EMAComponentInstanceSymbol
componentSymbol
,
Method
free
){
for
(
String
inst
:
instancenames
){
int
count
=
1
;
while
(
componentSymbol
.
getSubComponent
(
inst
+
"["
+
count
+
"]"
).
isPresent
()){
++
count
;
}
body
.
addInstruction
(
new
TargetCodeInstruction
(
String
.
format
(
DYNINSTANCECONNECT
,
inst
,
count
-
1
,
inst
,
inst
inst
,
count
-
1
,
inst
,
inst
,
free_method_index_counter
,
inst
)));
free
.
addInstruction
(
new
TargetCodeInstruction
(
String
.
format
(
FREE_DYNINSTANCECONNECT
,
inst
,
free_method_index_counter
)));
free_method_index_counter
++;
}
}
protected
static
void
generateHandleConnectRequestInInstances
(
Map
<
String
,
List
<
String
>>
newPorts
,
Method
body
){
protected
static
void
generateHandleConnectRequestInInstances
(
Map
<
String
,
List
<
String
>>
newPorts
,
Method
body
,
Method
free
){
for
(
Map
.
Entry
<
String
,
List
<
String
>>
entry
:
newPorts
.
entrySet
()){
Collections
.
sort
(
entry
.
getValue
());
String
inst
=
entry
.
getKey
()+
".connect_"
+
String
.
join
(
"_"
,
entry
.
getValue
())+
"("
;
String
freeInst
=
entry
.
getKey
()+
".free_"
+
String
.
join
(
"_"
,
entry
.
getValue
())+
"("
;
String
connectIdxs
=
""
;
// for(String port : entry.getValue()){
for
(
int
i
=
0
;
i
<
entry
.
getValue
().
size
();
++
i
){
...
...
@@ -184,16 +275,35 @@ public class EventDynamicConnectConverter {
if
(
i
<
entry
.
getValue
().
size
()-
1
){
inst
+=
", "
;
}
free
.
addInstruction
(
new
TargetCodeInstruction
(
String
.
format
(
FREE_DYNPORTIDININSTANCE
,
convertName
(
entry
.
getKey
()),
entry
.
getValue
().
get
(
i
),
free_method_index_counter
)));
freeInst
+=
String
.
format
(
DYNPORTIDININSTANCE
,
convertName
(
entry
.
getKey
()),
entry
.
getValue
().
get
(
i
));
if
(
i
<
entry
.
getValue
().
size
()-
1
){
freeInst
+=
", "
;
}
connectIdxs
+=
"_connected_idxs["
+
free_method_index_counter
+
"] = "
+
String
.
format
(
DYNPORTIDININSTANCE
,
convertName
(
entry
.
getKey
()),
entry
.
getValue
().
get
(
i
))+
";"
;
free_method_index_counter
++;
}
free
.
addInstruction
(
new
TargetCodeInstruction
(
freeInst
+
");\n"
));
body
.
addInstruction
(
new
TargetCodeInstruction
(
String
.
format
(
"if(!"
+
inst
+
")){return ;}\n"
)));
body
.
addInstruction
(
new
TargetCodeInstruction
(
connectIdxs
+
"\n"
));
}
}
protected
static
void
generateConnects
(
EMADynamicEventHandlerInstanceSymbol
event
,
Method
body
,
BluePrintCPP
bluePrint
,
Method
executeMethod
){
protected
static
void
generateConnects
(
EMADynamicEventHandlerInstanceSymbol
event
,
Method
body
,
BluePrintCPP
bluePrint
,
Method
executeMethod
,
Method
free
){
for
(
EMADynamicConnectorInstanceSymbol
connector
:
event
.
getConnectorsDynamic
()){
Optional
<
String
>
before
=
Optional
.
empty
();
...
...
@@ -242,7 +352,9 @@ public class EventDynamicConnectConverter {
"__dynamic_%s_connect.push_back({%s, &(%s), &(%s)});\n"
,
vt
.
get
().
getTypeNameTargetLanguage
(),
before
.
get
(),
sourceName
,
targetName
)));
free
.
addInstruction
(
new
TargetCodeInstruction
(
String
.
format
(
"dynamicconnect_remove(&__dynamic_%s_connect, %s, &(%s), &(%s));\n"
,
vt
.
get
().
getTypeNameTargetLanguage
(),
before
.
get
(),
sourceName
,
targetName
)));
}
}
...
...
src/main/java/de/monticore/lang/monticar/generator/order/ImplementExecutionOrder.java
View file @
5833fdab
...
...
@@ -31,15 +31,7 @@ import de.monticore.lang.tagging._symboltable.TaggingResolver;
import
de.se_rwth.commons.Splitters
;
import
de.se_rwth.commons.logging.Log
;
import
java.util.ArrayList
;
import
java.util.Collection
;
import
java.util.Collections
;
import
java.util.HashMap
;
import
java.util.Iterator
;
import
java.util.LinkedList
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.Optional
;
import
java.util.*
;
import
java.util.stream.Collectors
;
/*
...
...
@@ -62,6 +54,8 @@ public class ImplementExecutionOrder {
public
static
List
<
EMAComponentInstanceSymbol
>
exOrder
(
TaggingResolver
taggingResolver
,
EMAComponentInstanceSymbol
inst
)
{
dependencies
.
clear
();
instanceConnectors
.
clear
();
instanceSourceConnectors
.
clear
();
s
=
0
;
b
=
0
;
Log
.
errorIfNull
(
inst
,
"The given ExpandedComponentInstanceSymbol in 'exOrder' is null!"
);
...
...
@@ -220,9 +214,14 @@ public class ImplementExecutionOrder {
ExecutionOrder
e
=
new
NonVirtualBlock
(
s
,
b
);
taggingResolver
.
addTag
(
subInst
,
new
TagExecutionOrderSymbol
(
e
));
b
+=
1
;
Collection
<
EMAConnectorInstanceSymbol
>
connects
=
getAllConnectors
(
inst
).
stream
()
.
filter
(
c
->
subInst
.
getOutgoingPortInstances
().
contains
(
connectorSourcePort
(
inst
,
c
)))
.
collect
(
Collectors
.
toList
());
// System.out.println(subInst.getName());
// Collection<EMAConnectorInstanceSymbol> connects = getAllConnectors(inst).stream()
// .filter(c -> subInst.getOutgoingPortInstances().contains(connectorSourcePort(inst, c)))
// .collect(Collectors.toList());
Collection
<
EMAConnectorInstanceSymbol
>
connects
=
getAllConnectorsWithSourceIn
(
inst
,
subInst
.
getOutgoingPortInstances
());
for
(
EMAConnectorInstanceSymbol
c
:
connects
)
{
EMAPortInstanceSymbol
pt
=
connectorTargetPort
(
inst
,
c
);
EMAPortInstanceSymbol
ps
=
connectorSourcePort
(
inst
,
c
);
...
...
@@ -254,9 +253,12 @@ public class ImplementExecutionOrder {
* ***
*/
private
static
EMAComponentInstanceSymbol
dependencyPortDeletion
(
TaggingResolver
taggingResolver
,
EMAComponentInstanceSymbol
inst
,
EMAPortInstanceSymbol
p
)
{
Collection
<
EMAConnectorInstanceSymbol
>
connects
=
getAllConnectors
(
inst
).
stream
()
.
filter
(
c
->
p
.
equals
(
connectorSourcePort
(
inst
,
c
)))
.
collect
(
Collectors
.
toList
());
// Collection<EMAConnectorInstanceSymbol> connects = getAllConnectors(inst).stream()
// .filter(c -> p.equals(connectorSourcePort(inst, c)))
// .collect(Collectors.toList());
Collection
<
EMAConnectorInstanceSymbol
>
connects
=
getAllConnectorsWithSourceIn
(
inst
,
Arrays
.
asList
(
p
));
for
(
EMAConnectorInstanceSymbol
c
:
connects
)
{
EMAPortInstanceSymbol
pt
=
connectorTargetPort
(
inst
,
c
);
EMAComponentInstanceSymbol
inst2
=
(
EMAComponentInstanceSymbol
)
pt
.
getEnclosingScope
().
getSpanningSymbol
().
get
();
...
...
@@ -286,9 +288,10 @@ public class ImplementExecutionOrder {
* ***
*/
private
static
EMAComponentInstanceSymbol
dependencyPortsDeletion
(
TaggingResolver
taggingResolver
,
EMAComponentInstanceSymbol
inst
)
{
Collection
<
EMAConnectorInstanceSymbol
>
connects
=
getAllConnectors
(
inst
).
stream
()
.
filter
(
c
->
inst
.
getPortInstanceList
().
contains
(
connectorSourcePort
(
inst
,
c
)))
.
collect
(
Collectors
.
toList
());
// Collection<EMAConnectorInstanceSymbol> connects = getAllConnectors(inst).stream()
// .filter(c -> inst.getPortInstanceList().contains(connectorSourcePort(inst, c)))
// .collect(Collectors.toList());
Collection
<
EMAConnectorInstanceSymbol
>
connects
=
getAllConnectorsWithSourceIn
(
inst
,
inst
.
getPortInstanceList
());
for
(
EMAConnectorInstanceSymbol
c
:
connects
)
{
EMAPortInstanceSymbol
pt
=
connectorTargetPort
(
inst
,
c
);
EMAPortInstanceSymbol
ps
=
connectorSourcePort
(
inst
,
c
);
...
...
@@ -365,6 +368,14 @@ public class ImplementExecutionOrder {
* @return Source port of c
*/
public
static
EMAPortInstanceSymbol
connectorSourcePort
(
EMAComponentInstanceSymbol
inst
,
EMAConnectorInstanceSymbol
c
)
{
if
(
instanceConnectors
.
containsKey
(
inst
)){
EMAPortInstanceSymbol
p
=
instanceConnectors
.
get
(
inst
).
getOrDefault
(
c
,
null
);
if
(
p
!=
null
){
return
p
;
}
}
Iterator
<
String
>
parts
=
Splitters
.
DOT
.
split
(
c
.
getSource
()).
iterator
();
Optional
<
String
>
instance
=
Optional
.
empty
();
Optional
<
String
>
instancePort
;
...
...
@@ -437,7 +448,6 @@ public class ImplementExecutionOrder {
return
null
;
}
public
static
Collection
<
EMAConnectorInstanceSymbol
>
getAllConnectors
(
EMAComponentInstanceSymbol
inst
){
//TODO: Change this method because it will create to many connectors ...
...
...
@@ -459,12 +469,86 @@ public class ImplementExecutionOrder {
}
}
return
result
;
}
return
inst
.
getConnectorInstances
();
}
protected
static
Map
<
EMAComponentInstanceSymbol
,
Map
<
EMAConnectorInstanceSymbol
,
EMAPortInstanceSymbol
>>
instanceConnectors
=
new
HashMap
<>();
protected
static
Map
<
EMAComponentInstanceSymbol
,
Map
<
EMAPortInstanceSymbol
,
Collection
<
EMAConnectorInstanceSymbol
>>>
instanceSourceConnectors
=
new
HashMap
<>();
public
static
Collection
<
EMAConnectorInstanceSymbol
>
getAllConnectorsWithSourceIn
(
EMAComponentInstanceSymbol
inst
,
Collection
<
EMAPortInstanceSymbol
>
sources
){
if
(
inst
instanceof
EMADynamicComponentInstanceSymbol
)
{
EMAPortInstanceSymbol
port
;
Map
<
EMAPortInstanceSymbol
,
Collection
<
EMAConnectorInstanceSymbol
>>
map
;
if
(
instanceSourceConnectors
.
containsKey
(
inst
)){
map
=
instanceSourceConnectors
.
get
(
inst
);
}
else
{
Map
<
EMAConnectorInstanceSymbol
,
EMAPortInstanceSymbol
>
sourceMap
=
new
HashMap
<>();
map
=
new
HashMap
<>();
for
(
EMAConnectorInstanceSymbol
connector
:
((
EMADynamicComponentInstanceSymbol
)
inst
).
getConnectorInstancesAndEventConnectorInstances
())
{
if
(
connector
instanceof
EMADynamicConnectorInstanceSymbol
)
{
EMADynamicConnectorInstanceSymbol
d
=
(
EMADynamicConnectorInstanceSymbol
)
connector
;
if
(
d
.
hasDynamicNew
())
{
// result.addAll(d.getAllPossibleConnectors());
for
(
EMAConnectorInstanceSymbol
con
:
d
.
getAllPossibleConnectors
()){
//System.out.println(con.getSource());
port
=
connectorSourcePort
(
inst
,
con
);
Collection
<
EMAConnectorInstanceSymbol
>
cons
=
map
.
getOrDefault
(
port
,
new
ArrayList
<>());
cons
.
add
(
con
);
map
.
put
(
port
,
cons
);
sourceMap
.
put
(
con
,
port
);
}
}
else
{
port
=
connectorSourcePort
(
inst
,
connector
);
Collection
<
EMAConnectorInstanceSymbol
>
cons
=
map
.
getOrDefault
(
port
,
new
ArrayList
<>());
cons
.
add
(
connector
);
map
.
put
(
port
,
cons
);
sourceMap
.
put
(
connector
,
port
);
}
}
else
{
port
=
connectorSourcePort
(
inst
,
connector
);
Collection
<
EMAConnectorInstanceSymbol
>
cons
=
map
.
getOrDefault
(
port
,
new
ArrayList
<>());
cons
.
add
(
connector
);
map
.
put
(
port
,
cons
);
sourceMap
.
put
(
connector
,
port
);
}
}
instanceConnectors
.
put
(
inst
,
sourceMap
);
instanceSourceConnectors
.
put
(
inst
,
map
);
}
Collection
<
EMAConnectorInstanceSymbol
>
result
=
new
ArrayList
<>();
for
(
EMAPortInstanceSymbol
p
:
sources
){
if
(
map
.
containsKey
(
p
)){
result
.
addAll
(
map
.
get
(
p
));
}
}
return
result
;
}
return
getAllConnectors
(
inst
).
stream
()
.
filter
(
c
->
sources
.
contains
(
connectorSourcePort
(
inst
,
c
)))
.
collect
(
Collectors
.
toList
());
}
}
//<editor-fold desc="Wrong idea">
//package de.monticore.lang.monticar.generator.order;
//
//import de.ma2cfg.helper.Names;
...
...
@@ -1110,3 +1194,5 @@ public class ImplementExecutionOrder {
// return result;
// }
//}
// </editor-fold>
\ No newline at end of file
src/main/resources/template/dynamics/dynamic_port_request_connect_helper_h.ftl
View file @
5833fdab
...
...
@@ -7,12 +7,13 @@
#
ifndef
CONNECTION_H
#
define
CONNECTION_H
template
<
typename
T
, typename T2
>
template
<
typename
T>
struct
connection
{
void
*
afterComponent
;
T
2
*
from
;
T
*
t
o
;
T
*
source
;
T
*
t
arget
;
}
;
//template<typename T, typename T2>
#
endif
...
...
@@ -39,4 +40,14 @@ int dynamicconnect(int numPorts, bool* connected, std::queue<int>* request){
return
port
;
}
template
<
typename
T>
void
dynamicconnect_remove(std::vector<connection<T>>
*
vec, void
*
ac, T
*
source, T
*
target)
{
for
(
long
i
=
vec-
>
size
()
-1
;
i
>=
0
;
-
-i
){
connection
<
T
>
c
=
vec-
>
at
(
i
)
;
if
(
(
c
.afterComponent
==
ac
)
&&
(
c
.source
==
source
)
&&
(
c
.target
==
target
)){
vec-
>
erase
(
vec-
>
begin
()
+
i
)
;
}
}
}
#
endif
/
*
DynamicHelper_h
*
/
src/test/java/de/monticore/lang/monticar/generator/dynamics/DynamicPortConnectDynamicInstanceTest.java
View file @
5833fdab
...
...
@@ -5,6 +5,7 @@ import de.monticore.lang.monticar.generator.AbstractSymtabTest;
import
de.monticore.lang.monticar.generator.cpp.GeneratorCPP
;
import
de.monticore.lang.tagging._symboltable.TaggingResolver
;
import
de.se_rwth.commons.logging.Log
;
import
org.junit.Ignore
;
import
org.junit.Test
;
import
java.io.File
;
...
...
@@ -31,6 +32,7 @@ public class DynamicPortConnectDynamicInstanceTest extends AbstractSymtabTest {
}
@Test
@Ignore
public
void
Test_04_Big
()
throws
IOException
{
test
(
"instanceRequest.testBig"
,
"./target/generated-sources-cpp/dynamics/DynamicPortConnectDynamicInstanceTest_Test_04_Big"
);
}
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment