public override void Visit(OrSpecNode <T> orSpecNode)
        {
            var takenNot = _notNodes.Peek();

            _notNodes.Push(takenNot);
            base.Visit(orSpecNode);
            var rightNode = _nodes.Pop();
            var leftNode  = _nodes.Pop();

            _nodes.Push(takenNot
                                ? (ISpecNode <T>) new AndSpecNode <T>(leftNode, rightNode)
                                : rightNode != orSpecNode.RightNode || leftNode != orSpecNode.LeftNode
                                        ? new OrSpecNode <T>(leftNode, rightNode)
                                        : orSpecNode);
        }
 public virtual void Visit(OrSpecNode <T> orSpecNode)
 {
     Visit(orSpecNode.LeftNode);
     Visit(orSpecNode.RightNode);
 }