blob: e0abf756e20c9cb18c2df8f503aa0d8b855da809 [file] [log] [blame]
/*******************************************************************************
* 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_ */