/// <summary>
 /// Return the set difference of "this" and rhOp
 /// </summary>
 /// <param name="rhOp"></param>
 /// <returns></returns>
 internal RangeList SUB(RangeList rhOp)
 {
     if (!this.isCanonical || !rhOp.isCanonical)
     {
         throw new GplexInternalException("RangeList not canonicalized");
     }
     if (this.ranges.Count == 0)
     {
         return(new RangeList(false));
     }
     else if (rhOp.ranges.Count == 0)
     {
         return(this);
     }
     return(this.AND(new RangeList(rhOp.InvertedList(), false)));
 }