import java.util.Iterator; public class SimpleAllAllBcast implements IBcastAlg { public SimpleAllAllBcast() { } public SimpleAllAllBcast(SimpleAllAllBcast src) { } public boolean checkStateValidity(StateBundle state) { ILogicVarBundle vars = state.getVars(); try { IPosBcast bcastVars = (IPosBcast)vars; if(bcastVars != null) { return true; } } catch(Exception e) { } return false; } public void getMsgs(ILogicVarBundle discreteState, IDiscreteDynamicsCallback dynCallback, double[] arrLfStateCont, double lfCurrTime, int nIdxStateOffset, Iterator channelsToSendOn) { try { dynCallback.doCallback(discreteState, arrLfStateCont); IMsg msg = ((IPosBcast)discreteState).getMsg(); if(msg == null) { msg = new AgentMsgHelpers.NullMsg(); } while(channelsToSendOn.hasNext()) { CommLink linkSendOn = (CommLink)channelsToSendOn.next(); if(linkSendOn != null && linkSendOn.queue() != null) { linkSendOn.queue().sendMsg(msg); } } } catch(java.lang.ClassCastException e) { // send nothing } } public IBcastAlg makeCopy() { return new SimpleAllAllBcast(this); } public StateBundle updateState(ILogicVarBundle statePrev, double[] arrLfStateCont, double lfCurrTime, int nIdxStateOffset, IEnvironment env, Iterator channelsRecieveFrom) { // TODO Auto-generated method stub try { IPosBcast storage = (IPosBcast)statePrev; double [] arrLfAgentState = new double[storage.getDim()]; for(int j = 0; j < storage.getDim(); ++j) { arrLfAgentState[j] = arrLfStateCont[nIdxStateOffset+j]; } IPosBcast storageOut = accumMsgs(storage, channelsRecieveFrom); storageOut.forceUpdate(statePrev.getId(), arrLfAgentState, lfCurrTime); return new StateBundle(storageOut, new ControlFuncDoNothing(storage.getDim())); } catch(java.lang.ClassCastException e) { return null; } } IPosBcast accumMsgs(IPosBcast statePrev, Iterator channelsRecieveFrom) { IPosBcast result = (IPosBcast)statePrev.makeCopy(); while(channelsRecieveFrom.hasNext()) { CommLink linkRecvFrom = (CommLink)channelsRecieveFrom.next(); if(linkRecvFrom != null && linkRecvFrom.queue() != null) { IMsg currMsg = linkRecvFrom.queue().readMsg(); try { if(currMsg != null) { IPosBcast.IPosBcastMsg currBcastMsg = (IPosBcast.IPosBcastMsg)currMsg; for(int i = 0; i < currBcastMsg.getNumEntries(); ++i) { int nId = currBcastMsg.getId(i); if(currBcastMsg.getTime(i) > result.getLastTime(nId)) { result.forceUpdate(nId, currBcastMsg.getPos(i), currBcastMsg.getTime(i)); } } } } catch(java.lang.ClassCastException e) { } } } return result; } }