Ejemplo n.º 1
0
        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));
                }
            }
        }
Ejemplo n.º 2
0
 public bool Equals(OrderedTuple2 <T> other)
 {
     return(a.Equals(other.a) && b.Equals(other.b));
 }