public void OrderModified(LogicalOrder order) { if (order.IsActive) { // Any change to an active order even if only // a price change means the list change. IsActiveOrdersChanged = true; if (!activeOrders.Contains(order)) { var newNode = nodePool.Create(order); bool found = false; var next = activeOrders.First; for (var node = next; node != null; node = next) { next = node.Next; LogicalOrder other = node.Value; if (order.CompareTo(other) < 0) { activeOrders.AddBefore(node, newNode); found = true; break; } } if (!found) { activeOrders.AddLast(newNode); } } } else { var node = activeOrders.Find(order); if (node != null) { activeOrders.Remove(node); nodePool.Free(node); // Since this order became inactive, it // means the active list changed. IsActiveOrdersChanged = true; } } if (order.IsNextBar) { if (!nextBarOrders.Contains(order)) { nextBarOrders.Add(order); } } else { if (nextBarOrders.Contains(order)) { nextBarOrders.Remove(order); } } ActiveOrdersChanged(order); }
private void SortAdjust(ActiveList <CreateOrChangeOrder> list, CreateOrChangeOrder order, Func <CreateOrChangeOrder, CreateOrChangeOrder, double> compare) { AssureNode(order); var orderNode = (ActiveListNode <CreateOrChangeOrder>)order.Reference; if (orderNode.List == null || !orderNode.List.Equals(list)) { if (orderNode.List != null) { orderNode.List.Remove(orderNode); } bool found = false; var next = list.First; for (var node = next; node != null; node = next) { next = node.Next; var other = node.Value; if (object.ReferenceEquals(order, other)) { found = true; break; } else { var result = compare(order, other); if (result < 0) { list.AddBefore(node, orderNode); found = true; break; } } } if (!found) { list.AddLast(orderNode); } } }