view src/alice/codesegment/InputDataSegment.java @ 8:78b415d019de

Local DS and CS work! maybe...
author one
date Thu, 12 Jan 2012 16:02:28 +0900
parents 352eb19d837d
children 22afbb2919f1
line wrap: on
line source

package alice.codesegment;

import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.atomic.AtomicInteger;

import alice.datasegment.DataSegment;
import alice.datasegment.DataSegmentValue;

public class InputDataSegment {
	
	private ConcurrentHashMap<String, DataSegmentValue> inputDataSegments = new ConcurrentHashMap<String, DataSegmentValue>();
	private CodeSegment cs;
	private AtomicInteger count = new AtomicInteger();
	
	public InputDataSegment(CodeSegment cs) {
		this.cs = cs;
	}
	
	public void peek(String argKey, String managerKey, String key) {
		peek(argKey, managerKey, key, 0);
	}
	
	public void peek(String argKey, String managerKey, String key, int index) {
		DataSegment.get(managerKey).peek(argKey, key, index, cs);
		count.getAndIncrement();
	}

	public void take(String argKey,String managerKey, String key) {
		take(argKey, managerKey, key, 0);
	}
	
	public void take(String argKey, String managerKey, String key, int index) {
		DataSegment.get(managerKey).take(argKey, key, index, cs);
		count.getAndIncrement();
	}

	public void reply(String key, DataSegmentValue val) {
		inputDataSegments.put(key, val);
		if (count.decrementAndGet() == 0) {
			try {
				CodeSegmentManager.get().readyQueue.put(cs);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	}
	
	public DataSegmentValue get(String argKey) {
		return inputDataSegments.get(argKey);
	}
}