Пример #1
0
        // 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);
        }
Пример #2
0
        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);
        }
Пример #3
0
 // 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));
 }
Пример #4
0
 private Tuple GetMatchingTuple(List <Tuple> listOfTuples, TupleSchema tupleSchema)
 {
     return(listOfTuples.FindAll(tupleSchema.Match).First());
 }
Пример #5
0
 private List <Tuple> GetMatchingTuples(List <Tuple> listOfTuples, TupleSchema tupleSchema)
 {
     return(listOfTuples.FindAll(tupleSchema.Match));
 }