コード例 #1
0
ファイル: CollectionTrace.cs プロジェクト: xyuan/Naiad
        public void Introduce(ref int keyIndex, R from, Int64 weight, int timeIndex)
        {
            if (heads != null)
            {
                if (keyIndex == 0)
                {
                    keyIndex = heads.Count;
                    heads.Add(-1);
                }

                if (weight < 0)
                {
                    Logging.Error("Subtracting records from Immutable collection (Consolidate first?)");
                }

                for (int i = 0; i < weight; i++)
                {
                    links.Add(new Microsoft.Research.Naiad.Pair <R, int>(from, heads[keyIndex]));
                    heads[keyIndex] = links.Count - 1;
                }
            }
            else
            {
                Logging.Error("Adding records to Immutable collection after compacting it");
            }
        }
コード例 #2
0
ファイル: Reduce.cs プロジェクト: sherryshare/Naiad
        private void OnRecv(Pair <I, T> record)
        {
            if (reducers == null)
            {
                //reducers = new A[4];
                Console.Error.WriteLine("Making a SpinedList in reducer");
                reducers    = new SpinedList <A>();
                nextReducer = 0;
                index       = new Dictionary <K, int>(2000000);
                lastTime    = record.v2;
                recordsIn   = 0;
                NotifyAt(record.v2);
            }
            else if (!record.v2.Equals(lastTime))
            {
                throw new Exception("One time at a time please!");
            }

            K   k = key(record.v1);
            int i;

            if (index.TryGetValue(k, out i))
            {
                A reducer = reducers[i];
                reducer.Add(val(record.v1));
                reducers[i] = reducer;
            }
            else
            {
#if false
                if (nextReducer == reducers.Length)
                {
                    A[] n = new A[nextReducer * 2];
                    Array.Copy(reducers, n, nextReducer);
                    reducers = n;
                }
#endif
                var reducer = factory();
                reducer.InitialAdd(val(record.v1));
                index.Add(k, reducers.Count);
                reducers.Add(reducer);
                ++nextReducer;
            }

            ++recordsIn;
        }
コード例 #3
0
        public override void OnReceive(Message <I, T> message)
        {
            if (reducers == null)
            {
                //reducers = new A[4];
                // Console.Error.WriteLine("Making a SpinedList in reducer");
                reducers    = new SpinedList <A>();
                nextReducer = 0;
                index       = new Dictionary <K, int>(2000000);
                lastTime    = message.time;
                recordsIn   = 0;
                NotifyAt(message.time);
            }
            else if (!message.time.Equals(lastTime))
            {
                throw new Exception("One time at a time please!");
            }

            for (int ii = 0; ii < message.length; ii++)
            {
                var record = message.payload[ii];

                K   k = key(record);
                int i;
                if (index.TryGetValue(k, out i))
                {
                    A reducer = reducers[i];
                    reducer.Add(val(record));
                    reducers[i] = reducer;
                }
                else
                {
                    var reducer = factory();
                    reducer.InitialAdd(val(record));
                    index.Add(k, reducers.Count);
                    reducers.Add(reducer);
                    ++nextReducer;
                }

                ++recordsIn;
            }
        }