/// <returns>
        /// Returns whether this collection has a non-empty intersection with the inverse of the other collection
        /// </returns>
        internal bool IntersectsInverseOf(TimeIntervalCollection other)
        {
            Debug.Assert(!_invertCollection);  // Make sure we never leave inverted mode enabled

            if (this.ContainsNullPoint && !other.ContainsNullPoint)  // Intersection at null points
            {
                return true;
            }
            if (this.IsEmptyOfRealPoints)  // We are empty, and have no null point; we have nothing to intersect
            {
                return false;
            }
            else if (other.IsEmptyOfRealPoints ||  // We are non-empty, and other is the inverse of empty (e.g. covers all real numbers, so we must intersect), OR...
                     this._nodeTime[0] < other._nodeTime[0])  // Neither TIC is empty, and we start first; this means the inverted "other" by necessity
                                                              // overlaps our first node, so it must intersect either our node or subsequent interval.
            {
                return true;
            }
            else  // Neither TIC is empty, and other starts no later than we do; then use regular intersection logic with inverted boolean flags
            {
                other.SetInvertedMode(true);

                bool returnValue = IntersectsHelper(other);

                other.SetInvertedMode(false);  // Make sure we don't leave other TIC in an inverted state!

                return returnValue;
            }
        }