Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThomas Schuetz2016-10-10 06:49:55 +0000
committerGerrit Code Review @ Eclipse.org2016-10-10 06:49:55 +0000
commitc92f0f03bd43f3c672a63962ffbd08cc410f5260 (patch)
tree9e6406282c2cb9f0580161b87ab1264c8d35a2e8
parent64cc36cb3891a0aa3257426a403b06f38d529847 (diff)
parent6a2dc3b10e15050fd488514656e1c30902393437 (diff)
downloadorg.eclipse.etrice-c92f0f03bd43f3c672a63962ffbd08cc410f5260.tar.gz
org.eclipse.etrice-c92f0f03bd43f3c672a63962ffbd08cc410f5260.tar.xz
org.eclipse.etrice-c92f0f03bd43f3c672a63962ffbd08cc410f5260.zip
Merge "[runtime.cpp] Refactored cpp runtime - Refactored initialization process - Fixed RTObject double deleting children - Sub actors are now static members - Added ReplicatedActorClassBase for replicated actors [generator.cpp] Modified ActorClassGen and NodeGen to fit the runtime changes"
-rw-r--r--plugins/org.eclipse.etrice.core.room.ui/src/org/eclipse/etrice/core/ui/contentassist/RoomProposalProvider.java40
-rw-r--r--plugins/org.eclipse.etrice.core.room/src/org/eclipse/etrice/core/naming/RoomFragmentProvider.java13
-rw-r--r--plugins/org.eclipse.etrice.core.room/src/org/eclipse/etrice/core/scoping/RoomScopeProvider.java2
-rw-r--r--plugins/org.eclipse.etrice.core.room/src/org/eclipse/etrice/core/validation/RoomJavaValidator.java5
-rw-r--r--plugins/org.eclipse.etrice.core.room/src/org/eclipse/etrice/core/validation/ValidationUtil.java27
-rw-r--r--plugins/org.eclipse.etrice.generator.cpp/src/org/eclipse/etrice/generator/cpp/gen/ActorClassGen.xtend114
-rw-r--r--plugins/org.eclipse.etrice.generator.cpp/src/org/eclipse/etrice/generator/cpp/gen/NodeGen.xtend128
-rw-r--r--plugins/org.eclipse.etrice.generator.cpp/src/org/eclipse/etrice/generator/cpp/gen/ProtocolClassGen.xtend14
-rw-r--r--plugins/org.eclipse.etrice.generator.cpp/xtend-gen/org/eclipse/etrice/generator/cpp/gen/ActorClassGen.java441
-rw-r--r--plugins/org.eclipse.etrice.generator.cpp/xtend-gen/org/eclipse/etrice/generator/cpp/gen/NodeGen.java396
-rw-r--r--plugins/org.eclipse.etrice.generator.cpp/xtend-gen/org/eclipse/etrice/generator/cpp/gen/ProtocolClassGen.java68
-rw-r--r--runtime/org.eclipse.etrice.runtime.cpp/src-gen/common/modelbase/RTSystemServicesProtocol.cpp34
-rw-r--r--runtime/org.eclipse.etrice.runtime.cpp/src-gen/common/modelbase/RTSystemServicesProtocol.h21
-rw-r--r--runtime/org.eclipse.etrice.runtime.cpp/src/common/debugging/DebuggingService.cpp26
-rw-r--r--runtime/org.eclipse.etrice.runtime.cpp/src/common/debugging/DebuggingService.h9
-rw-r--r--runtime/org.eclipse.etrice.runtime.cpp/src/common/messaging/RTObject.cpp6
-rw-r--r--runtime/org.eclipse.etrice.runtime.cpp/src/common/messaging/RTObject.h2
-rw-r--r--runtime/org.eclipse.etrice.runtime.cpp/src/common/modelbase/ActorClassBase.cpp11
-rw-r--r--runtime/org.eclipse.etrice.runtime.cpp/src/common/modelbase/ActorClassBase.h4
-rw-r--r--runtime/org.eclipse.etrice.runtime.cpp/src/common/modelbase/InterfaceItemBase.cpp26
-rw-r--r--runtime/org.eclipse.etrice.runtime.cpp/src/common/modelbase/InterfaceItemBase.h1
-rw-r--r--runtime/org.eclipse.etrice.runtime.cpp/src/common/modelbase/RTSystemProtocol.cpp7
-rw-r--r--runtime/org.eclipse.etrice.runtime.cpp/src/common/modelbase/ReplicatedActorClassBase.cpp45
-rw-r--r--runtime/org.eclipse.etrice.runtime.cpp/src/common/modelbase/ReplicatedActorClassBase.h43
-rw-r--r--runtime/org.eclipse.etrice.runtime.cpp/src/common/modelbase/ReplicatedInterfaceItemBase.cpp5
-rw-r--r--runtime/org.eclipse.etrice.runtime.cpp/src/common/modelbase/ReplicatedInterfaceItemBase.h2
-rw-r--r--runtime/org.eclipse.etrice.runtime.cpp/src/common/modelbase/SubSystemClassBase.cpp6
-rw-r--r--runtime/org.eclipse.etrice.runtime.cpp/src/common/modelbase/SubSystemClassBase.h4
28 files changed, 1046 insertions, 454 deletions
diff --git a/plugins/org.eclipse.etrice.core.room.ui/src/org/eclipse/etrice/core/ui/contentassist/RoomProposalProvider.java b/plugins/org.eclipse.etrice.core.room.ui/src/org/eclipse/etrice/core/ui/contentassist/RoomProposalProvider.java
index ea239cac4..ba35fcbad 100644
--- a/plugins/org.eclipse.etrice.core.room.ui/src/org/eclipse/etrice/core/ui/contentassist/RoomProposalProvider.java
+++ b/plugins/org.eclipse.etrice.core.room.ui/src/org/eclipse/etrice/core/ui/contentassist/RoomProposalProvider.java
@@ -26,14 +26,10 @@ import org.eclipse.etrice.core.room.ActorContainerRef;
import org.eclipse.etrice.core.room.ActorInstanceMapping;
import org.eclipse.etrice.core.room.ActorRef;
import org.eclipse.etrice.core.room.DataClass;
-import org.eclipse.etrice.core.room.LayerConnection;
import org.eclipse.etrice.core.room.Operation;
import org.eclipse.etrice.core.room.RefPath;
-import org.eclipse.etrice.core.room.RefSAPoint;
-import org.eclipse.etrice.core.room.RelaySAPoint;
import org.eclipse.etrice.core.room.RoomAnnotationTargetEnum;
import org.eclipse.etrice.core.room.RoomPackage;
-import org.eclipse.etrice.core.room.SPP;
import org.eclipse.etrice.core.room.StandardOperation;
import org.eclipse.etrice.core.room.util.RoomHelpers;
import org.eclipse.jface.text.contentassist.ICompletionProposal;
@@ -41,9 +37,7 @@ import org.eclipse.jface.viewers.StyledString;
import org.eclipse.swt.graphics.Image;
import org.eclipse.xtext.Assignment;
import org.eclipse.xtext.RuleCall;
-import org.eclipse.xtext.naming.IQualifiedNameProvider;
import org.eclipse.xtext.resource.IEObjectDescription;
-import org.eclipse.xtext.ui.editor.contentassist.ConfigurableCompletionProposal;
import org.eclipse.xtext.ui.editor.contentassist.ContentAssistContext;
import org.eclipse.xtext.ui.editor.contentassist.ICompletionProposalAcceptor;
@@ -123,9 +117,6 @@ public class RoomProposalProvider extends AbstractRoomProposalProvider {
@Inject
protected RoomNameProvider roomNameProvider;
- @Inject
- protected IQualifiedNameProvider fqnProvider;
-
protected Function<IEObjectDescription, ICompletionProposal> getProposalFactory(String ruleName, ContentAssistContext contentAssistContext) {
if (contentAssistContext!=null && contentAssistContext.getCurrentModel().eClass()==RoomPackage.eINSTANCE.getActorRef())
return new FilteredProposalCreator(new ActorRefFilter(), contentAssistContext, ruleName);
@@ -228,37 +219,6 @@ public class RoomProposalProvider extends AbstractRoomProposalProvider {
return refs;
}
- @Override
- public void completeLayerConnection_To(EObject model,
- Assignment assignment, ContentAssistContext context,
- ICompletionProposalAcceptor acceptor) {
- super.completeLayerConnection_To(model, assignment, context, acceptor);
-
- if (model instanceof LayerConnection) {
- LayerConnection lc = (LayerConnection) model;
- if (lc.getFrom() instanceof RefSAPoint) {
-
- }
- else if (lc.getFrom() instanceof RelaySAPoint) {
- SPP spp = ((RelaySAPoint)lc.getFrom()).getRelay();
- List<ActorClass> classes = roomHelpers.getClassHierarchy((ActorClass) spp.eContainer());
- for (ActorClass ac : classes) {
- for (ActorRef ar : ac.getActorRefs()) {
- StyledString displayString = getStyledDisplayString(ar, fqnProvider.apply(ar).toString(), ar.getName());
- ICompletionProposal result = createCompletionProposal(ar.getName(), displayString, getImage(ar), getPriorityHelper().getDefaultPriority(),
- context.getPrefix(), context);
- if (result instanceof ConfigurableCompletionProposal) {
- ((ConfigurableCompletionProposal) result).setProposalContextResource(context.getResource());
- ((ConfigurableCompletionProposal) result).setAdditionalProposalInfo(ar);
- ((ConfigurableCompletionProposal) result).setHover(getHover());
- }
- acceptor.accept(result);
- }
- }
- }
- }
- }
-
// public void completeActorRef_Type(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
// super.completeActorRef_Type(
// model,
diff --git a/plugins/org.eclipse.etrice.core.room/src/org/eclipse/etrice/core/naming/RoomFragmentProvider.java b/plugins/org.eclipse.etrice.core.room/src/org/eclipse/etrice/core/naming/RoomFragmentProvider.java
index c04d8d463..d772b0c89 100644
--- a/plugins/org.eclipse.etrice.core.room/src/org/eclipse/etrice/core/naming/RoomFragmentProvider.java
+++ b/plugins/org.eclipse.etrice.core.room/src/org/eclipse/etrice/core/naming/RoomFragmentProvider.java
@@ -109,25 +109,16 @@ public class RoomFragmentProvider extends FSMFragmentProvider {
private String caseSAPointShort(SAPoint sapt) {
if (sapt==null)
return "null";
- if (sapt instanceof RefSAPoint) {
- if (((RefSAPoint) sapt).getRef()==null)
- return "<not_resolved>";
+ if (sapt instanceof RefSAPoint)
return ((RefSAPoint) sapt).getRef().getName();
- }
- else if (sapt instanceof RelaySAPoint) {
- if (((RelaySAPoint) sapt).getRelay()==null)
- return "<not_resolved>";
+ else if (sapt instanceof RelaySAPoint)
return ((RelaySAPoint) sapt).getRelay().getName();
- }
assert(false): "unexpectd sub type";
return null;
}
private String caseSPPointShort(SPPoint sppt) {
- if (sppt==null || sppt.getRef()==null || sppt.getService()==null) {
- return "<not_resolved>";
- }
return sppt.getRef().getName()+EP_SEP+sppt.getService().getName();
}
}
diff --git a/plugins/org.eclipse.etrice.core.room/src/org/eclipse/etrice/core/scoping/RoomScopeProvider.java b/plugins/org.eclipse.etrice.core.room/src/org/eclipse/etrice/core/scoping/RoomScopeProvider.java
index 972e58a51..11fcad7e7 100644
--- a/plugins/org.eclipse.etrice.core.room/src/org/eclipse/etrice/core/scoping/RoomScopeProvider.java
+++ b/plugins/org.eclipse.etrice.core.room/src/org/eclipse/etrice/core/scoping/RoomScopeProvider.java
@@ -415,7 +415,7 @@ public class RoomScopeProvider extends FSMScopeProvider {
* @param ref
* @return a list of scopes
*/
- public IScope scope_SPPoint_ref(SPPoint pt, EReference ref) {
+ public IScope scope_SPPoint_actorRef(SPPoint pt, EReference ref) {
final List<IEObjectDescription> scopes = new ArrayList<IEObjectDescription>();
ActorContainerClass acc = getActorContainerClass(pt);
diff --git a/plugins/org.eclipse.etrice.core.room/src/org/eclipse/etrice/core/validation/RoomJavaValidator.java b/plugins/org.eclipse.etrice.core.room/src/org/eclipse/etrice/core/validation/RoomJavaValidator.java
index c82a1c43b..5945e2342 100644
--- a/plugins/org.eclipse.etrice.core.room/src/org/eclipse/etrice/core/validation/RoomJavaValidator.java
+++ b/plugins/org.eclipse.etrice.core.room/src/org/eclipse/etrice/core/validation/RoomJavaValidator.java
@@ -222,6 +222,7 @@ public class RoomJavaValidator extends AbstractRoomJavaValidator {
if (ar.getMultiplicity()>1) {
for (Port p : ac.getInterfacePorts()) {
if (p.getMultiplicity()<0) {
+ int idx = ((ActorContainerClass)ar.eContainer()).getActorRefs().indexOf(ar);
error("replicated actor must not have replicated port with arbitrary multiplicity", null);
}
}
@@ -231,7 +232,7 @@ public class RoomJavaValidator extends AbstractRoomJavaValidator {
@Check
public void checkLayerConnectiontarget(LayerConnection lc) {
- if (lc!=null && lc.getTo()!=null && lc.getTo().getRef() instanceof ActorRef)
+ if (lc.getTo().getRef() instanceof ActorRef)
if (((ActorRef)lc.getTo().getRef()).getMultiplicity()>1)
error("layer connection must not connect to replicated actor", null);
}
@@ -424,7 +425,7 @@ public class RoomJavaValidator extends AbstractRoomJavaValidator {
public void checkServiceCompatibility(LayerConnection conn) {
Result result = validationUtil.isValid(conn);
if (!result.isOk())
- error(result.getMsg(), result.getSource(), result.getFeature());
+ error(result.getMsg(), RoomPackage.eINSTANCE.getLayerConnection_From());
}
@Check
diff --git a/plugins/org.eclipse.etrice.core.room/src/org/eclipse/etrice/core/validation/ValidationUtil.java b/plugins/org.eclipse.etrice.core.room/src/org/eclipse/etrice/core/validation/ValidationUtil.java
index 1cb69b5f7..a14c16057 100644
--- a/plugins/org.eclipse.etrice.core.room/src/org/eclipse/etrice/core/validation/ValidationUtil.java
+++ b/plugins/org.eclipse.etrice.core.room/src/org/eclipse/etrice/core/validation/ValidationUtil.java
@@ -41,7 +41,6 @@ import org.eclipse.etrice.core.room.RefSAPoint;
import org.eclipse.etrice.core.room.ReferenceType;
import org.eclipse.etrice.core.room.RelaySAPoint;
import org.eclipse.etrice.core.room.RoomModel;
-import org.eclipse.etrice.core.room.RoomPackage;
import org.eclipse.etrice.core.room.SPP;
import org.eclipse.etrice.core.room.SPPoint;
import org.eclipse.etrice.core.room.ServiceImplementation;
@@ -491,18 +490,10 @@ public class ValidationUtil extends FSMValidationUtil {
}
public Result isValid(LayerConnection lc) {
- if (lc.getFrom() instanceof RelaySAPoint) {
- if (((RelaySAPoint)lc.getFrom())!=null && lc.getTo()!=null && lc.getTo().getService()!=null)
- return isConnectable(lc, ((RelaySAPoint)lc.getFrom()).getRelay(), null, lc.getTo().getService(), lc.getTo().getRef(), (StructureClass)lc.eContainer(), lc);
- else
- return Result.error("incomplete layer connection");
- }
- else if (lc.getFrom() instanceof RefSAPoint) {
- if (((RefSAPoint)lc.getFrom())!=null && ((RefSAPoint)lc.getFrom()).getRef()!=null && lc.getTo()!=null && lc.getTo().getService()!=null && lc.getTo().getRef()!=null)
- return isConnectable(lc, null, ((RefSAPoint)lc.getFrom()).getRef(), lc.getTo().getService(), lc.getTo().getRef(), (StructureClass)lc.eContainer(), lc);
- else
- return Result.error("incomplete layer connection");
- }
+ if (lc.getFrom() instanceof RelaySAPoint)
+ return isConnectable(((RelaySAPoint)lc.getFrom()).getRelay(), null, lc.getTo().getService(), lc.getTo().getRef(), (StructureClass)lc.eContainer(), lc);
+ else if (lc.getFrom() instanceof RefSAPoint)
+ return isConnectable(null, ((RefSAPoint)lc.getFrom()).getRef(), lc.getTo().getService(), lc.getTo().getRef(), (StructureClass)lc.eContainer(), lc);
else {
assert(false): "unexpected sub type";
return Result.error("internal error");
@@ -511,10 +502,10 @@ public class ValidationUtil extends FSMValidationUtil {
public Result isConnectable(SPP src, ActorContainerRef srcRef,
SPP tgt, ActorContainerRef tgtRef, StructureClass ac) {
- return isConnectable(null, src, srcRef, tgt, tgtRef, ac, null);
+ return isConnectable(src, srcRef, tgt, tgtRef, ac, null);
}
- public Result isConnectable(LayerConnection lc, SPP src, ActorContainerRef srcRef,
+ public Result isConnectable(SPP src, ActorContainerRef srcRef,
SPP dst, ActorContainerRef dstRef, StructureClass sc, LayerConnection exclude) {
if (sc==null) {
@@ -522,13 +513,13 @@ public class ValidationUtil extends FSMValidationUtil {
}
if ((src==null && srcRef==null) || (src!=null && srcRef!=null))
- return Result.error("source can be an own SPP _or_ a ref", lc, RoomPackage.Literals.LAYER_CONNECTION__FROM);
+ return Result.error("source can be an own SPP _or_ a ref");
if (dst==null || dstRef==null)
- return Result.error("destination must be an SPP on a ref", lc, RoomPackage.Literals.LAYER_CONNECTION__TO);
+ return Result.error("destination must be an SPP on a ref");
if (src!=null && isConnectedSrc(src, sc, exclude))
- return Result.error("source SPP is already connected", lc, RoomPackage.Literals.LAYER_CONNECTION__FROM);
+ return Result.error("source SPP is already connected");
// the destination may be connected several times, so don't check this
// if (isConnectedDst(dst, dstRef, sc, exclude))
diff --git a/plugins/org.eclipse.etrice.generator.cpp/src/org/eclipse/etrice/generator/cpp/gen/ActorClassGen.xtend b/plugins/org.eclipse.etrice.generator.cpp/src/org/eclipse/etrice/generator/cpp/gen/ActorClassGen.xtend
index 8251fcec9..e1228095b 100644
--- a/plugins/org.eclipse.etrice.generator.cpp/src/org/eclipse/etrice/generator/cpp/gen/ActorClassGen.xtend
+++ b/plugins/org.eclipse.etrice.generator.cpp/src/org/eclipse/etrice/generator/cpp/gen/ActorClassGen.xtend
@@ -16,7 +16,6 @@ import com.google.inject.Inject
import com.google.inject.Singleton
import java.util.Map
import org.eclipse.etrice.core.fsm.fSM.ComponentCommunicationType
-import org.eclipse.etrice.core.genmodel.builder.GenmodelConstants
import org.eclipse.etrice.core.genmodel.etricegen.ExpandedActorClass
import org.eclipse.etrice.core.genmodel.etricegen.Root
import org.eclipse.etrice.core.genmodel.etricegen.WiredActorClass
@@ -73,6 +72,7 @@ class ActorClassGen extends GenericActorClassGenerator {
#include "common/etDatatypesCpp.hpp"
#include "common/messaging/IRTObject.h"
#include "common/modelbase/PortBase.h"
+ #include "common/modelbase/ReplicatedActorClassBase.h"
#include "common/modelbase/InterfaceItemBase.h"
#include "common/modelbase/SubSystemClassBase.h"
#include "common/messaging/Address.h"
@@ -92,6 +92,9 @@ class ActorClassGen extends GenericActorClassGenerator {
«ELSE»
#include "«ac.actorBase.path»«ac.actorBase.name».h"
«ENDIF»
+ «FOR ar : ac.actorRefs»
+ #include "«ar.type.actorIncludePath»"
+ «ENDFOR»
«ac.userCode1.userCode»
@@ -108,6 +111,15 @@ class ActorClassGen extends GenericActorClassGenerator {
«ep.getPortClassName» «ep.name»;
«ENDFOR»
+ //--------------------- sub actors
+ «FOR sub : ac.actorRefs»
+ «IF sub.multiplicity > 1»
+ Replicated«sub.type.implementationClassName» «sub.name»;
+ «ELSE»
+ «sub.type.implementationClassName» «sub.name»;
+ «ENDIF»
+ «ENDFOR»
+
//--------------------- saps
«FOR sap : ac.serviceAccessPoints»
«sap.getPortClassName» «sap.name»;
@@ -128,6 +140,10 @@ class ActorClassGen extends GenericActorClassGenerator {
public:
//--------------------- construction
«ac.name»(etRuntime::IRTObject* parent, const std::string& name);
+ void initialize(void);
+ «IF Main::settings.generateMSCInstrumentation»
+ void setProbesActive(bool recursive, bool active);
+ «ENDIF»
««« TODO: check whether attribute setters/getters are necessary at all, if yes own cpp implementation is needed for *,[],& variables
««« «attributeSettersGettersImplementation(ac.attributes, ac.name)»
@@ -162,6 +178,17 @@ class ActorClassGen extends GenericActorClassGenerator {
};
+ class Replicated«clsname» : public ReplicatedActorClassBase {
+ public:
+ Replicated«clsname»(IRTObject* parent, const std::string& name) :
+ ReplicatedActorClassBase(parent, name) {}
+
+ protected:
+ ActorClassBase* createActor(IRTObject* parent, const std::string& name) {
+ return new «clsname»(parent, name);
+ }
+ };
+
«ac.generateNamespaceEnd»
«generateIncludeGuardEnd(ac, '')»
@@ -176,6 +203,8 @@ class ActorClassGen extends GenericActorClassGenerator {
initList += '''«ac.actorBase?.name ?: 'ActorClassBase'»(parent, name)'''
// own ports
initList += ac.endPorts.map['''«name»(this, "«name»", IFITEM_«name»)''']
+ // own sub actors
+ initList += ac.actorRefs.map['''«name»(this, "«name»")''']
// own saps
initList += ac.serviceAccessPoints.map['''«name»(this, "«name»", IFITEM_«name»)''']
// own service implementations
@@ -205,10 +234,8 @@ class ActorClassGen extends GenericActorClassGenerator {
#include "common/messaging/RTObject.h"
#include "common/messaging/RTServices.h"
-
- «FOR ar : ac.actorRefs»
- #include "«ar.type.actorIncludePath»"
- «ENDFOR»
+ #include "common/debugging/DebuggingService.h"
+ #include "common/debugging/MSCFunctionObject.h"
using namespace etRuntime;
@@ -217,6 +244,10 @@ class ActorClassGen extends GenericActorClassGenerator {
«clsname»::«clsname»(etRuntime::IRTObject* parent, const std::string& name)
«ac.generateConstructorInitalizerList»
{
+ «IF Main::settings.generateMSCInstrumentation»
+ MSCFunctionObject mscFunctionObject(getInstancePathName(), "Constructor");
+ «ENDIF»
+
«IF ac.hasNonEmptyStateMachine»
for (int i = 0; i < s_numberOfStates; i++) {
history[i] = NO_STATE;
@@ -227,20 +258,34 @@ class ActorClassGen extends GenericActorClassGenerator {
// sub actors
«FOR sub : ac.actorRefs»
«IF sub.multiplicity>1»
- for (int i=0; i<«sub.multiplicity»; ++i) {
- «IF Main::settings.generateMSCInstrumentation»
- DebuggingService::getInstance().addMessageActorCreate(*this, "«sub.name»«GenmodelConstants::INDEX_SEP»"+i);
- «ENDIF»
- new «sub.type.implementationClassName»(this, "«sub.name»«GenmodelConstants::INDEX_SEP»"+i);
- }
- «ELSE»
- «IF Main::settings.generateMSCInstrumentation»
- DebuggingService::getInstance().addMessageActorCreate(*this, "«sub.name»");
- «ENDIF»
- new «sub.type.implementationClassName»(this, "«sub.name»");
+ «sub.name».createSubActors(«sub.multiplicity»);
«ENDIF»
«ENDFOR»
+ «initHelper.genExtraInitializers(ac.attributes)»
+ «ac.userStructorBody(true)»
+ }
+
+ void «ac.name»::initialize() {
+ «IF Main::settings.generateMSCInstrumentation»
+ MSCFunctionObject mscFunctionObject(getInstancePathName(), "initialize()");
+ «FOR sub : ac.actorRefs»
+ «IF sub.multiplicity > 1»
+ for (int i=0; i<«sub.multiplicity»; ++i) {
+ DebuggingService::getInstance().addMessageActorCreate(*this, «sub.name».getSubActor(i)->getName());
+ }
+ «ELSE»
+ DebuggingService::getInstance().addMessageActorCreate(*this, "«sub.name»");
+ «ENDIF»
+ «ENDFOR»
+ «ENDIF»
+
+ ActorClassBase::initialize();
+
+ «FOR sub : ac.actorRefs»
+ «sub.name».initialize();
+ «ENDFOR»
+
// wiring
«FOR wire: wired.wires»
«if (wire.dataDriven) "DataPortBase" else "InterfaceItemBase"»::connect(this, "«wire.path1.join('/')»", "«wire.path2.join('/')»");
@@ -250,12 +295,43 @@ class ActorClassGen extends GenericActorClassGenerator {
// activate polling for data-driven communication
RTServices::getInstance().getMsgSvcCtrl().getMsgSvc(getThread())->addPollingMessageReceiver(*this);
«ENDIF»
-
- «initHelper.genExtraInitializers(ac.attributes)»
- «ac.userStructorBody(true)»
}
+
+ «IF Main::settings.generateMSCInstrumentation»
+ void «ac.name»::setProbesActive(bool recursive, bool active) {
+ DebuggingService::getInstance().addPortInstance(m_RTSystemPort);
+ «IF ac.actorRefs.size > 0»
+ if(recursive) {
+ «FOR sub : ac.actorRefs»
+ «sub.name».setProbesActive(recursive, active);
+ «ENDFOR»
+ }
+ «ENDIF»
+ «FOR ep : ac.endPorts»
+ «IF !ep.dataDriven»
+ «IF ep.replicated»
+ for(int i = 0; i < «ep.name».getNInterfaceItems(); i++)
+ DebuggingService::getInstance().addPortInstance(*(«ep.name».getInterfaceItem(i)));
+ «ELSE»
+ DebuggingService::getInstance().addPortInstance(«ep.name»);
+ «ENDIF»
+ «ENDIF»
+ «ENDFOR»
+ «FOR sap : ac.serviceAccessPoints»
+ DebuggingService::getInstance().addPortInstance(«sap.name»);
+ «ENDFOR»
+ «FOR spp : ac.serviceProvisionPoints»
+ for(int i = 0; i < «spp.name».getNInterfaceItems(); i++)
+ DebuggingService::getInstance().addPortInstance(*(«spp.name».getInterfaceItem(i)));
+ «ENDFOR»
+ }
+ «ENDIF»
void «ac.name»::destroy(){
+ «IF Main::settings.generateMSCInstrumentation»
+ MSCFunctionObject mscFunctionObject(getInstancePathName(), "destroy()");
+ «ENDIF»
+
«ac.userStructorBody(false)»
«IF Main::settings.generateMSCInstrumentation»
DebuggingService::getInstance().addMessageActorDestroy(*this);
diff --git a/plugins/org.eclipse.etrice.generator.cpp/src/org/eclipse/etrice/generator/cpp/gen/NodeGen.xtend b/plugins/org.eclipse.etrice.generator.cpp/src/org/eclipse/etrice/generator/cpp/gen/NodeGen.xtend
index eb071adf9..2635252f8 100644
--- a/plugins/org.eclipse.etrice.generator.cpp/src/org/eclipse/etrice/generator/cpp/gen/NodeGen.xtend
+++ b/plugins/org.eclipse.etrice.generator.cpp/src/org/eclipse/etrice/generator/cpp/gen/NodeGen.xtend
@@ -16,14 +16,13 @@ import com.google.inject.Inject
import com.google.inject.Singleton
import java.util.Collection
import java.util.Map
+import org.eclipse.etrice.core.common.converter.TimeConverter
import org.eclipse.etrice.core.etmap.util.ETMapUtil
import org.eclipse.etrice.core.etphys.eTPhys.ExecMode
import org.eclipse.etrice.core.etphys.eTPhys.PhysicalThread
-import org.eclipse.etrice.core.genmodel.builder.GenmodelConstants
import org.eclipse.etrice.core.genmodel.etricegen.Root
import org.eclipse.etrice.core.genmodel.etricegen.SubSystemInstance
import org.eclipse.etrice.core.genmodel.etricegen.WiredSubSystemClass
-import org.eclipse.etrice.core.genmodel.fsm.fsmgen.IDiagnostician
import org.eclipse.etrice.core.room.SubSystemClass
import org.eclipse.etrice.generator.cpp.Main
import org.eclipse.etrice.generator.fsm.base.FileSystemHelpers
@@ -32,7 +31,6 @@ import org.eclipse.etrice.generator.generic.ProcedureHelpers
import org.eclipse.etrice.generator.generic.RoomExtensions
import static extension org.eclipse.etrice.generator.fsm.base.Indexed.*
-import org.eclipse.etrice.core.common.converter.TimeConverter
@Singleton
class NodeGen {
@@ -41,9 +39,9 @@ class NodeGen {
@Inject extension RoomExtensions
@Inject extension ProcedureHelpers
@Inject extension FileSystemHelpers
-
+
@Inject IGeneratorFileIo fileIO
- @Inject IDiagnostician diagnostician
+ @Inject Initialization initHelper
def doGenerate(Root root) {
val Map<SubSystemClass, WiredSubSystemClass> sscc2wired = newHashMap
@@ -86,6 +84,9 @@ class NodeGen {
«generateIncludeGuardBegin(cc, '')»
#include "common/modelbase/SubSystemClassBase.h"
+ «FOR ai : comp.actorInstances»
+ #include "«ai.actorClass.actorIncludePath»"
+ «ENDFOR»
««« «FOR model : root.getReferencedModels(cc)»
««« ««« #include "«model.name».h"
@@ -104,11 +105,25 @@ class NodeGen {
static const int «thread.value.threadId»;
«ENDFOR»
+ // sub actors
+ «FOR sub : cc.actorRefs»
+ «IF sub.multiplicity>1»
+ Replicated«sub.type.implementationClassName» «sub.name»;
+ «ELSE»
+ «sub.type.implementationClassName» «sub.name»;
+ «ENDIF»
+ «ENDFOR»
+
«clsname»(IRTObject* parent, const std::string& name);
+ ~«clsname»();
virtual void receiveEvent(etRuntime::InterfaceItemBase* ifitem, int evt, void* data);
virtual void instantiateMessageServices();
- virtual void instantiateActors();
+ virtual void mapThreads(void);
+ virtual void initialize(void);
+ «IF Main::settings.generateMSCInstrumentation»
+ virtual void setProbesActive(bool recursive, bool active);
+ «ENDIF»
virtual void init();
@@ -134,6 +149,18 @@ class NodeGen {
"THREAD_"+thread.name.toUpperCase
}
+ def private generateConstructorInitalizerList(SubSystemClass cc) {
+ val extension initHelper = initHelper
+ var initList = <CharSequence>newArrayList
+
+ // super class
+ initList += '''SubSystemClassBase(parent, name)'''
+ // own sub actors
+ initList += cc.actorRefs.map['''«name»(this, "«name»")''']
+
+ initList.generateCtorInitializerList
+ }
+
def generateSourceFile(Root root, SubSystemInstance comp, WiredSubSystemClass wired, Collection<PhysicalThread> usedThreads) {
val cc = comp.subSystemClass
val models = root.getReferencedModels(cc)
@@ -152,16 +179,13 @@ class NodeGen {
#include "«getCppHeaderFileName(nr, comp)»"
#include "common/debugging/DebuggingService.h"
+ #include "common/debugging/MSCFunctionObject.h"
#include "common/messaging/IMessageService.h"
#include "common/messaging/MessageService.h"
#include "common/messaging/MessageServiceController.h"
#include "common/messaging/RTServices.h"
#include "common/modelbase/InterfaceItemBase.h"
- «FOR ai : comp.actorInstances»
- #include "«ai.actorClass.actorIncludePath»"
- «ENDFOR»
-
using namespace etRuntime;
«cc.generateNamespaceBegin»
@@ -170,9 +194,23 @@ class NodeGen {
const int «clsname»::«thread.value.threadId» = «thread.index0»;
«ENDFOR»
- «clsname»::«clsname»(IRTObject* parent, const std::string& name) :
- SubSystemClassBase(parent, name)
+ «clsname»::«clsname»(IRTObject* parent, const std::string& name)
+ «cc.generateConstructorInitalizerList»
{
+ «IF Main::settings.generateMSCInstrumentation»
+ MSCFunctionObject mscFunctionObject(getInstancePathName(), "Constructor");
+ «ENDIF»
+ «FOR sub : cc.actorRefs»
+ «IF sub.multiplicity>1»
+ «sub.name».createSubActors(«sub.multiplicity»);
+ «ENDIF»
+ «ENDFOR»
+ }
+
+ «clsname»::~«clsname»() {
+ «IF Main::settings.generateMSCInstrumentation»
+ MSCFunctionObject mscFunctionObject(getInstancePathName(), "Destructor");
+ «ENDIF»
}
void «clsname»::receiveEvent(InterfaceItemBase* ifitem, int evt, void* data){
@@ -180,6 +218,10 @@ class NodeGen {
void «clsname»::instantiateMessageServices(){
+ «IF Main::settings.generateMSCInstrumentation»
+ MSCFunctionObject mscFunctionObject(getInstancePathName(), "instantiateMessageServices()");
+ «ENDIF»
+
IMessageService* msgService;
«FOR thread: threads»
{
@@ -197,8 +239,7 @@ class NodeGen {
«ENDFOR»
}
- void «clsname»::instantiateActors(){
-
+ void «clsname»::mapThreads() {
// thread mappings
«FOR ai : comp.allContainedInstances»
«val mapped = ETMapUtil::getMappedThread(ai)»
@@ -206,34 +247,47 @@ class NodeGen {
addPathToThread("«ai.path»", «mapped.thread.threadId»);
«ENDIF»
«ENDFOR»
+ }
- // sub actors
- «FOR sub : cc.actorRefs»
- «IF sub.multiplicity>1»
- for (int i=0; i<«sub.multiplicity»; ++i) {
- «IF Main::settings.generateMSCInstrumentation»
- DebuggingService::getInstance().addMessageActorCreate(*this, "«sub.name»«GenmodelConstants::INDEX_SEP»"+i);
- «ENDIF»
- new «sub.type.implementationClassName»(this, "«sub.name»«GenmodelConstants::INDEX_SEP»"+i);
- }
- «ELSE»
- «IF Main::settings.generateMSCInstrumentation»
+ void «clsname»::initialize() {
+ «IF Main::settings.generateMSCInstrumentation»
+ DebuggingService::getInstance().getSyncLogger().addVisibleComment("starting initialization");
+ MSCFunctionObject mscFunctionObject(getInstancePathName(), "initialize()");
+ «FOR sub : cc.actorRefs»
+ «IF sub.multiplicity>1»
+ for (int i=0; i<«sub.multiplicity»; ++i) {
+ DebuggingService::getInstance().addMessageActorCreate(*this, «sub.name».getSubActor(i)->getName());
+ }
+ «ELSE»
DebuggingService::getInstance().addMessageActorCreate(*this, "«sub.name»");
«ENDIF»
- new «sub.type.implementationClassName»(this, "«sub.name»");
- «ENDIF»
- «ENDFOR»
-
+ «ENDFOR»
+ «ENDIF»
+
// wiring
«FOR wire: wired.wires»
«if (wire.dataDriven) "DataPortBase" else "InterfaceItemBase"»::connect(this, "«wire.path1.join('/')»", "«wire.path2.join('/')»");
«ENDFOR»
+
+ // call initialize of sub actors
+ «FOR sub : cc.actorRefs»
+ «sub.name».initialize();
+ «ENDFOR»
}
+
+ «IF Main::settings.generateMSCInstrumentation»
+ void «clsname»::setProbesActive(bool recursive, bool active) {
+ for(int i = 0; i < m_RTSystemPort.getNInterfaceItems(); i++)
+ DebuggingService::getInstance().addPortInstance(*(m_RTSystemPort.getInterfaceItem(i)));
+ if(recursive) {
+ «FOR sub : cc.actorRefs»
+ «sub.name».setProbesActive(recursive, active);
+ «ENDFOR»
+ }
+ }
+ «ENDIF»
void «clsname»::init(){
- «IF Main::settings.generateMSCInstrumentation»
- DebuggingService::getInstance().addVisibleComment("begin sub system initialization");
- «ENDIF»
SubSystemClassBase::init();
«IF Main::settings.generateMSCInstrumentation»
DebuggingService::getInstance().addVisibleComment("done sub system initialization");
@@ -242,9 +296,15 @@ class NodeGen {
«IF Main::settings.generateMSCInstrumentation»
void «clsname»::destroy() {
- DebuggingService::getInstance().addVisibleComment("begin sub system destruction");
+ «IF Main::settings.generateMSCInstrumentation»
+ DebuggingService::getInstance().getSyncLogger().addVisibleComment("starting destruction");
+ MSCFunctionObject mscFunctionObject(getInstancePathName(), "destroy()");
+ DebuggingService::getInstance().addVisibleComment("begin sub system destruction");
+ «ENDIF»
SubSystemClassBase::destroy();
- DebuggingService::getInstance().addVisibleComment("done sub system destruction");
+ «IF Main::settings.generateMSCInstrumentation»
+ DebuggingService::getInstance().addVisibleComment("done sub system destruction");
+ «ENDIF»
}
«ENDIF»
diff --git a/plugins/org.eclipse.etrice.generator.cpp/src/org/eclipse/etrice/generator/cpp/gen/ProtocolClassGen.xtend b/plugins/org.eclipse.etrice.generator.cpp/src/org/eclipse/etrice/generator/cpp/gen/ProtocolClassGen.xtend
index ca48d5106..b588e276e 100644
--- a/plugins/org.eclipse.etrice.generator.cpp/src/org/eclipse/etrice/generator/cpp/gen/ProtocolClassGen.xtend
+++ b/plugins/org.eclipse.etrice.generator.cpp/src/org/eclipse/etrice/generator/cpp/gen/ProtocolClassGen.xtend
@@ -62,7 +62,6 @@ class ProtocolClassGen extends GenericProtocolClassGenerator {
case CommunicationType::SYNCHRONOUS:
logger.logError("synchronous protocols not supported yet", pc)
}
-
}
}
@@ -200,6 +199,7 @@ class ProtocolClassGen extends GenericProtocolClassGenerator {
#include "«pc.getCppHeaderFileName»"
#include "common/debugging/DebuggingService.h"
+ #include "common/debugging/MSCFunctionObject.h"
#include "common/messaging/AbstractMessageReceiver.h"
#include "common/messaging/Address.h"
#include "common/messaging/Message.h"
@@ -247,18 +247,12 @@ class ProtocolClassGen extends GenericProtocolClassGenerator {
«portClassName»::«portClassName»(IInterfaceItemOwner* actor, const std::string& name, int localId)
«pclass.generateConstructorInitalizerList('0')»
{
- «IF Main::settings.generateMSCInstrumentation»
- DebuggingService::getInstance().addPortInstance(*this);
- «ENDIF»
}
«portClassName»::«portClassName»(IInterfaceItemOwner* actor, const std::string& name, int localId, int idx)
«pclass.generateConstructorInitalizerList('idx')»
{
«IF pclass != null»«initHelper.genExtraInitializers(pclass.attributes)»«ENDIF»
- «IF Main::settings.generateMSCInstrumentation»
- DebuggingService::getInstance().addPortInstance(*this);
- «ENDIF»
}
«IF Main::settings.generateMSCInstrumentation»
@@ -372,8 +366,10 @@ class ProtocolClassGen extends GenericProtocolClassGenerator {
«FOR command : hdlr.detailCode.lines» «command»
«ENDFOR»
«ELSE»
- DebuggingService::getInstance().addMessageAsyncOut(getAddress(), getPeerAddress(),
- «portClassName»::getMessageString(«portClassName»::«dir»_«m.name»));
+ «IF Main::settings.generateMSCInstrumentation»
+ DebuggingService::getInstance().addMessageAsyncOut(getAddress(), getPeerAddress(),
+ «portClassName»::getMessageString(«portClassName»::«dir»_«m.name»));
+ «ENDIF»
if (getPeerAddress().isValid()){
getPeerMsgReceiver()->receive(«message»);
}
diff --git a/plugins/org.eclipse.etrice.generator.cpp/xtend-gen/org/eclipse/etrice/generator/cpp/gen/ActorClassGen.java b/plugins/org.eclipse.etrice.generator.cpp/xtend-gen/org/eclipse/etrice/generator/cpp/gen/ActorClassGen.java
index 03811a8a1..42c4a099a 100644
--- a/plugins/org.eclipse.etrice.generator.cpp/xtend-gen/org/eclipse/etrice/generator/cpp/gen/ActorClassGen.java
+++ b/plugins/org.eclipse.etrice.generator.cpp/xtend-gen/org/eclipse/etrice/generator/cpp/gen/ActorClassGen.java
@@ -21,7 +21,6 @@ import org.eclipse.emf.common.util.EList;
import org.eclipse.etrice.core.fsm.fSM.ComponentCommunicationType;
import org.eclipse.etrice.core.fsm.fSM.DetailCode;
import org.eclipse.etrice.core.fsm.fSM.StateGraph;
-import org.eclipse.etrice.core.genmodel.builder.GenmodelConstants;
import org.eclipse.etrice.core.genmodel.etricegen.ExpandedActorClass;
import org.eclipse.etrice.core.genmodel.etricegen.Root;
import org.eclipse.etrice.core.genmodel.etricegen.Wire;
@@ -194,6 +193,8 @@ public class ActorClassGen extends GenericActorClassGenerator {
_builder.newLine();
_builder.append("#include \"common/modelbase/PortBase.h\"");
_builder.newLine();
+ _builder.append("#include \"common/modelbase/ReplicatedActorClassBase.h\"");
+ _builder.newLine();
_builder.append("#include \"common/modelbase/InterfaceItemBase.h\"");
_builder.newLine();
_builder.append("#include \"common/modelbase/SubSystemClassBase.h\"");
@@ -250,6 +251,17 @@ public class ActorClassGen extends GenericActorClassGenerator {
_builder.newLineIfNotEmpty();
}
}
+ {
+ EList<ActorRef> _actorRefs = ac.getActorRefs();
+ for(final ActorRef ar : _actorRefs) {
+ _builder.append("#include \"");
+ ActorClass _type = ar.getType();
+ String _actorIncludePath = this._cppExtensions.getActorIncludePath(_type);
+ _builder.append(_actorIncludePath, "");
+ _builder.append("\"");
+ _builder.newLineIfNotEmpty();
+ }
+ }
_builder.newLine();
DetailCode _userCode1 = ac.getUserCode1();
CharSequence _userCode = this._procedureHelpers.userCode(_userCode1);
@@ -292,6 +304,41 @@ public class ActorClassGen extends GenericActorClassGenerator {
}
_builder.newLine();
_builder.append("\t\t");
+ _builder.append("//--------------------- sub actors");
+ _builder.newLine();
+ {
+ EList<ActorRef> _actorRefs_1 = ac.getActorRefs();
+ for(final ActorRef sub : _actorRefs_1) {
+ {
+ int _multiplicity = sub.getMultiplicity();
+ boolean _greaterThan = (_multiplicity > 1);
+ if (_greaterThan) {
+ _builder.append("\t\t");
+ _builder.append("Replicated");
+ ActorClass _type_1 = sub.getType();
+ String _implementationClassName = this._cppExtensions.getImplementationClassName(_type_1);
+ _builder.append(_implementationClassName, "\t\t");
+ _builder.append(" ");
+ String _name_6 = sub.getName();
+ _builder.append(_name_6, "\t\t");
+ _builder.append(";");
+ _builder.newLineIfNotEmpty();
+ } else {
+ _builder.append("\t\t");
+ ActorClass _type_2 = sub.getType();
+ String _implementationClassName_1 = this._cppExtensions.getImplementationClassName(_type_2);
+ _builder.append(_implementationClassName_1, "\t\t");
+ _builder.append(" ");
+ String _name_7 = sub.getName();
+ _builder.append(_name_7, "\t\t");
+ _builder.append(";");
+ _builder.newLineIfNotEmpty();
+ }
+ }
+ }
+ }
+ _builder.newLine();
+ _builder.append("\t\t");
_builder.append("//--------------------- saps");
_builder.newLine();
{
@@ -301,8 +348,8 @@ public class ActorClassGen extends GenericActorClassGenerator {
String _portClassName_1 = this._roomExtensions.getPortClassName(sap);
_builder.append(_portClassName_1, "\t\t");
_builder.append(" ");
- String _name_6 = sap.getName();
- _builder.append(_name_6, "\t\t");
+ String _name_8 = sap.getName();
+ _builder.append(_name_8, "\t\t");
_builder.append(";");
_builder.newLineIfNotEmpty();
}
@@ -319,8 +366,8 @@ public class ActorClassGen extends GenericActorClassGenerator {
_builder.append(_portClassName_2, "\t\t");
_builder.append(" ");
SPP _spp = svc.getSpp();
- String _name_7 = _spp.getName();
- _builder.append(_name_7, "\t\t");
+ String _name_9 = _spp.getName();
+ _builder.append(_name_9, "\t\t");
_builder.append(";");
_builder.newLineIfNotEmpty();
}
@@ -342,8 +389,8 @@ public class ActorClassGen extends GenericActorClassGenerator {
_builder.newLine();
_builder.append("\t\t");
EList<StandardOperation> _operations = ac.getOperations();
- String _name_8 = ac.getName();
- CharSequence _operationsDeclaration = this._procedureHelpers.operationsDeclaration(_operations, _name_8);
+ String _name_10 = ac.getName();
+ CharSequence _operationsDeclaration = this._procedureHelpers.operationsDeclaration(_operations, _name_10);
_builder.append(_operationsDeclaration, "\t\t");
_builder.newLineIfNotEmpty();
_builder.newLine();
@@ -354,10 +401,22 @@ public class ActorClassGen extends GenericActorClassGenerator {
_builder.append("//--------------------- construction");
_builder.newLine();
_builder.append("\t\t");
- String _name_9 = ac.getName();
- _builder.append(_name_9, "\t\t");
+ String _name_11 = ac.getName();
+ _builder.append(_name_11, "\t\t");
_builder.append("(etRuntime::IRTObject* parent, const std::string& name);");
_builder.newLineIfNotEmpty();
+ _builder.append("\t\t");
+ _builder.append("void initialize(void);");
+ _builder.newLine();
+ {
+ GlobalGeneratorSettings _settings = Main.getSettings();
+ boolean _isGenerateMSCInstrumentation = _settings.isGenerateMSCInstrumentation();
+ if (_isGenerateMSCInstrumentation) {
+ _builder.append("\t\t");
+ _builder.append("void setProbesActive(bool recursive, bool active);");
+ _builder.newLine();
+ }
+ }
_builder.newLine();
_builder.append("\t\t");
_builder.append("//--------------------- port getters");
@@ -479,6 +538,38 @@ public class ActorClassGen extends GenericActorClassGenerator {
_builder.append("};");
_builder.newLine();
_builder.newLine();
+ _builder.append("class Replicated");
+ _builder.append(clsname, "");
+ _builder.append(" : public ReplicatedActorClassBase {");
+ _builder.newLineIfNotEmpty();
+ _builder.append("public:");
+ _builder.newLine();
+ _builder.append("\t");
+ _builder.append("Replicated");
+ _builder.append(clsname, "\t");
+ _builder.append("(IRTObject* parent, const std::string& name) :");
+ _builder.newLineIfNotEmpty();
+ _builder.append("\t\t");
+ _builder.append("ReplicatedActorClassBase(parent, name) {}");
+ _builder.newLine();
+ _builder.append("\t");
+ _builder.newLine();
+ _builder.append("protected:");
+ _builder.newLine();
+ _builder.append("\t");
+ _builder.append("ActorClassBase* createActor(IRTObject* parent, const std::string& name) {");
+ _builder.newLine();
+ _builder.append("\t\t");
+ _builder.append("return new ");
+ _builder.append(clsname, "\t\t");
+ _builder.append("(parent, name);");
+ _builder.newLineIfNotEmpty();
+ _builder.append("\t");
+ _builder.append("}");
+ _builder.newLine();
+ _builder.append("};");
+ _builder.newLine();
+ _builder.newLine();
String _generateNamespaceEnd = this._cppExtensions.generateNamespaceEnd(ac);
_builder.append(_generateNamespaceEnd, "");
_builder.newLineIfNotEmpty();
@@ -530,8 +621,23 @@ public class ActorClassGen extends GenericActorClassGenerator {
};
List<String> _map = ListExtensions.<Port, String>map(_endPorts, _function);
Iterables.<CharSequence>addAll(initList, _map);
+ EList<ActorRef> _actorRefs = ac.getActorRefs();
+ final Function1<ActorRef, String> _function_1 = new Function1<ActorRef, String>() {
+ public String apply(final ActorRef it) {
+ StringConcatenation _builder = new StringConcatenation();
+ String _name = it.getName();
+ _builder.append(_name, "");
+ _builder.append("(this, \"");
+ String _name_1 = it.getName();
+ _builder.append(_name_1, "");
+ _builder.append("\")");
+ return _builder.toString();
+ }
+ };
+ List<String> _map_1 = ListExtensions.<ActorRef, String>map(_actorRefs, _function_1);
+ Iterables.<CharSequence>addAll(initList, _map_1);
EList<SAP> _serviceAccessPoints = ac.getServiceAccessPoints();
- final Function1<SAP, String> _function_1 = new Function1<SAP, String>() {
+ final Function1<SAP, String> _function_2 = new Function1<SAP, String>() {
public String apply(final SAP it) {
StringConcatenation _builder = new StringConcatenation();
String _name = it.getName();
@@ -546,10 +652,10 @@ public class ActorClassGen extends GenericActorClassGenerator {
return _builder.toString();
}
};
- List<String> _map_1 = ListExtensions.<SAP, String>map(_serviceAccessPoints, _function_1);
- Iterables.<CharSequence>addAll(initList, _map_1);
+ List<String> _map_2 = ListExtensions.<SAP, String>map(_serviceAccessPoints, _function_2);
+ Iterables.<CharSequence>addAll(initList, _map_2);
EList<ServiceImplementation> _serviceImplementations = ac.getServiceImplementations();
- final Function1<ServiceImplementation, String> _function_2 = new Function1<ServiceImplementation, String>() {
+ final Function1<ServiceImplementation, String> _function_3 = new Function1<ServiceImplementation, String>() {
public String apply(final ServiceImplementation it) {
StringConcatenation _builder = new StringConcatenation();
SPP _spp = it.getSpp();
@@ -567,10 +673,10 @@ public class ActorClassGen extends GenericActorClassGenerator {
return _builder.toString();
}
};
- List<String> _map_2 = ListExtensions.<ServiceImplementation, String>map(_serviceImplementations, _function_2);
- Iterables.<CharSequence>addAll(initList, _map_2);
+ List<String> _map_3 = ListExtensions.<ServiceImplementation, String>map(_serviceImplementations, _function_3);
+ Iterables.<CharSequence>addAll(initList, _map_3);
EList<Attribute> _attributes = ac.getAttributes();
- final Function1<Attribute, String> _function_3 = new Function1<Attribute, String>() {
+ final Function1<Attribute, String> _function_4 = new Function1<Attribute, String>() {
public String apply(final Attribute it) {
StringConcatenation _builder = new StringConcatenation();
String _name = it.getName();
@@ -582,8 +688,8 @@ public class ActorClassGen extends GenericActorClassGenerator {
return _builder.toString();
}
};
- List<String> _map_3 = ListExtensions.<Attribute, String>map(_attributes, _function_3);
- Iterables.<CharSequence>addAll(initList, _map_3);
+ List<String> _map_4 = ListExtensions.<Attribute, String>map(_attributes, _function_4);
+ Iterables.<CharSequence>addAll(initList, _map_4);
_xblockexpression = initHelper.generateCtorInitializerList(initList);
}
return _xblockexpression;
@@ -644,18 +750,10 @@ public class ActorClassGen extends GenericActorClassGenerator {
_builder.newLine();
_builder.append("#include \"common/messaging/RTServices.h\"");
_builder.newLine();
+ _builder.append("#include \"common/debugging/DebuggingService.h\"");
+ _builder.newLine();
+ _builder.append("#include \"common/debugging/MSCFunctionObject.h\"");
_builder.newLine();
- {
- EList<ActorRef> _actorRefs = ac.getActorRefs();
- for(final ActorRef ar : _actorRefs) {
- _builder.append("#include \"");
- ActorClass _type = ar.getType();
- String _actorIncludePath = this._cppExtensions.getActorIncludePath(_type);
- _builder.append(_actorIncludePath, "");
- _builder.append("\"");
- _builder.newLineIfNotEmpty();
- }
- }
_builder.newLine();
_builder.append("using namespace etRuntime;");
_builder.newLine();
@@ -676,6 +774,17 @@ public class ActorClassGen extends GenericActorClassGenerator {
_builder.append("{");
_builder.newLine();
{
+ GlobalGeneratorSettings _settings = Main.getSettings();
+ boolean _isGenerateMSCInstrumentation = _settings.isGenerateMSCInstrumentation();
+ if (_isGenerateMSCInstrumentation) {
+ _builder.append("\t");
+ _builder.append("MSCFunctionObject mscFunctionObject(getInstancePathName(), \"Constructor\");");
+ _builder.newLine();
+ }
+ }
+ _builder.append("\t");
+ _builder.newLine();
+ {
boolean _hasNonEmptyStateMachine = this._roomHelpers.hasNonEmptyStateMachine(ac);
if (_hasNonEmptyStateMachine) {
_builder.append("\t");
@@ -701,74 +810,103 @@ public class ActorClassGen extends GenericActorClassGenerator {
_builder.append("// sub actors");
_builder.newLine();
{
- EList<ActorRef> _actorRefs_1 = ac.getActorRefs();
- for(final ActorRef sub : _actorRefs_1) {
+ EList<ActorRef> _actorRefs = ac.getActorRefs();
+ for(final ActorRef sub : _actorRefs) {
{
int _multiplicity = sub.getMultiplicity();
boolean _greaterThan = (_multiplicity > 1);
if (_greaterThan) {
_builder.append("\t");
- _builder.append("for (int i=0; i<");
+ String _name_4 = sub.getName();
+ _builder.append(_name_4, "\t");
+ _builder.append(".createSubActors(");
int _multiplicity_1 = sub.getMultiplicity();
_builder.append(_multiplicity_1, "\t");
- _builder.append("; ++i) {");
+ _builder.append(");");
_builder.newLineIfNotEmpty();
+ }
+ }
+ }
+ }
+ _builder.newLine();
+ _builder.append("\t");
+ EList<Attribute> _attributes = ac.getAttributes();
+ CharSequence _genExtraInitializers = this.initHelper.genExtraInitializers(_attributes);
+ _builder.append(_genExtraInitializers, "\t");
+ _builder.newLineIfNotEmpty();
+ _builder.append("\t");
+ String _userStructorBody = this._procedureHelpers.userStructorBody(ac, true);
+ _builder.append(_userStructorBody, "\t");
+ _builder.newLineIfNotEmpty();
+ _builder.append("}");
+ _builder.newLine();
+ _builder.newLine();
+ _builder.append("void ");
+ String _name_5 = ac.getName();
+ _builder.append(_name_5, "");
+ _builder.append("::initialize() {");
+ _builder.newLineIfNotEmpty();
+ {
+ GlobalGeneratorSettings _settings_1 = Main.getSettings();
+ boolean _isGenerateMSCInstrumentation_1 = _settings_1.isGenerateMSCInstrumentation();
+ if (_isGenerateMSCInstrumentation_1) {
+ _builder.append("\t");
+ _builder.append("MSCFunctionObject mscFunctionObject(getInstancePathName(), \"initialize()\");");
+ _builder.newLine();
+ {
+ EList<ActorRef> _actorRefs_1 = ac.getActorRefs();
+ for(final ActorRef sub_1 : _actorRefs_1) {
{
- GlobalGeneratorSettings _settings = Main.getSettings();
- boolean _isGenerateMSCInstrumentation = _settings.isGenerateMSCInstrumentation();
- if (_isGenerateMSCInstrumentation) {
+ int _multiplicity_2 = sub_1.getMultiplicity();
+ boolean _greaterThan_1 = (_multiplicity_2 > 1);
+ if (_greaterThan_1) {
_builder.append("\t");
+ _builder.append("for (int i=0; i<");
+ int _multiplicity_3 = sub_1.getMultiplicity();
+ _builder.append(_multiplicity_3, "\t");
+ _builder.append("; ++i) {");
+ _builder.newLineIfNotEmpty();
_builder.append("\t");
- _builder.append("DebuggingService::getInstance().addMessageActorCreate(*this, \"");
- String _name_4 = sub.getName();
- _builder.append(_name_4, "\t\t");
- _builder.append(GenmodelConstants.INDEX_SEP, "\t\t");
- _builder.append("\"+i);");
+ _builder.append("\t");
+ _builder.append("DebuggingService::getInstance().addMessageActorCreate(*this, ");
+ String _name_6 = sub_1.getName();
+ _builder.append(_name_6, "\t\t");
+ _builder.append(".getSubActor(i)->getName());");
_builder.newLineIfNotEmpty();
- }
- }
- _builder.append("\t");
- _builder.append("\t");
- _builder.append("new ");
- ActorClass _type_1 = sub.getType();
- String _implementationClassName = this._cppExtensions.getImplementationClassName(_type_1);
- _builder.append(_implementationClassName, "\t\t");
- _builder.append("(this, \"");
- String _name_5 = sub.getName();
- _builder.append(_name_5, "\t\t");
- _builder.append(GenmodelConstants.INDEX_SEP, "\t\t");
- _builder.append("\"+i);");
- _builder.newLineIfNotEmpty();
- _builder.append("\t");
- _builder.append("}");
- _builder.newLine();
- } else {
- {
- GlobalGeneratorSettings _settings_1 = Main.getSettings();
- boolean _isGenerateMSCInstrumentation_1 = _settings_1.isGenerateMSCInstrumentation();
- if (_isGenerateMSCInstrumentation_1) {
+ _builder.append("\t");
+ _builder.append("}");
+ _builder.newLine();
+ } else {
_builder.append("\t");
_builder.append("DebuggingService::getInstance().addMessageActorCreate(*this, \"");
- String _name_6 = sub.getName();
- _builder.append(_name_6, "\t");
+ String _name_7 = sub_1.getName();
+ _builder.append(_name_7, "\t");
_builder.append("\");");
_builder.newLineIfNotEmpty();
}
}
- _builder.append("\t");
- _builder.append("new ");
- ActorClass _type_2 = sub.getType();
- String _implementationClassName_1 = this._cppExtensions.getImplementationClassName(_type_2);
- _builder.append(_implementationClassName_1, "\t");
- _builder.append("(this, \"");
- String _name_7 = sub.getName();
- _builder.append(_name_7, "\t");
- _builder.append("\");");
- _builder.newLineIfNotEmpty();
}
}
}
}
+ _builder.append("\t");
+ _builder.newLine();
+ _builder.append("\t");
+ _builder.append("ActorClassBase::initialize();");
+ _builder.newLine();
+ _builder.append("\t");
+ _builder.newLine();
+ {
+ EList<ActorRef> _actorRefs_2 = ac.getActorRefs();
+ for(final ActorRef sub_2 : _actorRefs_2) {
+ _builder.append("\t");
+ String _name_8 = sub_2.getName();
+ _builder.append(_name_8, "\t");
+ _builder.append(".initialize();");
+ _builder.newLineIfNotEmpty();
+ }
+ }
+ _builder.append("\t");
_builder.newLine();
_builder.append("\t");
_builder.append("// wiring");
@@ -818,32 +956,139 @@ public class ActorClassGen extends GenericActorClassGenerator {
_builder.newLine();
}
}
- _builder.newLine();
- _builder.append("\t");
- EList<Attribute> _attributes = ac.getAttributes();
- CharSequence _genExtraInitializers = this.initHelper.genExtraInitializers(_attributes);
- _builder.append(_genExtraInitializers, "\t");
- _builder.newLineIfNotEmpty();
- _builder.append("\t");
- String _userStructorBody = this._procedureHelpers.userStructorBody(ac, true);
- _builder.append(_userStructorBody, "\t");
- _builder.newLineIfNotEmpty();
_builder.append("}");
_builder.newLine();
_builder.newLine();
+ {
+ GlobalGeneratorSettings _settings_2 = Main.getSettings();
+ boolean _isGenerateMSCInstrumentation_2 = _settings_2.isGenerateMSCInstrumentation();
+ if (_isGenerateMSCInstrumentation_2) {
+ _builder.append("void ");
+ String _name_9 = ac.getName();
+ _builder.append(_name_9, "");
+ _builder.append("::setProbesActive(bool recursive, bool active) {");
+ _builder.newLineIfNotEmpty();
+ _builder.append("\t");
+ _builder.append("DebuggingService::getInstance().addPortInstance(m_RTSystemPort);");
+ _builder.newLine();
+ {
+ EList<ActorRef> _actorRefs_3 = ac.getActorRefs();
+ int _size = _actorRefs_3.size();
+ boolean _greaterThan_2 = (_size > 0);
+ if (_greaterThan_2) {
+ _builder.append("\t");
+ _builder.append("if(recursive) {");
+ _builder.newLine();
+ {
+ EList<ActorRef> _actorRefs_4 = ac.getActorRefs();
+ for(final ActorRef sub_3 : _actorRefs_4) {
+ _builder.append("\t");
+ _builder.append("\t");
+ String _name_10 = sub_3.getName();
+ _builder.append(_name_10, "\t\t");
+ _builder.append(".setProbesActive(recursive, active);");
+ _builder.newLineIfNotEmpty();
+ }
+ }
+ _builder.append("\t");
+ _builder.append("}");
+ _builder.newLine();
+ }
+ }
+ {
+ List<Port> _endPorts = this._roomHelpers.getEndPorts(ac);
+ for(final Port ep : _endPorts) {
+ {
+ boolean _isDataDriven_1 = this._roomHelpers.isDataDriven(ep);
+ boolean _not = (!_isDataDriven_1);
+ if (_not) {
+ {
+ boolean _isReplicated = ep.isReplicated();
+ if (_isReplicated) {
+ _builder.append("\t");
+ _builder.append("for(int i = 0; i < ");
+ String _name_11 = ep.getName();
+ _builder.append(_name_11, "\t");
+ _builder.append(".getNInterfaceItems(); i++)");
+ _builder.newLineIfNotEmpty();
+ _builder.append("\t");
+ _builder.append("\t");
+ _builder.append("DebuggingService::getInstance().addPortInstance(*(");
+ String _name_12 = ep.getName();
+ _builder.append(_name_12, "\t\t");
+ _builder.append(".getInterfaceItem(i)));");
+ _builder.newLineIfNotEmpty();
+ } else {
+ _builder.append("\t");
+ _builder.append("DebuggingService::getInstance().addPortInstance(");
+ String _name_13 = ep.getName();
+ _builder.append(_name_13, "\t");
+ _builder.append(");");
+ _builder.newLineIfNotEmpty();
+ }
+ }
+ }
+ }
+ }
+ }
+ {
+ EList<SAP> _serviceAccessPoints = ac.getServiceAccessPoints();
+ for(final SAP sap : _serviceAccessPoints) {
+ _builder.append("\t");
+ _builder.append("DebuggingService::getInstance().addPortInstance(");
+ String _name_14 = sap.getName();
+ _builder.append(_name_14, "\t");
+ _builder.append(");");
+ _builder.newLineIfNotEmpty();
+ }
+ }
+ {
+ EList<SPP> _serviceProvisionPoints = ac.getServiceProvisionPoints();
+ for(final SPP spp : _serviceProvisionPoints) {
+ _builder.append("\t");
+ _builder.append("for(int i = 0; i < ");
+ String _name_15 = spp.getName();
+ _builder.append(_name_15, "\t");
+ _builder.append(".getNInterfaceItems(); i++)");
+ _builder.newLineIfNotEmpty();
+ _builder.append("\t");
+ _builder.append("\t\t");
+ _builder.append("DebuggingService::getInstance().addPortInstance(*(");
+ String _name_16 = spp.getName();
+ _builder.append(_name_16, "\t\t\t");
+ _builder.append(".getInterfaceItem(i)));");
+ _builder.newLineIfNotEmpty();
+ }
+ }
+ _builder.append("}");
+ _builder.newLine();
+ }
+ }
+ _builder.newLine();
_builder.append("void ");
- String _name_8 = ac.getName();
- _builder.append(_name_8, "");
+ String _name_17 = ac.getName();
+ _builder.append(_name_17, "");
_builder.append("::destroy(){");
_builder.newLineIfNotEmpty();
+ {
+ GlobalGeneratorSettings _settings_3 = Main.getSettings();
+ boolean _isGenerateMSCInstrumentation_3 = _settings_3.isGenerateMSCInstrumentation();
+ if (_isGenerateMSCInstrumentation_3) {
+ _builder.append("\t");
+ _builder.append("MSCFunctionObject mscFunctionObject(getInstancePathName(), \"destroy()\");");
+ _builder.newLine();
+ }
+ }
+ _builder.append("\t");
+ _builder.newLine();
_builder.append("\t");
String _userStructorBody_1 = this._procedureHelpers.userStructorBody(ac, false);
_builder.append(_userStructorBody_1, "\t");
_builder.newLineIfNotEmpty();
{
- GlobalGeneratorSettings _settings_2 = Main.getSettings();
- boolean _isGenerateMSCInstrumentation_2 = _settings_2.isGenerateMSCInstrumentation();
- if (_isGenerateMSCInstrumentation_2) {
+ GlobalGeneratorSettings _settings_4 = Main.getSettings();
+ boolean _isGenerateMSCInstrumentation_4 = _settings_4.isGenerateMSCInstrumentation();
+ if (_isGenerateMSCInstrumentation_4) {
_builder.append("\t");
_builder.append("DebuggingService::getInstance().addMessageActorDestroy(*this);");
_builder.newLine();
@@ -874,8 +1119,8 @@ public class ActorClassGen extends GenericActorClassGenerator {
_builder.newLine();
_builder.newLine();
EList<StandardOperation> _operations = ac.getOperations();
- String _name_9 = ac.getName();
- CharSequence _operationsImplementation = this._procedureHelpers.operationsImplementation(_operations, _name_9);
+ String _name_18 = ac.getName();
+ CharSequence _operationsImplementation = this._procedureHelpers.operationsImplementation(_operations, _name_18);
_builder.append(_operationsImplementation, "");
_builder.newLineIfNotEmpty();
_builder.newLine();
@@ -890,8 +1135,8 @@ public class ActorClassGen extends GenericActorClassGenerator {
boolean _equals_4 = Objects.equal(_commType_4, ComponentCommunicationType.DATA_DRIVEN);
if (_equals_4) {
_builder.append("void ");
- String _name_10 = ac.getName();
- _builder.append(_name_10, "");
+ String _name_19 = ac.getName();
+ _builder.append(_name_19, "");
_builder.append("::receiveEvent(InterfaceItemBase* ifitem, int evt, void* generic_data) {");
_builder.newLineIfNotEmpty();
_builder.append("\t");
@@ -914,8 +1159,8 @@ public class ActorClassGen extends GenericActorClassGenerator {
}
if (_or_2) {
_builder.append("void ");
- String _name_11 = ac.getName();
- _builder.append(_name_11, "");
+ String _name_20 = ac.getName();
+ _builder.append(_name_20, "");
_builder.append("::receive(const Message* msg) {");
_builder.newLineIfNotEmpty();
{
@@ -942,8 +1187,8 @@ public class ActorClassGen extends GenericActorClassGenerator {
_builder.append("//--------------------- no state machine");
_builder.newLine();
_builder.append("void ");
- String _name_12 = ac.getName();
- _builder.append(_name_12, "");
+ String _name_21 = ac.getName();
+ _builder.append(_name_21, "");
_builder.append("::receiveEvent(InterfaceItemBase* ifitem, int evt, void* data) {");
_builder.newLineIfNotEmpty();
_builder.append("\t");
diff --git a/plugins/org.eclipse.etrice.generator.cpp/xtend-gen/org/eclipse/etrice/generator/cpp/gen/NodeGen.java b/plugins/org.eclipse.etrice.generator.cpp/xtend-gen/org/eclipse/etrice/generator/cpp/gen/NodeGen.java
index b50a808e8..dcf3e7180 100644
--- a/plugins/org.eclipse.etrice.generator.cpp/xtend-gen/org/eclipse/etrice/generator/cpp/gen/NodeGen.java
+++ b/plugins/org.eclipse.etrice.generator.cpp/xtend-gen/org/eclipse/etrice/generator/cpp/gen/NodeGen.java
@@ -14,6 +14,7 @@ import com.google.common.base.Objects;
import com.google.common.collect.Iterables;
import com.google.inject.Inject;
import com.google.inject.Singleton;
+import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Map;
@@ -26,7 +27,6 @@ import org.eclipse.etrice.core.etphys.eTPhys.NodeClass;
import org.eclipse.etrice.core.etphys.eTPhys.NodeRef;
import org.eclipse.etrice.core.etphys.eTPhys.PhysicalThread;
import org.eclipse.etrice.core.fsm.fSM.DetailCode;
-import org.eclipse.etrice.core.genmodel.builder.GenmodelConstants;
import org.eclipse.etrice.core.genmodel.etricegen.ActorInstance;
import org.eclipse.etrice.core.genmodel.etricegen.Root;
import org.eclipse.etrice.core.genmodel.etricegen.StructureInstance;
@@ -34,7 +34,6 @@ import org.eclipse.etrice.core.genmodel.etricegen.SubSystemInstance;
import org.eclipse.etrice.core.genmodel.etricegen.Wire;
import org.eclipse.etrice.core.genmodel.etricegen.WiredStructureClass;
import org.eclipse.etrice.core.genmodel.etricegen.WiredSubSystemClass;
-import org.eclipse.etrice.core.genmodel.fsm.fsmgen.IDiagnostician;
import org.eclipse.etrice.core.room.ActorClass;
import org.eclipse.etrice.core.room.ActorRef;
import org.eclipse.etrice.core.room.RoomModel;
@@ -42,6 +41,7 @@ import org.eclipse.etrice.core.room.SubSystemClass;
import org.eclipse.etrice.generator.base.GlobalGeneratorSettings;
import org.eclipse.etrice.generator.cpp.Main;
import org.eclipse.etrice.generator.cpp.gen.CppExtensions;
+import org.eclipse.etrice.generator.cpp.gen.Initialization;
import org.eclipse.etrice.generator.fsm.base.FileSystemHelpers;
import org.eclipse.etrice.generator.fsm.base.IGeneratorFileIo;
import org.eclipse.etrice.generator.fsm.base.Indexed;
@@ -52,6 +52,7 @@ import org.eclipse.xtext.xbase.lib.CollectionLiterals;
import org.eclipse.xtext.xbase.lib.Extension;
import org.eclipse.xtext.xbase.lib.Functions.Function1;
import org.eclipse.xtext.xbase.lib.IterableExtensions;
+import org.eclipse.xtext.xbase.lib.ListExtensions;
import org.eclipse.xtext.xbase.lib.Procedures.Procedure1;
@Singleton
@@ -77,7 +78,7 @@ public class NodeGen {
private IGeneratorFileIo fileIO;
@Inject
- private IDiagnostician diagnostician;
+ private Initialization initHelper;
public void doGenerate(final Root root) {
final Map<SubSystemClass, WiredSubSystemClass> sscc2wired = CollectionLiterals.<SubSystemClass, WiredSubSystemClass>newHashMap();
@@ -173,6 +174,17 @@ public class NodeGen {
_builder.newLine();
_builder.append("#include \"common/modelbase/SubSystemClassBase.h\"");
_builder.newLine();
+ {
+ EList<ActorInstance> _actorInstances = comp.getActorInstances();
+ for(final ActorInstance ai : _actorInstances) {
+ _builder.append("#include \"");
+ ActorClass _actorClass = ai.getActorClass();
+ String _actorIncludePath = this._cppExtensions.getActorIncludePath(_actorClass);
+ _builder.append(_actorIncludePath, "");
+ _builder.append("\"");
+ _builder.newLineIfNotEmpty();
+ }
+ }
_builder.newLine();
DetailCode _userCode1 = cc.getUserCode1();
CharSequence _userCode = this._procedureHelpers.userCode(_userCode1);
@@ -212,9 +224,49 @@ public class NodeGen {
}
_builder.newLine();
_builder.append("\t\t");
+ _builder.append("// sub actors");
+ _builder.newLine();
+ {
+ EList<ActorRef> _actorRefs = cc.getActorRefs();
+ for(final ActorRef sub : _actorRefs) {
+ {
+ int _multiplicity = sub.getMultiplicity();
+ boolean _greaterThan = (_multiplicity > 1);
+ if (_greaterThan) {
+ _builder.append("\t\t");
+ _builder.append("Replicated");
+ ActorClass _type_1 = sub.getType();
+ String _implementationClassName = this._cppExtensions.getImplementationClassName(_type_1);
+ _builder.append(_implementationClassName, "\t\t");
+ _builder.append(" ");
+ String _name = sub.getName();
+ _builder.append(_name, "\t\t");
+ _builder.append(";");
+ _builder.newLineIfNotEmpty();
+ } else {
+ _builder.append("\t\t");
+ ActorClass _type_2 = sub.getType();
+ String _implementationClassName_1 = this._cppExtensions.getImplementationClassName(_type_2);
+ _builder.append(_implementationClassName_1, "\t\t");
+ _builder.append(" ");
+ String _name_1 = sub.getName();
+ _builder.append(_name_1, "\t\t");
+ _builder.append(";");
+ _builder.newLineIfNotEmpty();
+ }
+ }
+ }
+ }
+ _builder.newLine();
+ _builder.append("\t\t");
_builder.append(clsname, "\t\t");
_builder.append("(IRTObject* parent, const std::string& name);");
_builder.newLineIfNotEmpty();
+ _builder.append("\t\t");
+ _builder.append("~");
+ _builder.append(clsname, "\t\t");
+ _builder.append("();");
+ _builder.newLineIfNotEmpty();
_builder.newLine();
_builder.append("\t\t");
_builder.append("virtual void receiveEvent(etRuntime::InterfaceItemBase* ifitem, int evt, void* data);");
@@ -223,18 +275,30 @@ public class NodeGen {
_builder.append("virtual void instantiateMessageServices();");
_builder.newLine();
_builder.append("\t\t");
- _builder.append("virtual void instantiateActors();");
- _builder.newLine();
+ _builder.append("virtual void mapThreads(void);");
_builder.newLine();
_builder.append("\t\t");
- _builder.append("virtual void init();");
- _builder.newLine();
+ _builder.append("virtual void initialize(void);");
_builder.newLine();
{
GlobalGeneratorSettings _settings = Main.getSettings();
boolean _isGenerateMSCInstrumentation = _settings.isGenerateMSCInstrumentation();
if (_isGenerateMSCInstrumentation) {
_builder.append("\t\t");
+ _builder.append("virtual void setProbesActive(bool recursive, bool active);");
+ _builder.newLine();
+ }
+ }
+ _builder.newLine();
+ _builder.append("\t\t");
+ _builder.append("virtual void init();");
+ _builder.newLine();
+ _builder.newLine();
+ {
+ GlobalGeneratorSettings _settings_1 = Main.getSettings();
+ boolean _isGenerateMSCInstrumentation_1 = _settings_1.isGenerateMSCInstrumentation();
+ if (_isGenerateMSCInstrumentation_1) {
+ _builder.append("\t\t");
_builder.append("etBool hasGeneratedMSCInstrumentation() const { return true; }");
_builder.newLine();
_builder.append("\t\t");
@@ -284,6 +348,35 @@ public class NodeGen {
return ("THREAD_" + _upperCase);
}
+ private CharSequence generateConstructorInitalizerList(final SubSystemClass cc) {
+ CharSequence _xblockexpression = null;
+ {
+ @Extension
+ final Initialization initHelper = this.initHelper;
+ ArrayList<CharSequence> initList = CollectionLiterals.<CharSequence>newArrayList();
+ StringConcatenation _builder = new StringConcatenation();
+ _builder.append("SubSystemClassBase(parent, name)");
+ initList.add(_builder.toString());
+ EList<ActorRef> _actorRefs = cc.getActorRefs();
+ final Function1<ActorRef, String> _function = new Function1<ActorRef, String>() {
+ public String apply(final ActorRef it) {
+ StringConcatenation _builder = new StringConcatenation();
+ String _name = it.getName();
+ _builder.append(_name, "");
+ _builder.append("(this, \"");
+ String _name_1 = it.getName();
+ _builder.append(_name_1, "");
+ _builder.append("\")");
+ return _builder.toString();
+ }
+ };
+ List<String> _map = ListExtensions.<ActorRef, String>map(_actorRefs, _function);
+ Iterables.<CharSequence>addAll(initList, _map);
+ _xblockexpression = initHelper.generateCtorInitializerList(initList);
+ }
+ return _xblockexpression;
+ }
+
public CharSequence generateSourceFile(final Root root, final SubSystemInstance comp, final WiredSubSystemClass wired, final Collection<PhysicalThread> usedThreads) {
CharSequence _xblockexpression = null;
{
@@ -327,6 +420,8 @@ public class NodeGen {
_builder.newLine();
_builder.append("#include \"common/debugging/DebuggingService.h\"");
_builder.newLine();
+ _builder.append("#include \"common/debugging/MSCFunctionObject.h\"");
+ _builder.newLine();
_builder.append("#include \"common/messaging/IMessageService.h\"");
_builder.newLine();
_builder.append("#include \"common/messaging/MessageService.h\"");
@@ -338,18 +433,6 @@ public class NodeGen {
_builder.append("#include \"common/modelbase/InterfaceItemBase.h\"");
_builder.newLine();
_builder.newLine();
- {
- EList<ActorInstance> _actorInstances = comp.getActorInstances();
- for(final ActorInstance ai : _actorInstances) {
- _builder.append("#include \"");
- ActorClass _actorClass = ai.getActorClass();
- String _actorIncludePath = this._cppExtensions.getActorIncludePath(_actorClass);
- _builder.append(_actorIncludePath, "");
- _builder.append("\"");
- _builder.newLineIfNotEmpty();
- }
- }
- _builder.newLine();
_builder.append("using namespace etRuntime;");
_builder.newLine();
_builder.newLine();
@@ -377,13 +460,59 @@ public class NodeGen {
_builder.append(clsname, "");
_builder.append("::");
_builder.append(clsname, "");
- _builder.append("(IRTObject* parent, const std::string& name) :");
+ _builder.append("(IRTObject* parent, const std::string& name)");
_builder.newLineIfNotEmpty();
_builder.append("\t\t");
- _builder.append("SubSystemClassBase(parent, name)");
- _builder.newLine();
+ CharSequence _generateConstructorInitalizerList = this.generateConstructorInitalizerList(cc);
+ _builder.append(_generateConstructorInitalizerList, "\t\t");
+ _builder.newLineIfNotEmpty();
_builder.append("{");
_builder.newLine();
+ {
+ GlobalGeneratorSettings _settings = Main.getSettings();
+ boolean _isGenerateMSCInstrumentation = _settings.isGenerateMSCInstrumentation();
+ if (_isGenerateMSCInstrumentation) {
+ _builder.append("\t");
+ _builder.append("MSCFunctionObject mscFunctionObject(getInstancePathName(), \"Constructor\");");
+ _builder.newLine();
+ }
+ }
+ {
+ EList<ActorRef> _actorRefs = cc.getActorRefs();
+ for(final ActorRef sub : _actorRefs) {
+ {
+ int _multiplicity = sub.getMultiplicity();
+ boolean _greaterThan = (_multiplicity > 1);
+ if (_greaterThan) {
+ _builder.append("\t");
+ String _name = sub.getName();
+ _builder.append(_name, "\t");
+ _builder.append(".createSubActors(");
+ int _multiplicity_1 = sub.getMultiplicity();
+ _builder.append(_multiplicity_1, "\t");
+ _builder.append(");");
+ _builder.newLineIfNotEmpty();
+ }
+ }
+ }
+ }
+ _builder.append("}");
+ _builder.newLine();
+ _builder.newLine();
+ _builder.append(clsname, "");
+ _builder.append("::~");
+ _builder.append(clsname, "");
+ _builder.append("() {");
+ _builder.newLineIfNotEmpty();
+ {
+ GlobalGeneratorSettings _settings_1 = Main.getSettings();
+ boolean _isGenerateMSCInstrumentation_1 = _settings_1.isGenerateMSCInstrumentation();
+ if (_isGenerateMSCInstrumentation_1) {
+ _builder.append("\t");
+ _builder.append("MSCFunctionObject mscFunctionObject(getInstancePathName(), \"Destructor\");");
+ _builder.newLine();
+ }
+ }
_builder.append("}");
_builder.newLine();
_builder.newLine();
@@ -399,6 +528,16 @@ public class NodeGen {
_builder.append("::instantiateMessageServices(){");
_builder.newLineIfNotEmpty();
_builder.newLine();
+ {
+ GlobalGeneratorSettings _settings_2 = Main.getSettings();
+ boolean _isGenerateMSCInstrumentation_2 = _settings_2.isGenerateMSCInstrumentation();
+ if (_isGenerateMSCInstrumentation_2) {
+ _builder.append("\t");
+ _builder.append("MSCFunctionObject mscFunctionObject(getInstancePathName(), \"instantiateMessageServices()\");");
+ _builder.newLine();
+ }
+ }
+ _builder.newLine();
_builder.append("\t");
_builder.append("IMessageService* msgService;");
_builder.newLine();
@@ -444,14 +583,14 @@ public class NodeGen {
_builder.append("\t");
_builder.append("msgService = new MessageService(this, IMessageService::");
ExecMode _execmode_2 = thread_1.getExecmode();
- String _name = _execmode_2.getName();
- _builder.append(_name, "\t\t");
+ String _name_1 = _execmode_2.getName();
+ _builder.append(_name_1, "\t\t");
_builder.append(", interval, 0, ");
String _threadId_1 = this.getThreadId(thread_1);
_builder.append(_threadId_1, "\t\t");
_builder.append(", \"MessageService_");
- String _name_1 = thread_1.getName();
- _builder.append(_name_1, "\t\t");
+ String _name_2 = thread_1.getName();
+ _builder.append(_name_2, "\t\t");
_builder.append("\", ");
long _prio = thread_1.getPrio();
_builder.append(_prio, "\t\t");
@@ -462,14 +601,14 @@ public class NodeGen {
_builder.append("\t");
_builder.append("msgService = new MessageService(this, IMessageService::");
ExecMode _execmode_3 = thread_1.getExecmode();
- String _name_2 = _execmode_3.getName();
- _builder.append(_name_2, "\t\t");
+ String _name_3 = _execmode_3.getName();
+ _builder.append(_name_3, "\t\t");
_builder.append(", 0, ");
String _threadId_2 = this.getThreadId(thread_1);
_builder.append(_threadId_2, "\t\t");
_builder.append(", \"MessageService_");
- String _name_3 = thread_1.getName();
- _builder.append(_name_3, "\t\t");
+ String _name_4 = thread_1.getName();
+ _builder.append(_name_4, "\t\t");
_builder.append("\", ");
long _prio_1 = thread_1.getPrio();
_builder.append(_prio_1, "\t\t");
@@ -491,17 +630,16 @@ public class NodeGen {
_builder.newLine();
_builder.append("void ");
_builder.append(clsname, "");
- _builder.append("::instantiateActors(){");
+ _builder.append("::mapThreads() {");
_builder.newLineIfNotEmpty();
- _builder.newLine();
_builder.append("\t");
_builder.append("// thread mappings");
_builder.newLine();
{
EList<ActorInstance> _allContainedInstances = comp.getAllContainedInstances();
- for(final ActorInstance ai_1 : _allContainedInstances) {
+ for(final ActorInstance ai : _allContainedInstances) {
_builder.append("\t");
- final ETMapUtil.MappedThread mapped = ETMapUtil.getMappedThread(ai_1);
+ final ETMapUtil.MappedThread mapped = ETMapUtil.getMappedThread(ai);
_builder.newLineIfNotEmpty();
{
boolean _or_1 = false;
@@ -516,7 +654,7 @@ public class NodeGen {
if (_not) {
_builder.append("\t");
_builder.append("addPathToThread(\"");
- String _path = ai_1.getPath();
+ String _path = ai.getPath();
_builder.append(_path, "\t");
_builder.append("\", ");
PhysicalThread _thread = mapped.getThread();
@@ -528,79 +666,60 @@ public class NodeGen {
}
}
}
+ _builder.append("}");
_builder.newLine();
- _builder.append("\t");
- _builder.append("// sub actors");
_builder.newLine();
+ _builder.append("void ");
+ _builder.append(clsname, "");
+ _builder.append("::initialize() {");
+ _builder.newLineIfNotEmpty();
{
- EList<ActorRef> _actorRefs = cc.getActorRefs();
- for(final ActorRef sub : _actorRefs) {
+ GlobalGeneratorSettings _settings_3 = Main.getSettings();
+ boolean _isGenerateMSCInstrumentation_3 = _settings_3.isGenerateMSCInstrumentation();
+ if (_isGenerateMSCInstrumentation_3) {
+ _builder.append("\t");
+ _builder.append("DebuggingService::getInstance().getSyncLogger().addVisibleComment(\"starting initialization\");");
+ _builder.newLine();
+ _builder.append("\t");
+ _builder.append("MSCFunctionObject mscFunctionObject(getInstancePathName(), \"initialize()\");");
+ _builder.newLine();
{
- int _multiplicity = sub.getMultiplicity();
- boolean _greaterThan = (_multiplicity > 1);
- if (_greaterThan) {
- _builder.append("\t");
- _builder.append("for (int i=0; i<");
- int _multiplicity_1 = sub.getMultiplicity();
- _builder.append(_multiplicity_1, "\t");
- _builder.append("; ++i) {");
- _builder.newLineIfNotEmpty();
+ EList<ActorRef> _actorRefs_1 = cc.getActorRefs();
+ for(final ActorRef sub_1 : _actorRefs_1) {
{
- GlobalGeneratorSettings _settings = Main.getSettings();
- boolean _isGenerateMSCInstrumentation = _settings.isGenerateMSCInstrumentation();
- if (_isGenerateMSCInstrumentation) {
+ int _multiplicity_2 = sub_1.getMultiplicity();
+ boolean _greaterThan_1 = (_multiplicity_2 > 1);
+ if (_greaterThan_1) {
+ _builder.append("\t");
+ _builder.append("for (int i=0; i<");
+ int _multiplicity_3 = sub_1.getMultiplicity();
+ _builder.append(_multiplicity_3, "\t");
+ _builder.append("; ++i) {");
+ _builder.newLineIfNotEmpty();
_builder.append("\t");
_builder.append("\t");
- _builder.append("DebuggingService::getInstance().addMessageActorCreate(*this, \"");
- String _name_4 = sub.getName();
- _builder.append(_name_4, "\t\t");
- _builder.append(GenmodelConstants.INDEX_SEP, "\t\t");
- _builder.append("\"+i);");
+ _builder.append("DebuggingService::getInstance().addMessageActorCreate(*this, ");
+ String _name_5 = sub_1.getName();
+ _builder.append(_name_5, "\t\t");
+ _builder.append(".getSubActor(i)->getName());");
_builder.newLineIfNotEmpty();
- }
- }
- _builder.append("\t");
- _builder.append("\t");
- _builder.append("new ");
- ActorClass _type_1 = sub.getType();
- String _implementationClassName = this._cppExtensions.getImplementationClassName(_type_1);
- _builder.append(_implementationClassName, "\t\t");
- _builder.append("(this, \"");
- String _name_5 = sub.getName();
- _builder.append(_name_5, "\t\t");
- _builder.append(GenmodelConstants.INDEX_SEP, "\t\t");
- _builder.append("\"+i);");
- _builder.newLineIfNotEmpty();
- _builder.append("\t");
- _builder.append("}");
- _builder.newLine();
- } else {
- {
- GlobalGeneratorSettings _settings_1 = Main.getSettings();
- boolean _isGenerateMSCInstrumentation_1 = _settings_1.isGenerateMSCInstrumentation();
- if (_isGenerateMSCInstrumentation_1) {
+ _builder.append("\t");
+ _builder.append("}");
+ _builder.newLine();
+ } else {
_builder.append("\t");
_builder.append("DebuggingService::getInstance().addMessageActorCreate(*this, \"");
- String _name_6 = sub.getName();
+ String _name_6 = sub_1.getName();
_builder.append(_name_6, "\t");
_builder.append("\");");
_builder.newLineIfNotEmpty();
}
}
- _builder.append("\t");
- _builder.append("new ");
- ActorClass _type_2 = sub.getType();
- String _implementationClassName_1 = this._cppExtensions.getImplementationClassName(_type_2);
- _builder.append(_implementationClassName_1, "\t");
- _builder.append("(this, \"");
- String _name_7 = sub.getName();
- _builder.append(_name_7, "\t");
- _builder.append("\");");
- _builder.newLineIfNotEmpty();
}
}
}
}
+ _builder.append("\t");
_builder.newLine();
_builder.append("\t");
_builder.append("// wiring");
@@ -629,29 +748,70 @@ public class NodeGen {
_builder.newLineIfNotEmpty();
}
}
+ _builder.append("\t");
+ _builder.newLine();
+ _builder.append("\t");
+ _builder.append("// call initialize of sub actors");
+ _builder.newLine();
+ {
+ EList<ActorRef> _actorRefs_2 = cc.getActorRefs();
+ for(final ActorRef sub_2 : _actorRefs_2) {
+ _builder.append("\t");
+ String _name_7 = sub_2.getName();
+ _builder.append(_name_7, "\t");
+ _builder.append(".initialize();");
+ _builder.newLineIfNotEmpty();
+ }
+ }
_builder.append("}");
_builder.newLine();
_builder.newLine();
- _builder.append("void ");
- _builder.append(clsname, "");
- _builder.append("::init(){");
- _builder.newLineIfNotEmpty();
{
- GlobalGeneratorSettings _settings_2 = Main.getSettings();
- boolean _isGenerateMSCInstrumentation_2 = _settings_2.isGenerateMSCInstrumentation();
- if (_isGenerateMSCInstrumentation_2) {
+ GlobalGeneratorSettings _settings_4 = Main.getSettings();
+ boolean _isGenerateMSCInstrumentation_4 = _settings_4.isGenerateMSCInstrumentation();
+ if (_isGenerateMSCInstrumentation_4) {
+ _builder.append("void ");
+ _builder.append(clsname, "");
+ _builder.append("::setProbesActive(bool recursive, bool active) {");
+ _builder.newLineIfNotEmpty();
+ _builder.append("\t");
+ _builder.append("for(int i = 0; i < m_RTSystemPort.getNInterfaceItems(); i++)");
+ _builder.newLine();
+ _builder.append("\t\t");
+ _builder.append("DebuggingService::getInstance().addPortInstance(*(m_RTSystemPort.getInterfaceItem(i)));");
+ _builder.newLine();
_builder.append("\t");
- _builder.append("DebuggingService::getInstance().addVisibleComment(\"begin sub system initialization\");");
+ _builder.append("if(recursive) {");
+ _builder.newLine();
+ {
+ EList<ActorRef> _actorRefs_3 = cc.getActorRefs();
+ for(final ActorRef sub_3 : _actorRefs_3) {
+ _builder.append("\t\t");
+ String _name_8 = sub_3.getName();
+ _builder.append(_name_8, "\t\t");
+ _builder.append(".setProbesActive(recursive, active);");
+ _builder.newLineIfNotEmpty();
+ }
+ }
+ _builder.append("\t");
+ _builder.append("}");
+ _builder.newLine();
+ _builder.append("}");
_builder.newLine();
}
}
+ _builder.newLine();
+ _builder.append("void ");
+ _builder.append(clsname, "");
+ _builder.append("::init(){");
+ _builder.newLineIfNotEmpty();
_builder.append("\t");
_builder.append("SubSystemClassBase::init();");
_builder.newLine();
{
- GlobalGeneratorSettings _settings_3 = Main.getSettings();
- boolean _isGenerateMSCInstrumentation_3 = _settings_3.isGenerateMSCInstrumentation();
- if (_isGenerateMSCInstrumentation_3) {
+ GlobalGeneratorSettings _settings_5 = Main.getSettings();
+ boolean _isGenerateMSCInstrumentation_5 = _settings_5.isGenerateMSCInstrumentation();
+ if (_isGenerateMSCInstrumentation_5) {
_builder.append("\t");
_builder.append("DebuggingService::getInstance().addVisibleComment(\"done sub system initialization\");");
_builder.newLine();
@@ -660,23 +820,41 @@ public class NodeGen {
_builder.append("}");
_builder.newLine();
{
- GlobalGeneratorSettings _settings_4 = Main.getSettings();
- boolean _isGenerateMSCInstrumentation_4 = _settings_4.isGenerateMSCInstrumentation();
- if (_isGenerateMSCInstrumentation_4) {
+ GlobalGeneratorSettings _settings_6 = Main.getSettings();
+ boolean _isGenerateMSCInstrumentation_6 = _settings_6.isGenerateMSCInstrumentation();
+ if (_isGenerateMSCInstrumentation_6) {
_builder.newLine();
_builder.append("void ");
_builder.append(clsname, "");
_builder.append("::destroy() {");
_builder.newLineIfNotEmpty();
- _builder.append("\t");
- _builder.append("DebuggingService::getInstance().addVisibleComment(\"begin sub system destruction\");");
- _builder.newLine();
+ {
+ GlobalGeneratorSettings _settings_7 = Main.getSettings();
+ boolean _isGenerateMSCInstrumentation_7 = _settings_7.isGenerateMSCInstrumentation();
+ if (_isGenerateMSCInstrumentation_7) {
+ _builder.append("\t");
+ _builder.append("DebuggingService::getInstance().getSyncLogger().addVisibleComment(\"starting destruction\");");
+ _builder.newLine();
+ _builder.append("\t");
+ _builder.append("MSCFunctionObject mscFunctionObject(getInstancePathName(), \"destroy()\");");
+ _builder.newLine();
+ _builder.append("\t");
+ _builder.append("DebuggingService::getInstance().addVisibleComment(\"begin sub system destruction\");");
+ _builder.newLine();
+ }
+ }
_builder.append("\t");
_builder.append("SubSystemClassBase::destroy();");
_builder.newLine();
- _builder.append("\t");
- _builder.append("DebuggingService::getInstance().addVisibleComment(\"done sub system destruction\");");
- _builder.newLine();
+ {
+ GlobalGeneratorSettings _settings_8 = Main.getSettings();
+ boolean _isGenerateMSCInstrumentation_8 = _settings_8.isGenerateMSCInstrumentation();
+ if (_isGenerateMSCInstrumentation_8) {
+ _builder.append("\t");
+ _builder.append("DebuggingService::getInstance().addVisibleComment(\"done sub system destruction\");");
+ _builder.newLine();
+ }
+ }
_builder.append("}");
_builder.newLine();
}
diff --git a/plugins/org.eclipse.etrice.generator.cpp/xtend-gen/org/eclipse/etrice/generator/cpp/gen/ProtocolClassGen.java b/plugins/org.eclipse.etrice.generator.cpp/xtend-gen/org/eclipse/etrice/generator/cpp/gen/ProtocolClassGen.java
index 74878fd49..66fc7250f 100644
--- a/plugins/org.eclipse.etrice.generator.cpp/xtend-gen/org/eclipse/etrice/generator/cpp/gen/ProtocolClassGen.java
+++ b/plugins/org.eclipse.etrice.generator.cpp/xtend-gen/org/eclipse/etrice/generator/cpp/gen/ProtocolClassGen.java
@@ -512,6 +512,8 @@ public class ProtocolClassGen extends GenericProtocolClassGenerator {
_builder.newLine();
_builder.append("#include \"common/debugging/DebuggingService.h\"");
_builder.newLine();
+ _builder.append("#include \"common/debugging/MSCFunctionObject.h\"");
+ _builder.newLine();
_builder.append("#include \"common/messaging/AbstractMessageReceiver.h\"");
_builder.newLine();
_builder.append("#include \"common/messaging/Address.h\"");
@@ -638,15 +640,6 @@ public class ProtocolClassGen extends GenericProtocolClassGenerator {
_builder.newLineIfNotEmpty();
_builder.append("{");
_builder.newLine();
- {
- GlobalGeneratorSettings _settings = Main.getSettings();
- boolean _isGenerateMSCInstrumentation = _settings.isGenerateMSCInstrumentation();
- if (_isGenerateMSCInstrumentation) {
- _builder.append("\t");
- _builder.append("DebuggingService::getInstance().addPortInstance(*this);");
- _builder.newLine();
- }
- }
_builder.append("}");
_builder.newLine();
_builder.newLine();
@@ -671,21 +664,12 @@ public class ProtocolClassGen extends GenericProtocolClassGenerator {
}
}
_builder.newLineIfNotEmpty();
- {
- GlobalGeneratorSettings _settings_1 = Main.getSettings();
- boolean _isGenerateMSCInstrumentation_1 = _settings_1.isGenerateMSCInstrumentation();
- if (_isGenerateMSCInstrumentation_1) {
- _builder.append("\t");
- _builder.append("DebuggingService::getInstance().addPortInstance(*this);");
- _builder.newLine();
- }
- }
_builder.append("}");
_builder.newLine();
{
- GlobalGeneratorSettings _settings_2 = Main.getSettings();
- boolean _isGenerateMSCInstrumentation_2 = _settings_2.isGenerateMSCInstrumentation();
- if (_isGenerateMSCInstrumentation_2) {
+ GlobalGeneratorSettings _settings = Main.getSettings();
+ boolean _isGenerateMSCInstrumentation = _settings.isGenerateMSCInstrumentation();
+ if (_isGenerateMSCInstrumentation) {
_builder.newLine();
_builder.append("void ");
_builder.append(portClassName, "");
@@ -731,9 +715,9 @@ public class ProtocolClassGen extends GenericProtocolClassGenerator {
_builder.newLine();
_builder.newLine();
{
- GlobalGeneratorSettings _settings_3 = Main.getSettings();
- boolean _isGenerateMSCInstrumentation_3 = _settings_3.isGenerateMSCInstrumentation();
- if (_isGenerateMSCInstrumentation_3) {
+ GlobalGeneratorSettings _settings_1 = Main.getSettings();
+ boolean _isGenerateMSCInstrumentation_1 = _settings_1.isGenerateMSCInstrumentation();
+ if (_isGenerateMSCInstrumentation_1) {
_builder.append("\t");
_builder.append("DebuggingService::getInstance().addMessageAsyncIn(getPeerAddress(), getAddress(), ");
String _name_1 = pc.getName();
@@ -1115,21 +1099,27 @@ public class ProtocolClassGen extends GenericProtocolClassGenerator {
}
}
} else {
- _builder_2.append("\t");
- _builder_2.append("DebuggingService::getInstance().addMessageAsyncOut(getAddress(), getPeerAddress(),");
- _builder_2.newLine();
- _builder_2.append("\t");
- _builder_2.append("\t");
- _builder_2.append(portClassName, "\t\t");
- _builder_2.append("::getMessageString(");
- _builder_2.append(portClassName, "\t\t");
- _builder_2.append("::");
- _builder_2.append(dir, "\t\t");
- _builder_2.append("_");
- String _name_3 = m.getName();
- _builder_2.append(_name_3, "\t\t");
- _builder_2.append("));");
- _builder_2.newLineIfNotEmpty();
+ {
+ GlobalGeneratorSettings _settings = Main.getSettings();
+ boolean _isGenerateMSCInstrumentation = _settings.isGenerateMSCInstrumentation();
+ if (_isGenerateMSCInstrumentation) {
+ _builder_2.append("\t");
+ _builder_2.append("DebuggingService::getInstance().addMessageAsyncOut(getAddress(), getPeerAddress(),");
+ _builder_2.newLine();
+ _builder_2.append("\t");
+ _builder_2.append("\t");
+ _builder_2.append(portClassName, "\t\t");
+ _builder_2.append("::getMessageString(");
+ _builder_2.append(portClassName, "\t\t");
+ _builder_2.append("::");
+ _builder_2.append(dir, "\t\t");
+ _builder_2.append("_");
+ String _name_3 = m.getName();
+ _builder_2.append(_name_3, "\t\t");
+ _builder_2.append("));");
+ _builder_2.newLineIfNotEmpty();
+ }
+ }
_builder_2.append("\t");
_builder_2.append("if (getPeerAddress().isValid()){");
_builder_2.newLine();
diff --git a/runtime/org.eclipse.etrice.runtime.cpp/src-gen/common/modelbase/RTSystemServicesProtocol.cpp b/runtime/org.eclipse.etrice.runtime.cpp/src-gen/common/modelbase/RTSystemServicesProtocol.cpp
index 55276e76f..0f201c20f 100644
--- a/runtime/org.eclipse.etrice.runtime.cpp/src-gen/common/modelbase/RTSystemServicesProtocol.cpp
+++ b/runtime/org.eclipse.etrice.runtime.cpp/src-gen/common/modelbase/RTSystemServicesProtocol.cpp
@@ -7,14 +7,13 @@
#include "RTSystemServicesProtocol.h"
-#include <common/debugging/DebuggingService.h>
-#include <common/messaging/AbstractMessageReceiver.h>
-#include <common/messaging/Address.h>
-#include <common/messaging/Message.h>
-#include <common/modelbase/IEventReceiver.h>
-#include <iostream>
+#include "common/debugging/DebuggingService.h"
+#include "common/debugging/MSCFunctionObject.h"
+#include "common/messaging/AbstractMessageReceiver.h"
+#include "common/messaging/Address.h"
+#include "common/messaging/Message.h"
+#include "common/modelbase/IEventReceiver.h"
#include <iterator>
-#include <string>
#include <vector>
using namespace etRuntime;
@@ -38,16 +37,14 @@ const std::string& RTSystemServicesProtocol::getMessageString(int msg_id) {
// port class
//------------------------------------------------------------------------------------------------------------
-RTSystemServicesProtocolPort::RTSystemServicesProtocolPort(IInterfaceItemOwner* actor, const std::string& name, int localId) :
- PortBase(actor, name, localId, 0)
+RTSystemServicesProtocolPort::RTSystemServicesProtocolPort(IInterfaceItemOwner* actor, const std::string& name, int localId)
+ : PortBase(actor, name, localId, 0)
{
- DebuggingService::getInstance().addPortInstance(*this);
}
-RTSystemServicesProtocolPort::RTSystemServicesProtocolPort(IInterfaceItemOwner* actor, const std::string& name, int localId, int idx) :
- PortBase(actor, name, localId, idx)
+RTSystemServicesProtocolPort::RTSystemServicesProtocolPort(IInterfaceItemOwner* actor, const std::string& name, int localId, int idx)
+ : PortBase(actor, name, localId, idx)
{
- DebuggingService::getInstance().addPortInstance(*this);
}
void RTSystemServicesProtocolPort::destroy() {
@@ -82,16 +79,14 @@ RTSystemServicesProtocolReplPort::RTSystemServicesProtocolReplPort(IInterfaceIte
// conjugated port class
//------------------------------------------------------------------------------------------------------------
-RTSystemServicesProtocolConjPort::RTSystemServicesProtocolConjPort(IInterfaceItemOwner* actor, const std::string& name, int localId) :
- PortBase(actor, name, localId, 0)
+RTSystemServicesProtocolConjPort::RTSystemServicesProtocolConjPort(IInterfaceItemOwner* actor, const std::string& name, int localId)
+ : PortBase(actor, name, localId, 0)
{
- DebuggingService::getInstance().addPortInstance(*this);
}
-RTSystemServicesProtocolConjPort::RTSystemServicesProtocolConjPort(IInterfaceItemOwner* actor, const std::string& name, int localId, int idx) :
- PortBase(actor, name, localId, idx)
+RTSystemServicesProtocolConjPort::RTSystemServicesProtocolConjPort(IInterfaceItemOwner* actor, const std::string& name, int localId, int idx)
+ : PortBase(actor, name, localId, idx)
{
- DebuggingService::getInstance().addPortInstance(*this);
}
void RTSystemServicesProtocolConjPort::destroy() {
@@ -159,3 +154,4 @@ void RTSystemServicesProtocolConjReplPort::stopDebugging(){
}
}
+
diff --git a/runtime/org.eclipse.etrice.runtime.cpp/src-gen/common/modelbase/RTSystemServicesProtocol.h b/runtime/org.eclipse.etrice.runtime.cpp/src-gen/common/modelbase/RTSystemServicesProtocol.h
index 69c914db8..7682e9359 100644
--- a/runtime/org.eclipse.etrice.runtime.cpp/src-gen/common/modelbase/RTSystemServicesProtocol.h
+++ b/runtime/org.eclipse.etrice.runtime.cpp/src-gen/common/modelbase/RTSystemServicesProtocol.h
@@ -5,15 +5,15 @@
*
*/
-#ifndef _RTSYSTEMSERVICESPROTOCOL_H_
-#define _RTSYSTEMSERVICESPROTOCOL_H_
+#ifndef _COMMON_MODELBASE_RTSYSTEMSERVICESPROTOCOL_H_
+#define _COMMON_MODELBASE_RTSYSTEMSERVICESPROTOCOL_H_
+
+#include "common/modelbase/InterfaceItemBase.h"
+#include "common/modelbase/PortBase.h"
+#include "common/modelbase/ReplicatedInterfaceItemBase.h"
+#include "common/modelbase/ReplicatedPortBase.h"
+#include "common/etDatatypesCpp.hpp"
-#include <common/modelbase/InterfaceItemBase.h>
-#include <common/modelbase/PortBase.h>
-#include <common/modelbase/ReplicatedInterfaceItemBase.h>
-#include <common/modelbase/ReplicatedPortBase.h>
-#include <etDatatypes.h>
-#include <string>
@@ -43,7 +43,6 @@ class RTSystemServicesProtocol {
private:
static const std::string s_messageStrings[];
-
};
//------------------------------------------------------------------------------------------------------------
@@ -124,4 +123,6 @@ class RTSystemServicesProtocolConjReplPort : public etRuntime::ReplicatedPortBas
}
};
-#endif /* _RTSYSTEMSERVICESPROTOCOL_H_ */
+
+
+#endif /* _COMMON_MODELBASE_RTSYSTEMSERVICESPROTOCOL_H_ */
diff --git a/runtime/org.eclipse.etrice.runtime.cpp/src/common/debugging/DebuggingService.cpp b/runtime/org.eclipse.etrice.runtime.cpp/src/common/debugging/DebuggingService.cpp
index 89a8bc6dd..b2dedc349 100644
--- a/runtime/org.eclipse.etrice.runtime.cpp/src/common/debugging/DebuggingService.cpp
+++ b/runtime/org.eclipse.etrice.runtime.cpp/src/common/debugging/DebuggingService.cpp
@@ -14,7 +14,7 @@
#include "common/modelbase/ActorClassBase.h"
#include "common/modelbase/SubSystemClassBase.h"
-#include "common/modelbase/PortBase.h"
+#include "common/modelbase/InterfaceItemBase.h"
#include <iostream>
namespace etRuntime {
@@ -31,8 +31,8 @@ DebuggingService::DebuggingService() :
m_portInstances() {
}
-const PortBase* DebuggingService::getPort(const Address& address) const {
- std::map<Address, const PortBase*>::const_iterator it = m_portInstances.find(address);
+const InterfaceItemBase* DebuggingService::getPort(const Address& address) const {
+ std::map<Address, const InterfaceItemBase*>::const_iterator it = m_portInstances.find(address);
if (it != m_portInstances.end())
return it->second;
@@ -40,8 +40,8 @@ const PortBase* DebuggingService::getPort(const Address& address) const {
}
void DebuggingService::addMessageAsyncOut(const Address& source, const Address& target, const std::string& msg) {
- const PortBase* srcPort = getPort(source);
- const PortBase* tgtPort = getPort(target);
+ const InterfaceItemBase* srcPort = getPort(source);
+ const InterfaceItemBase* tgtPort = getPort(target);
if (srcPort != 0 && tgtPort != 0)
m_asyncLogger.addMessageAsyncOut(srcPort->getActor()->getInstancePath(), tgtPort->getActor()->getInstancePath(),
msg);
@@ -49,24 +49,24 @@ void DebuggingService::addMessageAsyncOut(const Address& source, const Address&
}
void DebuggingService::addMessageAsyncIn(const Address& source, const Address& target, const std::string& msg) {
- const PortBase* srcPort = getPort(source);
- const PortBase* tgtPort = getPort(target);
+ const InterfaceItemBase* srcPort = getPort(source);
+ const InterfaceItemBase* tgtPort = getPort(target);
if (srcPort != 0 && tgtPort != 0)
m_asyncLogger.addMessageAsyncIn(srcPort->getActor()->getInstancePath(), tgtPort->getActor()->getInstancePath(),
msg);
}
void DebuggingService::addMessageSyncCall(const Address& source, const Address& target, const std::string& msg) {
- const PortBase* srcPort = getPort(source);
- const PortBase* tgtPort = getPort(target);
+ const InterfaceItemBase* srcPort = getPort(source);
+ const InterfaceItemBase* tgtPort = getPort(target);
if (srcPort != 0 && tgtPort != 0)
m_asyncLogger.addMessageSyncCall(srcPort->getActor()->getInstancePath(), tgtPort->getActor()->getInstancePath(),
msg);
}
void DebuggingService::addMessageSyncReturn(const Address& source, const Address& target, const std::string& msg) {
- const PortBase* srcPort = getPort(source);
- const PortBase* tgtPort = getPort(target);
+ const InterfaceItemBase* srcPort = getPort(source);
+ const InterfaceItemBase* tgtPort = getPort(target);
if (srcPort != 0 && tgtPort != 0)
m_asyncLogger.addMessageSyncReturn(srcPort->getActor()->getInstancePath(),
tgtPort->getActor()->getInstancePath(), msg);
@@ -95,11 +95,11 @@ void DebuggingService::addVisibleComment(const std::string& comment) {
m_asyncLogger.addVisibleComment(comment);
}
-void DebuggingService::addPortInstance(const PortBase& port) {
+void DebuggingService::addPortInstance(const InterfaceItemBase& port) {
m_portInstances[port.getAddress()] = &port;
}
-void DebuggingService::removePortInstance(const PortBase& port) {
+void DebuggingService::removePortInstance(const InterfaceItemBase& port) {
m_portInstances.erase(port.getAddress());
}
diff --git a/runtime/org.eclipse.etrice.runtime.cpp/src/common/debugging/DebuggingService.h b/runtime/org.eclipse.etrice.runtime.cpp/src/common/debugging/DebuggingService.h
index c7ef3e6fe..0ac9e6354 100644
--- a/runtime/org.eclipse.etrice.runtime.cpp/src/common/debugging/DebuggingService.h
+++ b/runtime/org.eclipse.etrice.runtime.cpp/src/common/debugging/DebuggingService.h
@@ -16,6 +16,7 @@
#include "common/debugging/MSCLogger.h"
#include "common/messaging/Address.h"
#include "etDatatypes.h"
+#include "common/modelbase/InterfaceItemBase.h"
#include <string>
#include <map>
@@ -41,8 +42,8 @@ public:
void addMessageActorCreate(const ActorClassBase& parent, const std::string& refName);
void addMessageActorDestroy(const ActorClassBase& inst);
void addVisibleComment(const std::string& comment);
- void addPortInstance(const PortBase& port);
- void removePortInstance(const PortBase& port);
+ void addPortInstance(const InterfaceItemBase& port);
+ void removePortInstance(const InterfaceItemBase& port);
MSCLogger& getSyncLogger() { return m_syncLogger; }
MSCLogger& getAsyncLogger() { return m_asyncLogger; }
@@ -51,9 +52,9 @@ private:
MSCLogger m_asyncLogger;
MSCLogger m_syncLogger;
- std::map<Address, const PortBase*> m_portInstances;
+ std::map<Address, const InterfaceItemBase*> m_portInstances;
- const PortBase* getPort(const Address& address) const;
+ const InterfaceItemBase* getPort(const Address& address) const;
DebuggingService();
DebuggingService(DebuggingService const&);
diff --git a/runtime/org.eclipse.etrice.runtime.cpp/src/common/messaging/RTObject.cpp b/runtime/org.eclipse.etrice.runtime.cpp/src/common/messaging/RTObject.cpp
index 19e146ab0..6c3182ecc 100644
--- a/runtime/org.eclipse.etrice.runtime.cpp/src/common/messaging/RTObject.cpp
+++ b/runtime/org.eclipse.etrice.runtime.cpp/src/common/messaging/RTObject.cpp
@@ -33,12 +33,6 @@ RTObject::RTObject(IRTObject* parent, const std::string& name) :
}
}
-RTObject::~RTObject() {
- for (std::vector<IRTObject*>::iterator it = m_children.begin(); it != m_children.end(); ++it) {
- delete *it;
- }
-}
-
void RTObject::destroy() {
for (std::vector<IRTObject*>::iterator it = m_children.begin(); it != m_children.end(); ++it) {
RTObject* child = dynamic_cast<RTObject*>(*it);
diff --git a/runtime/org.eclipse.etrice.runtime.cpp/src/common/messaging/RTObject.h b/runtime/org.eclipse.etrice.runtime.cpp/src/common/messaging/RTObject.h
index a4bb6cd66..ceb2b6c93 100644
--- a/runtime/org.eclipse.etrice.runtime.cpp/src/common/messaging/RTObject.h
+++ b/runtime/org.eclipse.etrice.runtime.cpp/src/common/messaging/RTObject.h
@@ -23,7 +23,7 @@ class RTObject: public virtual IRTObject {
public:
RTObject(IRTObject* parent, const std::string& name);
- virtual ~RTObject();
+ virtual ~RTObject() {}
virtual const std::string& getName() const {
return m_name;
diff --git a/runtime/org.eclipse.etrice.runtime.cpp/src/common/modelbase/ActorClassBase.cpp b/runtime/org.eclipse.etrice.runtime.cpp/src/common/modelbase/ActorClassBase.cpp
index 931449b55..5f67b8ac5 100644
--- a/runtime/org.eclipse.etrice.runtime.cpp/src/common/modelbase/ActorClassBase.cpp
+++ b/runtime/org.eclipse.etrice.runtime.cpp/src/common/modelbase/ActorClassBase.cpp
@@ -33,6 +33,17 @@ ActorClassBase::~ActorClassBase() {
m_state = 0;
}
+void ActorClassBase::initialize() {
+ // since we have no mapping for the system ports we connect them directly here
+ IReplicatedInterfaceItem* systemPort = getSystemPort();
+ if (systemPort != 0) {
+ InterfaceItemBase* peer = systemPort->createSubInterfaceItem();
+ m_RTSystemPort.connectWith(peer);
+ }
+}
+
+
+
//SubSystemClassBase* ActorClassBase::getSubSystem() const {
// return 0; // TODO JH
//}
diff --git a/runtime/org.eclipse.etrice.runtime.cpp/src/common/modelbase/ActorClassBase.h b/runtime/org.eclipse.etrice.runtime.cpp/src/common/modelbase/ActorClassBase.h
index 7bd002ca9..52d876b17 100644
--- a/runtime/org.eclipse.etrice.runtime.cpp/src/common/modelbase/ActorClassBase.h
+++ b/runtime/org.eclipse.etrice.runtime.cpp/src/common/modelbase/ActorClassBase.h
@@ -23,7 +23,6 @@
namespace etRuntime {
-
class ActorClassBase: public SystemPortOwner, public virtual IMessageReceiver {
public:
@@ -42,6 +41,9 @@ public:
return Address::EMPTY;
}
+ virtual void initialize(void);
+ virtual void setProbesActive(bool recursive, bool active) {}
+
//SubSystemClassBase* getSubSystem() const;
//--------------------- lifecycle functions
diff --git a/runtime/org.eclipse.etrice.runtime.cpp/src/common/modelbase/InterfaceItemBase.cpp b/runtime/org.eclipse.etrice.runtime.cpp/src/common/modelbase/InterfaceItemBase.cpp
index 2834ff487..498137c69 100644
--- a/runtime/org.eclipse.etrice.runtime.cpp/src/common/modelbase/InterfaceItemBase.cpp
+++ b/runtime/org.eclipse.etrice.runtime.cpp/src/common/modelbase/InterfaceItemBase.cpp
@@ -44,8 +44,16 @@ InterfaceItemBase::InterfaceItemBase(IInterfaceItemOwner* owner, const std::stri
m_replicator(0) {
m_replicator = dynamic_cast<IReplicatedInterfaceItem*>(owner);
+}
+
+InterfaceItemBase::~InterfaceItemBase() {
+ m_peerAddress = Address::EMPTY;
+ m_ownMsgReceiver = 0;
+ m_peerMsgReceiver = 0;
+}
- int thread = owner->getEventReceiver()->getThread();
+void InterfaceItemBase::init() {
+ int thread = dynamic_cast<IEventReceiver*> (getParent())->getThread();
if (thread >= 0) {
IMessageService* msgSvc = RTServices::getInstance().getMsgSvcCtrl().getMsgSvc(thread);
Address addr = msgSvc->getFreeAddress();
@@ -56,12 +64,6 @@ InterfaceItemBase::InterfaceItemBase(IInterfaceItemOwner* owner, const std::stri
}
}
-InterfaceItemBase::~InterfaceItemBase() {
- m_peerAddress = Address::EMPTY;
- m_ownMsgReceiver = 0;
- m_peerMsgReceiver = 0;
-}
-
IInterfaceItem* InterfaceItemBase::connectWith(IInterfaceItem* peer) {
if (peer != 0) {
m_peer = peer;
@@ -78,6 +80,10 @@ IInterfaceItem* InterfaceItemBase::connectWith(IInterfaceItem* peer) {
InterfaceItemBase* ifItemPeer = dynamic_cast<InterfaceItemBase*>(m_peer);
if (ifItemPeer != 0) {
+ // initialize Ports
+ this->init();
+ ifItemPeer->init();
+
// connect with each other
m_peerAddress = ifItemPeer->getAddress();
ifItemPeer->m_peerAddress = getAddress();
@@ -121,8 +127,10 @@ void InterfaceItemBase::destroy() {
m_replicator->removeItem(*this);
}
- m_ownMsgReceiver->removeMessageReceiver(*this);
- m_ownMsgReceiver->freeAddress(getAddress());
+ if(m_ownMsgReceiver) {
+ m_ownMsgReceiver->removeMessageReceiver(*this);
+ m_ownMsgReceiver->freeAddress(getAddress());
+ }
AbstractMessageReceiver::destroy();
}
diff --git a/runtime/org.eclipse.etrice.runtime.cpp/src/common/modelbase/InterfaceItemBase.h b/runtime/org.eclipse.etrice.runtime.cpp/src/common/modelbase/InterfaceItemBase.h
index 0cc5de218..cdb12d99d 100644
--- a/runtime/org.eclipse.etrice.runtime.cpp/src/common/modelbase/InterfaceItemBase.h
+++ b/runtime/org.eclipse.etrice.runtime.cpp/src/common/modelbase/InterfaceItemBase.h
@@ -61,6 +61,7 @@ protected:
return m_peerMsgReceiver;
}
+ void init(void);
virtual void destroy();
diff --git a/runtime/org.eclipse.etrice.runtime.cpp/src/common/modelbase/RTSystemProtocol.cpp b/runtime/org.eclipse.etrice.runtime.cpp/src/common/modelbase/RTSystemProtocol.cpp
index 91eb0e865..9a9f930b0 100644
--- a/runtime/org.eclipse.etrice.runtime.cpp/src/common/modelbase/RTSystemProtocol.cpp
+++ b/runtime/org.eclipse.etrice.runtime.cpp/src/common/modelbase/RTSystemProtocol.cpp
@@ -20,13 +20,6 @@ const std::string RTSystemProtocol::RT_SYSTEM_PORT_NAME = "RTSystemPort";
RTSystemPort::RTSystemPort(IInterfaceItemOwner* actor, int localId) :
RTSystemServicesProtocolPort(actor, RTSystemProtocol::RT_SYSTEM_PORT_NAME, localId) {
-
- // since we have no mapping for the system ports we connect them directly here
- IReplicatedInterfaceItem* systemPort = actor->getSystemPort();
- if (systemPort != 0) {
- InterfaceItemBase* peer = systemPort->createSubInterfaceItem();
- connectWith(peer);
- }
}
RTSystemConjPort::RTSystemConjPort(IInterfaceItemOwner* actor, int localId) :
diff --git a/runtime/org.eclipse.etrice.runtime.cpp/src/common/modelbase/ReplicatedActorClassBase.cpp b/runtime/org.eclipse.etrice.runtime.cpp/src/common/modelbase/ReplicatedActorClassBase.cpp
new file mode 100644
index 000000000..52be7ecc7
--- /dev/null
+++ b/runtime/org.eclipse.etrice.runtime.cpp/src/common/modelbase/ReplicatedActorClassBase.cpp
@@ -0,0 +1,45 @@
+/*******************************************************************************
+ * Copyright (c) 2016 protos software gmbh (http://www.protos.de).
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * CONTRIBUTORS:
+ * Jan Belle (initial contribution)
+ *
+ *******************************************************************************/
+
+#include "ReplicatedActorClassBase.h"
+
+namespace etRuntime {
+
+ReplicatedActorClassBase::ReplicatedActorClassBase(IRTObject* parent, const std::string& name) :
+ RTObject(parent, name), m_items() {
+}
+
+ReplicatedActorClassBase::~ReplicatedActorClassBase() {
+ for(std::vector<ActorClassBase*>::iterator it = m_items.begin(); it != m_items.end(); it++)
+ delete *it;
+}
+
+void ReplicatedActorClassBase::createSubActors(int number) {
+ for (int i = 0; i < number; i++) {
+ std::stringstream itemName;
+ itemName << getName() << SEP << i;
+ ActorClassBase* item = createActor(getParent(), itemName.str());
+ m_items.push_back(item);
+ }
+}
+
+void ReplicatedActorClassBase::initialize() {
+ for(std::vector<ActorClassBase*>::iterator it = m_items.begin(); it != m_items.end(); it++)
+ (*it)->initialize();
+}
+
+void ReplicatedActorClassBase::setProbesActive(bool recursive, bool active) {
+ for(std::vector<ActorClassBase*>::iterator it = m_items.begin(); it != m_items.end(); it++)
+ (*it)->setProbesActive(recursive, active);
+}
+
+} // namespace etRuntime
diff --git a/runtime/org.eclipse.etrice.runtime.cpp/src/common/modelbase/ReplicatedActorClassBase.h b/runtime/org.eclipse.etrice.runtime.cpp/src/common/modelbase/ReplicatedActorClassBase.h
new file mode 100644
index 000000000..6a1eba38d
--- /dev/null
+++ b/runtime/org.eclipse.etrice.runtime.cpp/src/common/modelbase/ReplicatedActorClassBase.h
@@ -0,0 +1,43 @@
+/*******************************************************************************
+ * Copyright (c) 2016 protos software gmbh (http://www.protos.de).
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * CONTRIBUTORS:
+ * Jan Belle (initial contribution)
+ *
+ *******************************************************************************/
+
+#ifndef SRC_COMMON_MODELBASE_REPLICATEDACTORCLASSBASE_H_
+#define SRC_COMMON_MODELBASE_REPLICATEDACTORCLASSBASE_H_
+
+#include "common/messaging/RTObject.h"
+#include "common/modelbase/ActorClassBase.h"
+
+namespace etRuntime {
+
+class ReplicatedActorClassBase : public RTObject {
+
+public:
+ static const char SEP = ':';
+
+ ReplicatedActorClassBase(IRTObject* parent, const std::string& name);
+ virtual ~ReplicatedActorClassBase(void);
+ void createSubActors(int number);
+ void initialize(void);
+ void setProbesActive(bool recursive, bool active);
+ int getNSubActors(void) { return m_items.size(); }
+ ActorClassBase* getSubActor(int index) { return m_items.at(index); }
+
+protected:
+ virtual ActorClassBase* createActor(IRTObject* parent, const std::string& name) = 0;
+
+private:
+ std::vector<ActorClassBase*> m_items;
+};
+
+} // namespace et Runtime
+
+#endif /* SRC_COMMON_MODELBASE_REPLICATEDACTORCLASSBASE_H_ */
diff --git a/runtime/org.eclipse.etrice.runtime.cpp/src/common/modelbase/ReplicatedInterfaceItemBase.cpp b/runtime/org.eclipse.etrice.runtime.cpp/src/common/modelbase/ReplicatedInterfaceItemBase.cpp
index 9b716f9c4..6e5b536d2 100644
--- a/runtime/org.eclipse.etrice.runtime.cpp/src/common/modelbase/ReplicatedInterfaceItemBase.cpp
+++ b/runtime/org.eclipse.etrice.runtime.cpp/src/common/modelbase/ReplicatedInterfaceItemBase.cpp
@@ -25,7 +25,12 @@ ReplicatedInterfaceItemBase::ReplicatedInterfaceItemBase(IInterfaceItemOwner* ow
m_localId(localId),
m_items(),
m_releasedIndices() {
+}
+ReplicatedInterfaceItemBase::~ReplicatedInterfaceItemBase() {
+ for(std::vector<InterfaceItemBase*>::iterator it = m_items.begin(); it != m_items.end(); ++it) {
+ delete *it;
+ }
}
InterfaceItemBase* ReplicatedInterfaceItemBase::createSubInterfaceItem() {
diff --git a/runtime/org.eclipse.etrice.runtime.cpp/src/common/modelbase/ReplicatedInterfaceItemBase.h b/runtime/org.eclipse.etrice.runtime.cpp/src/common/modelbase/ReplicatedInterfaceItemBase.h
index e1460d13e..4738382da 100644
--- a/runtime/org.eclipse.etrice.runtime.cpp/src/common/modelbase/ReplicatedInterfaceItemBase.h
+++ b/runtime/org.eclipse.etrice.runtime.cpp/src/common/modelbase/ReplicatedInterfaceItemBase.h
@@ -28,7 +28,7 @@ class ReplicatedInterfaceItemBase: public RTObject,
public:
static const char SEP = ':';
- virtual ~ReplicatedInterfaceItemBase(){}
+ virtual ~ReplicatedInterfaceItemBase();
virtual InterfaceItemBase* createSubInterfaceItem();
virtual void removeItem(InterfaceItemBase& item);
diff --git a/runtime/org.eclipse.etrice.runtime.cpp/src/common/modelbase/SubSystemClassBase.cpp b/runtime/org.eclipse.etrice.runtime.cpp/src/common/modelbase/SubSystemClassBase.cpp
index 854d6ed8f..d7e33a04a 100644
--- a/runtime/org.eclipse.etrice.runtime.cpp/src/common/modelbase/SubSystemClassBase.cpp
+++ b/runtime/org.eclipse.etrice.runtime.cpp/src/common/modelbase/SubSystemClassBase.cpp
@@ -33,6 +33,7 @@ SubSystemClassBase::SubSystemClassBase(IRTObject* parent, std::string name) :
DebuggingService::getInstance().getAsyncLogger().open();
DebuggingService::getInstance().getSyncLogger().setMSC(name + "_Sync", "log/");
DebuggingService::getInstance().getSyncLogger().open();
+ DebuggingService::getInstance().getSyncLogger().setObjectName("main");
RTServices::getInstance().setSubSystem(this);
}
@@ -48,8 +49,9 @@ void SubSystemClassBase::init() {
// normaly the ports will address the correct target message service directly
// it is just for test purposes
// RTServices::getInstance().getMsgSvcCtrl().connectAll();
-
- instantiateActors();
+ mapThreads();
+ initialize();
+ setProbesActive(true, true);
// std::cout << toStringRecursive() << std::endl;
// initialize all actor instances
diff --git a/runtime/org.eclipse.etrice.runtime.cpp/src/common/modelbase/SubSystemClassBase.h b/runtime/org.eclipse.etrice.runtime.cpp/src/common/modelbase/SubSystemClassBase.h
index bc80bede3..11bd28c61 100644
--- a/runtime/org.eclipse.etrice.runtime.cpp/src/common/modelbase/SubSystemClassBase.h
+++ b/runtime/org.eclipse.etrice.runtime.cpp/src/common/modelbase/SubSystemClassBase.h
@@ -32,7 +32,9 @@ public:
virtual void init();
virtual void instantiateMessageServices() = 0;
- virtual void instantiateActors() = 0;
+ virtual void mapThreads(void) = 0;
+ virtual void initialize(void) = 0;
+ virtual void setProbesActive(bool recursive, bool active) {}
void start();
void stop();

Back to the top