/// <summary> /// Add item only if it does not already exist. /// </summary> /// <param name="item"></param> /// <returns>True if the add was performed, or false if it already exists.</returns> public bool AddUnique(TType item) { lock (this) { if (_instance.Contains(item)) { return(false); } List <TType> items = new List <TType>(_instance); items.Add(item); _instance = items; } ItemUpdateDelegate del = ItemAddedEvent; if (del != null) { del(this, item); } RaiseCollectionUpdateEvent(); return(true); }
/// <summary> /// Remove all instances that are equal, or the same as, this item. /// </summary> /// <returns>Count of items removed.</returns> public int RemoveAll(TType item) { int result = 0; lock (this) { List <TType> instance = new List <TType>(_instance); while (instance.Remove(item)) { result++; } if (result != 0) { _instance = instance; } } ItemUpdateDelegate del = ItemRemovedEvent; if (result > 0 && del != null) { del(this, item); } RaiseCollectionUpdateEvent(); return(result); }
/// <summary> /// Implementation has internal check security, /// so no exceptions occur. /// </summary> /// <param name="index"></param> public void RemoveAt(int index) { TType item; lock (this) { if (_instance.Count > index) { List <TType> items = new List <TType>(_instance); item = items[index]; items.RemoveAt(index); _instance = items; } else { return; } } ItemUpdateDelegate del = ItemRemovedEvent; if (del != null) { del(this, item); } RaiseCollectionUpdateEvent(); }
/// <summary> /// Managed thread entrance only. /// </summary> void Managed_tdSink_ITradeDeskEvents_Event_OnRowChanged(object tableDisp, string rowID) { if (LoggedIn) { TradeDeskAut desk = _desk; if (desk == null) { return; } try { FXCore.ITableAut t = (FXCore.ITableAut)tableDisp; if ("offers".Equals(t.Type)) { TableAut offersTable = (TableAut)desk.FindMainTable("offers"); RowAut instrumentRow = (RowAut)offersTable.FindRow("OfferID", rowID, 0); DataTick dataTick = new DataTick(); dataTick.Ask = (decimal)((double)instrumentRow.CellValue("Ask")); dataTick.Bid = (decimal)((double)instrumentRow.CellValue("Bid")); dataTick.DateTime = (DateTime)instrumentRow.CellValue("Time"); QuoteUpdateDelegate delegateInstance = QuoteUpdatedEvent; if (delegateInstance != null) { GeneralHelper.FireAndForget(delegateInstance, this, (string)instrumentRow.CellValue("Instrument"), dataTick); } } else if ("orders".Equals(t.Type)) { // Orders table empty? //TableAut offersTable = (TableAut)desk.FindMainTable("orders"); //RowAut instrumentRow = (RowAut)offersTable.FindRow("OrderID", rowID, 0); //string accountId; //OrderInfo? info = Managed_ExtractOrderInfo(instrumentRow, out accountId); //OrderUpdateDelegate delegateInstance = OrderUpdatedEvent; //if (info.HasValue && delegateInstance != null) //{ // GeneralHelper.FireAndForget(delegateInstance, this, accountId, info.Value); //} } else if ("accounts".Equals(t.Type)) { ItemUpdateDelegate delegateInstance = AccountUpdatedEvent; if (delegateInstance != null) { GeneralHelper.FireAndForget(delegateInstance, this, rowID); } } } catch (System.Exception ex) { SystemMonitor.Error("Failed to handle OnRow event", ex); } } }
/// <summary> /// This method demonstrates the operation of the hot-swap mechanism. /// The existing instance is kept, for as long as the new one is /// created, then a fast swap is made. /// </summary> public void Add(TType item) { lock (this) { List <TType> items = new List <TType>(_instance); items.Add(item); _instance = items; } ItemUpdateDelegate del = ItemAddedEvent; if (del != null) { del(this, item); } RaiseCollectionUpdateEvent(); }