/******************************************************************************* | |
* Copyright (c) 2016 CEA LIST. | |
* | |
* 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 | |
* | |
* Created on: 27 oct. 2010 | |
* | |
* Contributors: | |
* Arnault Lapitre (CEA LIST) arnault.lapitre@cea.fr | |
* - Initial API and implementation | |
******************************************************************************/ | |
#ifndef AVMCOMMUNICATIONFACTORY_H_ | |
#define AVMCOMMUNICATIONFACTORY_H_ | |
#include <collection/Typedef.h> | |
#include <fml/executable/InstanceOfPort.h> | |
#include <fml/runtime/ExecutionData.h> | |
#include <fml/runtime/RuntimeID.h> | |
namespace sep | |
{ | |
class COMPILE_CONTEXT; | |
class AvmCode; | |
class EvaluationEnvironment; | |
class ExecutionEnvironment; | |
class InstanceOfBuffer; | |
class Message; | |
class RoutingData; | |
class RuntimeID; | |
class AvmCommunicationFactory | |
{ | |
private: | |
/** | |
* CONSTRUCTOR | |
* Default | |
*/ | |
AvmCommunicationFactory() | |
{ | |
//!! NOTHING | |
} | |
/** | |
* DESTRUCTOR | |
*/ | |
virtual ~AvmCommunicationFactory() | |
{ | |
//!! NOTHING | |
} | |
public: | |
/** | |
* SEARCH ROUTING DATA | |
*/ | |
static const RoutingData & searchInputRoutingData( | |
const ExecutionData & anED, InstanceOfPort * aPort, | |
RuntimeID & aRoutingRID ); | |
inline static const RoutingData & searchInputRoutingData( | |
const APExecutionData & anED, InstanceOfPort * aPort, | |
RuntimeID & aRoutingRID ) | |
{ | |
return( searchInputRoutingData( (* anED) , aPort , aRoutingRID ) ); | |
} | |
static const RoutingData & searchOutputRoutingData( | |
const ExecutionData & anED, InstanceOfPort * aPort, | |
RuntimeID & aRoutingRID ); | |
inline static const RoutingData & searchOutputRoutingData( | |
const APExecutionData & anED, InstanceOfPort * aPort, | |
RuntimeID & aRoutingRID ) | |
{ | |
return( searchOutputRoutingData( (* anED) , aPort , aRoutingRID ) ); | |
} | |
/* | |
* CHECK ROUTING INFORMATION | |
*/ | |
static bool isRoutingProtocolEnv(COMPILE_CONTEXT * aCTX, | |
InstanceOfPort * aPort); | |
static bool isRoutingProtocolRdv(COMPILE_CONTEXT * aCTX, | |
InstanceOfPort * aPort); | |
/* | |
* POP MESSAGE | |
*/ | |
static bool popMessage(ExecutionEnvironment & ENV, | |
InstanceOfPort * aPort); | |
static bool popMessage_environment(ExecutionEnvironment & ENV, | |
const RuntimeID & aRoutingRID, const RoutingData & aRoutingData, | |
avm_size_t firstParameterOffset = 1); | |
static bool popMessage_transfert(ExecutionEnvironment & ENV, | |
const RuntimeID & aRoutingRID, const RoutingData & aRoutingData); | |
static bool popMessage_buffer(ExecutionEnvironment & ENV, | |
const RuntimeID & aRoutingRID, const RoutingData & aRoutingData); | |
static bool popMessage_rdv(ExecutionEnvironment & ENV, | |
const RuntimeID & aRoutingRID, const RoutingData & aRoutingData); | |
/* | |
* POP MESSAGE FROM | |
*/ | |
static bool popMessageFrom(ExecutionEnvironment & ENV); | |
static bool popMessageFrom_transfert( | |
ExecutionEnvironment & ENV, const RuntimeID & aSenderRID, | |
const RuntimeID & aRoutingRID, const RoutingData & aRoutingData); | |
static bool popMessageFrom_buffer( | |
ExecutionEnvironment & ENV, const RuntimeID & aSenderRID, | |
const RuntimeID & aRoutingRID, const RoutingData & aRoutingData); | |
static bool popMessageFrom_rdv( | |
ExecutionEnvironment & ENV, const RuntimeID & aSenderRID, | |
const RuntimeID & aRoutingRID, const RoutingData & aRoutingData); | |
/* | |
* PUSH MESSAGE | |
*/ | |
static bool pushMessage(ExecutionEnvironment & ENV, | |
const Message & anOutputMsg, RuntimeID aRoutingRID); | |
static bool pushMessage_environment( | |
ExecutionEnvironment & ENV, const RuntimeID & aRoutingRID, | |
const RoutingData & aRoutingData, const Message & anOutputMsg); | |
static bool pushMessage_transfert( | |
ExecutionEnvironment & ENV, const RuntimeID & aRoutingRID, | |
const RoutingData & aRoutingData, const Message & anOutputMsg); | |
static bool pushMessage_buffer( | |
ExecutionEnvironment & ENV, const RuntimeID & aRoutingRID, | |
const RoutingData & aRoutingData, const Message & anOutputMsg); | |
static bool pushMessage_rdv( | |
ExecutionEnvironment & ENV, const RuntimeID & aRoutingRID, | |
const RoutingData & aRoutingData, const Message & anOutputMsg); | |
static bool pushMessage_broadcast( | |
ExecutionEnvironment & ENV, const RuntimeID & aRoutingRID, | |
const RoutingData & aRoutingData, const Message & anOutputMsg); | |
static bool pushMessage_multicast( | |
ExecutionEnvironment & ENV, | |
const RuntimeID & aRoutingRID, | |
const RoutingData & aRoutingData, | |
const Message & anOutputMsg); | |
static bool pushMessage_unicast( | |
ExecutionEnvironment & ENV, const RuntimeID & aRoutingRID, | |
const RoutingData & aRoutingData, const Message & anOutputMsg); | |
static bool pushMessage_anycast( | |
ExecutionEnvironment & ENV, const RuntimeID & aRoutingRID, | |
const RoutingData & aRoutingData, const Message & anOutputMsg); | |
/* | |
* PUSH MESSAGE TO | |
*/ | |
static bool pushMessageTo( | |
ExecutionEnvironment & ENV, const Message & anOutputMsg); | |
static bool pushMessageTo_transfert( | |
ExecutionEnvironment & ENV, const RuntimeID & aRoutingRID, | |
const RoutingData & aRoutingData, const Message & anOutputMsg); | |
static bool pushMessageTo_buffer( | |
ExecutionEnvironment & ENV, const RuntimeID & aRoutingRID, | |
const RoutingData & aRoutingData, const Message & anOutputMsg); | |
static bool pushMessageTo_rdv( | |
ExecutionEnvironment & ENV, const RuntimeID & aRoutingRID, | |
const RoutingData & aRoutingData, const Message & anOutputMsg); | |
static bool pushMessageTo_broadcast( | |
ExecutionEnvironment & ENV, const RuntimeID & aRoutingRID, | |
const RoutingData & aRoutingData, const Message & anOutputMsg); | |
static bool pushMessageTo_multicast( | |
ExecutionEnvironment & ENV, const RuntimeID & aRoutingRID, | |
const RoutingData & aRoutingData, const Message & anOutputMsg); | |
static bool pushMessageTo_unicast( | |
ExecutionEnvironment & ENV, const RuntimeID & aRoutingRID, | |
const RoutingData & aRoutingData, const Message & anOutputMsg); | |
static bool pushMessageTo_anycast( | |
ExecutionEnvironment & ENV, const RuntimeID & aRoutingRID, | |
const RoutingData & aRoutingData, const Message & anOutputMsg); | |
/* | |
* UPDATE BUFFER | |
*/ | |
static bool updateBuffer(APExecutionData & anED); | |
/* | |
* PRESENCE / ABSENCE status | |
*/ | |
static bool computePresence(const ExecutionData & anED, | |
const RuntimeID & aReceiverRID, InstanceOfPort * aPort); | |
inline static bool computePresence( | |
const APExecutionData & anED, InstanceOfPort * aPort) | |
{ | |
return( computePresence((* anED), anED->mRID, aPort) ); | |
} | |
inline static bool computeAbsence(const ExecutionData & anED, | |
const RuntimeID & aReceiverRID, InstanceOfPort * aPort) | |
{ | |
return( not computePresence(anED, aReceiverRID, aPort) ); | |
} | |
inline static bool computeAbsence( | |
const APExecutionData & anED, InstanceOfPort * aPort) | |
{ | |
return( not computePresence((* anED), anED->mRID, aPort) ); | |
} | |
/* | |
* Collect buffer message | |
*/ | |
static void collectBufferMessage( | |
const ExecutionData & anED, BaseBufferForm & aBuffer); | |
inline static void collectBufferMessage( | |
const APExecutionData & anED, BaseBufferForm & aBuffer) | |
{ | |
collectBufferMessage( (* anED) , aBuffer ); | |
} | |
}; | |
} | |
#endif /* AVMCOMMUNICATIONFACTORY_H_ */ |