public AstWriteAwaitNodeBuilder() { this(new AstWriteAwaitNode()); }
public StreamNested<R> setBarrierName(String barrierName) { node.setBarrierName(barrierName); return this; }
@Override public AstWriteAwaitNode visitWriteAwaitNode(WriteAwaitNodeContext ctx) { node = new AstWriteAwaitNode(); node.setRegionInfo(asSequentialRegion(childInfos, ctx)); node.setBarrierName(ctx.Name().getText()); return node; }
@Override public Configuration visit(AstWriteAwaitNode node, State state) { RegionInfo regionInfo = node.getRegionInfo(); String barrierName = node.getBarrierName(); Barrier barrier = state.lookupBarrier(barrierName); AwaitBarrierDownstreamHandler handler = new AwaitBarrierDownstreamHandler(barrier); handler.setRegionInfo(regionInfo); Map<String, ChannelHandler> pipelineAsMap = state.pipelineAsMap; String handlerName = String.format("write.await#%d", pipelineAsMap.size() + 1); pipelineAsMap.put(handlerName, handler); state.configuration.getBarriers().add(barrier); return state.configuration; }
@Override protected void describe(StringBuilder buf) { super.describe(buf); buf.append(format("write await %s\n", getBarrierName())); } }
@Override public AstWriteAwaitNode visitWriteAwaitNode(WriteAwaitNodeContext ctx) { AstWriteAwaitNodeVisitor visitor = new AstWriteAwaitNodeVisitor(factory, environment); AstWriteAwaitNode writeAwaitNode = visitor.visitWriteAwaitNode(ctx); if (writeAwaitNode != null) { childInfos().add(writeAwaitNode.getRegionInfo()); } return writeAwaitNode; }
private void conditionallyInjectWriteBarrier(State state, RegionInfo regionInfo) { List<AstStreamableNode> streamables = state.streamables; switch (state.readWriteState) { case READ: String barrierName = String.format("~read~write~%d", ++state.readWriteBarrierCount); AstReadNotifyNode readNotify = new AstReadNotifyNode(); readNotify.setRegionInfo(regionInfo); readNotify.setBarrierName(barrierName); AstWriteAwaitNode writeAwait = new AstWriteAwaitNode(); writeAwait.setRegionInfo(regionInfo); writeAwait.setBarrierName(barrierName); streamables.add(readNotify); streamables.add(writeAwait); break; default: break; } }
public AstWriteAwaitNodeBuilder setBarrierName(String barrierName) { node.setBarrierName(barrierName); return this; }
public StreamNested(R builder) { super(new AstWriteAwaitNode(), builder); }