class SegmentTree::Segment

:nodoc:all:
An elementary interval

def <=>(other)

segments are sorted from left to right, from shortest to longest
def <=>(other)
  case cmp = @range.begin <=> other.range.begin
    when 0 then @range.end <=> other.range.end
    else cmp
  end
end

def ==(other)

def ==(other)
  other.is_a?(self.class) &&
    @range == other.range &&
    @value == other.value
end

def eql?(other)

def eql?(other)
  other.is_a?(self.class) &&
    @range.eql?(other.range) &&
    @value.eql?(other.value)
end

def hash

def hash
  [@range, @value].hash
end

def initialize(range, value)

def initialize(range, value)
  raise ArgumentError, 'Range expected, %s given' % range.class.name unless range.is_a?(Range)
  @range, @value = range, value
end

def marshal_dump

def marshal_dump
  {
    range: @range,
    value: @value,
  }
end

def marshal_load(serialized_tree)

def marshal_load(serialized_tree)
  @range = serialized_tree[:range]
  @value = serialized_tree[:value]
end