Class TaskJuggler::Interval
In: lib/taskjuggler/Interval.rb
Parent: Object

This is the based class used to store several kinds of intervals in derived classes.

Methods

<=>   ==   combine   contains?   intersection   new   overlaps?  

Attributes

end  [R] 
start  [R] 

Public Class methods

Create a new Interval object. s is the interval start, e the interval end (not included).

[Source]

# File lib/taskjuggler/Interval.rb, line 26
    def initialize(s, e)
      @start = s
      @end = e
      # The end must not be before the start.
      if @end < @start
        raise ArgumentError, "Invalid interval (#{s} - #{e})"
      end
    end

Public Instance methods

Compare self with Interval iv. This function only works for non-overlapping Interval objects.

[Source]

# File lib/taskjuggler/Interval.rb, line 85
    def <=>(iv)
      raise ArgumentError, "Class mismatch" if self.class != iv.class
      if @end < iv.start
        -1
      elsif iv.end < @start
        1
      end
      0
    end

Return true if the Interval iv describes an identical time period.

[Source]

# File lib/taskjuggler/Interval.rb, line 96
    def ==(iv)
      raise ArgumentError, "Class mismatch" if self.class != iv.class
      @start == iv.start && @end == iv.end
    end

Append or prepend the Interval iv to self. If iv does not directly attach to self, just return self.

[Source]

# File lib/taskjuggler/Interval.rb, line 70
    def combine(iv)
      raise ArgumentError, "Class mismatch" if self.class != iv.class
      if iv.end == @start
        # Prepend iv
        Array.new self.class.new(iv.start, @end)
      elsif @end == iv.start
        # Append iv
        Array.new self.class.new(@start, iv.end)
      else
        self
      end
    end

Return true if arg is contained within the Interval. It can either be a single TjTime or another Interval.

[Source]

# File lib/taskjuggler/Interval.rb, line 37
    def contains?(arg)
      if arg.is_a?(Interval)
        raise ArgumentError, "Class mismatch" if self.class != arg.class
        return @start <= arg.start && arg.end <= @end
      else
        raise ArgumentError, "Class mismatch" if @start.class != arg.class
        return @start <= arg && arg < @end
      end
    end

Return a new Interval that contains the overlap of self and the Interval iv. In case there is no overlap, nil is returned.

[Source]

# File lib/taskjuggler/Interval.rb, line 61
    def intersection(iv)
      raise ArgumentError, "Class mismatch" if self.class != iv.class
      newStart = @start > iv.start ? @start : iv.start
      newEnd = @end < iv.end ? @end : iv.end
      newStart < newEnd ? self.class.new(newStart, newEnd) : nil
    end

Check whether the Interval arg overlaps with this Interval.

[Source]

# File lib/taskjuggler/Interval.rb, line 48
    def overlaps?(arg)
      if arg.is_a?(Interval)
        raise ArgumentError, "Class mismatch" if self.class != arg.class
        return (@start <= arg.start && arg.start < @end) ||
               (arg.start <= @start && @start < arg.end)
      else
        raise ArgumentError, "Class mismatch" if @start.class != arg.class
        return @start <= arg && arg < @end
      end
    end

[Validate]