// TODO what if there is no tuple? how do we wait? above? public List <Tuple> Read(TupleSchema tupleSchema) { List <Tuple> tuples; lock (_tupleSpaceLocks.GetOrAdd(tupleSchema.Schema.GetSize(), new object())) { tuples = GetMatchingTuples(_tupleSpace.GetOrAdd(tupleSchema.Schema.GetSize(), new List <Tuple>()), tupleSchema); } return(tuples); }
public List <Tuple> Take(TupleSchema tupleSchema) { List <Tuple> matchingTuples; lock (_tupleSpaceLocks.GetOrAdd(tupleSchema.Schema.GetSize(), new object())) { // get matching tuples matchingTuples = GetMatchingTuples(_tupleSpace.GetOrAdd(tupleSchema.Schema.GetSize(), new List <Tuple>()), tupleSchema); var nonMatchingTuples = _tupleSpace.GetOrAdd(tupleSchema.Schema.GetSize(), new List <Tuple>()).Except(matchingTuples).ToList(); // replace oldList with nonMatchingTuples _tupleSpace.AddOrUpdate(tupleSchema.Schema.GetSize(), valueToAdd => nonMatchingTuples, (key, oldValue) => new List <Tuple>(nonMatchingTuples) ); } return(matchingTuples); }
// TODO can we guarantee that this returns deterministically always the same value? private Tuple GetFirstMatchingTuples(List <Tuple> listOfTuples, TupleSchema tupleSchema) { return(listOfTuples.Find(tupleSchema.Match)); }
private Tuple GetMatchingTuple(List <Tuple> listOfTuples, TupleSchema tupleSchema) { return(listOfTuples.FindAll(tupleSchema.Match).First()); }
private List <Tuple> GetMatchingTuples(List <Tuple> listOfTuples, TupleSchema tupleSchema) { return(listOfTuples.FindAll(tupleSchema.Match)); }