public override void Add(OrderedTuple2 <T> elem) { base.Add(elem); if (GetType().GetCustomAttributes(typeof(SymmetricRelationAttribute), true).Length > 0) { base.Add(new OrderedTuple2 <T>(elem.b, elem.a)); } if (GetType().GetCustomAttributes(typeof(ReflexiveRelationAttribute), true).Length > 0) { base.Add(new OrderedTuple2 <T>(elem.a, elem.a)); base.Add(new OrderedTuple2 <T>(elem.b, elem.b)); } if (GetType().GetCustomAttributes(typeof(TransitiveRelationAttribute), true).Length > 0) { // For all x with whom b relates, inserts (a, x) // Para all x which are related to a, inserts (x, b) var xWithB = elems.Where(e => e.a.Equals(elem.b)).Select(e => e.b).ToList(); var xWithA = elems.Where(e => e.b.Equals(elem.a)).Select(e => e.a).ToList(); foreach (var x in xWithB) { base.Add(new OrderedTuple2 <T>(elem.a, x)); } foreach (var x in xWithA) { base.Add(new OrderedTuple2 <T>(x, elem.b)); } } }
public bool Equals(OrderedTuple2 <T> other) { return(a.Equals(other.a) && b.Equals(other.b)); }