blob: 5f1187535a91fa1dd3dd44abd70bdec00f6f5b95 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2005 - 2015 Profactor GmbH, ACIN, fortiss GmbH
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0.
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Thomas Strasser, Alois Zoitl, Ingo Hegny,
* - initial implementation and rework communication infrastructure
*******************************************************************************/
#include <string.h>
#include "conn.h"
CConnection::CConnection(CFunctionBlock *paSrcFB, TPortId paSrcPortId) :
mSourceId(paSrcFB, paSrcPortId){
}
EMGMResponse CConnection::addDestination(const CConnectionPoint &paDestPoint){
EMGMResponse retval = e_INVALID_STATE;
if(!dstExists(paDestPoint)){ // check if there is up to now no such fan out with this destination
mDestinationIds.pushBack(paDestPoint);
retval = e_RDY;
}
return retval;
}
EMGMResponse CConnection::removeDestination(const CConnectionPoint &paDestPoint){
EMGMResponse retval = e_INVALID_STATE;
TDestinationIdList::Iterator itRunner = mDestinationIds.begin();
TDestinationIdList::Iterator itRefNode = mDestinationIds.end();
while(itRunner != mDestinationIds.end()){
if(paDestPoint == (*itRunner)){
retval = e_RDY;
if(itRefNode == mDestinationIds.end()){
mDestinationIds.popFront();
}
else{
mDestinationIds.eraseAfter(itRefNode);
}
break;
}
itRefNode = itRunner;
++itRunner;
}
return retval;
}
void CConnection::setSource(CFunctionBlock *paSrcFB, TPortId paSrcPortId){
mSourceId.mFB = paSrcFB;
mSourceId.mPortId = paSrcPortId;
}
bool CConnection::dstExists(const CConnectionPoint& paDestPoint) const {
bool bRetVal = false;
for(TDestinationIdList::Iterator it = mDestinationIds.begin();
it != mDestinationIds.end(); ++it){
if(paDestPoint == (*it)){
bRetVal = true;
break;
}
}
return bRetVal;
}