public bool TryGetRecord(DateTime time, out T record) { int ind = Records.BinarySearch(time); if (ind > -1) { record = Records[ind]; return(true); } else { record = default(T); return(false); } }
/// <summary> /// Sets the cursor to the nearest tick after or exacty at provided time. /// If the provided time is higher or lower than the know prices range it will be set to the last tick or first tick /// </summary> public void SeekNearestAfter(DateTime time) { lock (Locker) { var ind = Records.BinarySearch(time); if (ind > -1) { Cursor = ind; } else { Cursor = ~ind; } Debug.Assert(Cursor > -1); } }
public void AddRecord(T historyRecord, bool scatteredOrder = false) { if (scatteredOrder) { int index = Records.BinarySearch(historyRecord.Time); if (index > -1) { Records[index] = historyRecord; } else { Records.Add(historyRecord); } } else { if (Records.Count > 0 && EndTime > historyRecord.Time) { throw new Exception("you cannot add a tick that's preceding the last one "); } Records.Add(historyRecord); } }