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"); } }
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; }
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; } }