public void SynchronizedLinkedListUnitTest() { SynchronizedLinkedList<string> linkedList = new SynchronizedLinkedList<string>(); linkedList.AddFirst("one"); linkedList.AddLast("two"); linkedList.AddAfter(linkedList.Find("two"), "three"); linkedList.AddLast("four"); Assert.IsTrue(linkedList.Count == 4); foreach (string name in linkedList) { Assert.IsTrue(linkedList.Contains(name)); } linkedList.RemoveFirst(); Assert.IsFalse(linkedList.Contains("one")); linkedList.RemoveLast(); Assert.IsFalse(linkedList.Contains("four")); linkedList.Remove("two"); Assert.IsFalse(linkedList.Contains("two")); linkedList.Clear(); Assert.IsTrue(linkedList.Count == 0); }
public bool AddCandle(Candle candle) { if (candle == null) { throw new ArgumentNullException("candle"); } if (!_byTime.SafeAdd(candle.OpenTime).TryAdd(candle)) { return(false); } _allCandles.AddLast(candle); _candleStat.Add(candle); _lastCandleTime = candle.OpenTime.UtcTicks; RecycleCandles(); return(true); }
public bool AddCandle(Candle candle) { if (candle == null) { throw new ArgumentNullException(nameof(candle)); } var ticks = candle.OpenTime.To <long>(); if (!_byTime.SafeAdd(ticks).TryAdd(candle)) { return(false); } _allCandles.AddLast(candle); _candleStat.Add(candle); _lastCandleTime = ticks; RecycleCandles(); return(true); }
private void ConnectorOnMarketTimeChanged(TimeSpan diff) { var first = _continuousSecurities.First; if (first == null) { return; } if (first.Value.Elapsed > diff) { first.Value.Elapsed -= diff; } else { var underlyingSecurities = new List <Tuple <ContinuousSecurity, MarketDataTypes, Security, Security> >(); lock (_continuousSecurities.SyncRoot) { var curr = first; while (curr != null && curr.Value.Elapsed <= diff && diff > TimeSpan.Zero) { diff -= curr.Value.Elapsed; _continuousSecurities.Remove(curr); var currSec = curr.Value.Item1.GetSecurity(_connector.CurrentTime); if (currSec != null) { var jumpInUtc = NextExpInUtc(curr); var c = _continuousSecurities.First; while (c != null) { if (jumpInUtc < NextExpInUtc(c)) { break; } c = c.Next; } if (c == null) { _continuousSecurities.AddLast(curr); } else { c.Value.Elapsed = NextExpInUtc(c) - jumpInUtc; _continuousSecurities.AddBefore(c, curr); } if (curr.Previous != null) { curr.Value.Elapsed = jumpInUtc - NextExpInUtc(curr.Previous); } else { curr.Value.Elapsed = jumpInUtc - currSec.Board.Exchange.ToUtc(currSec.ToExchangeTime(_connector.CurrentTime)); } underlyingSecurities.Add(Tuple.Create(curr.Value.Item1, curr.Value.Item2, curr.Value.Item1.ExpirationJumps.GetPrevSecurity(currSec), currSec)); } else { underlyingSecurities.Add(Tuple.Create(curr.Value.Item1, curr.Value.Item2, curr.Value.Item1.ExpirationJumps.LastSecurity, (Security)null)); UnSubscribeContinuous(curr.Value.Item1, curr.Value.Item2); } curr = _continuousSecurities.First; } } foreach (var tuple in underlyingSecurities) { if (tuple.Item3 != null) { UnSubscribe(tuple.Item3, tuple.Item2); } if (tuple.Item4 != null) { Subscribe(tuple.Item4, tuple.Item2); } } } }