/// <summary> /// Callback used to create a stock data instance /// </summary> public StockProcessingState GetProcessingState(StockDataInterface data) { Dictionary <TimeSpan, StockProcessingState> intervals; StockProcessingState state; string symbol; DateTime start; TimeSpan interval; data.GetInfo(out symbol, out start, out interval); if (!ProcessingStates.TryGetValue(symbol, out intervals) || (intervals == null)) { state = new StockProcessingState(); state.DataSet = HistoricalData[symbol]; ProcessingStates[symbol] = new Dictionary <TimeSpan, StockProcessingState>() { { interval, state } }; } else { if (!intervals.TryGetValue(interval, out state) || (state == null)) { state = new StockProcessingState(); state.DataSet = HistoricalData[symbol]; intervals[interval] = state; } else { // Assume incrementing to the next data set state.DataSetIndex++; // Check if processing restarted if (start < state.LastProcessedStartTime) { state = new StockProcessingState(); state.DataSet = HistoricalData[symbol]; intervals[interval] = state; } } } state.LastProcessedStartTime = start; // Ensure the data set index is correct (should never evaluate to true) if (data != HistoricalData[symbol][state.DataSetIndex]) { throw new Exception("Data set index mismatch"); } return(state); }
/// <summary> /// Callback used to create a stock data instance /// </summary> public StockProcessingState GetProcessingState(StockDataInterface data) { Dictionary <TimeSpan, StockProcessingState> intervals; StockProcessingState state; string symbol; DateTime start; TimeSpan interval; data.GetInfo(out symbol, out start, out interval); if (!ProcessingStates.TryGetValue(symbol, out intervals) || (intervals == null)) { state = new StockProcessingState(); state.DataSet = HistoricalData[symbol]; ProcessingStates[symbol] = new Dictionary <TimeSpan, StockProcessingState>() { { interval, state } }; } else { if (!intervals.TryGetValue(interval, out state) || (state == null)) { state = new StockProcessingState(); state.DataSet = HistoricalData[symbol]; intervals[interval] = state; } else { // Assume incrementing to the next data set for (; state.DataSetIndex < state.DataSet.Count(); state.DataSetIndex++) { if (state.DataSet[state.DataSetIndex] == data) { break; } } // Check if processing restarted if (start < state.LastProcessedStartTime) { state = new StockProcessingState(); state.DataSet = HistoricalData[symbol]; intervals[interval] = state; } } } state.LastProcessedStartTime = start; return(state); }