public override object Clone() { ONCollection lCollection = ONContext.GetComponent_Collection(ClassName, OnContext); lCollection.Union(this); return(lCollection); }
public static ONCollection Union(ONCollection collection1, ONCollection collection2) { ONCollection lCollection = collection1.Clone() as ONCollection; lCollection.Union(collection2); return(lCollection); }
public static ONCollection operator +(ONCollection collection, ONInstance instance) { ONCollection lCollection = ONContext.GetComponent_Collection(collection.ClassName, collection.OnContext); lCollection.Union(collection); lCollection.Add(instance); return(lCollection); }
public static ONCollection Intersection(ONCollection collection1, ONCollection collection2) { ONCollection lCollection = ONContext.GetComponent_Collection(collection1.ClassName, collection1.OnContext); if ((collection1 == null) || (collection2 == null)) { return(lCollection); } foreach (ONInstance lInstance in collection1) { if (!collection2.Contains(lInstance)) { lCollection.Add(lInstance); } } return(lCollection); }
/// <summary> /// Adds an instance to the collection in the order that the Order Criteria sets. /// </summary> /// <param name="instance">Instance to add</param> /// <param name="comparer">Order criteria to apply</param> /// <param name="onContext">context of the query</param> public void AddOrdered(ONInstance instance, ONOrderCriteria comparer, ONContext onContext) { // Empty lists if (Count == 0) { Add(instance); return; } int i = 0; int j = 0; int lComparation = 0; // Clone and clear collection ONCollection lList = Clone() as ONCollection; this.Clear(); // Create data component for default comparation ONData lData = null; if (comparer == null) { lData = ONContext.GetComponent_Data(ClassName, onContext); } ONInstance lInstance1 = lList.Array[i]; while ((i < lList.Count) && (j < 1)) { if (comparer != null) { lComparation = comparer.CompareUnion(lInstance1, instance); } else { lComparation = lData.CompareUnionOID(lInstance1, instance); } if (lComparation < 0) { Add(lInstance1); i += 1; if (lList.Count > i) { lInstance1 = lList.Array[i]; } } else if (lComparation > 0) { Add(instance); j += 1; } else { Add(lInstance1); Add(instance); i += 1; j += 1; } } AddRange(lList); if (j == 0) { Add(instance); } }