Class: Adarwin::Interval
- Inherits:
-
Object
- Object
- Adarwin::Interval
- Defined in:
- lib/adarwin/interval.rb
Overview
This class represents an interval [a..b] including a and b. The class has the following methods:
-
Initialise the interval (
initialize) -
Print the interval (
to_s) -
Merge an interval with another interval (
merge) -
Return the length of the interval (
length)
Instance Attribute Summary collapse
-
#a ⇒ Object
Returns the value of attribute a.
-
#b ⇒ Object
Returns the value of attribute b.
Instance Method Summary collapse
-
#initialize(a, b, loops) ⇒ Interval
constructor
Initialise the interval.
-
#length ⇒ Object
Method to compute the length of the interval.
-
#merge(other_interval) ⇒ Object
Merge this interval with another interval.
-
#to_s ⇒ Object
Print the interval as a string (e.g. [4..9]).
Constructor Details
#initialize(a, b, loops) ⇒ Interval
Initialise the interval. This method performs a comparison to see whether a or b is the upper-bound. This comparison is based on guesses made by the compare method. This method uses loop information if needed. FIXME: Uses the compare method which might be based on a guess
17 18 19 20 21 22 23 24 25 26 |
# File 'lib/adarwin/interval.rb', line 17 def initialize(a,b,loops) @loops = loops a = simplify(a.to_s) b = simplify(b.to_s) case compare(a,b,@loops) when 'lt' || 'eq' then @a = a; @b = b when 'gt' then @a = b; @b = a else @a = a; @b = b end end |
Instance Attribute Details
#a ⇒ Object
Returns the value of attribute a.
11 12 13 |
# File 'lib/adarwin/interval.rb', line 11 def a @a end |
#b ⇒ Object
Returns the value of attribute b.
11 12 13 |
# File 'lib/adarwin/interval.rb', line 11 def b @b end |
Instance Method Details
#length ⇒ Object
Method to compute the length of the interval. For example, the length of
- a..b
-
is equal to (b-a+1).
52 53 54 |
# File 'lib/adarwin/interval.rb', line 52 def length simplify("(#{@b})-(#{a})+1") end |
#merge(other_interval) ⇒ Object
Merge this interval with another interval. This is based on a comparison made by the compare method, which is an approximation based on loop information. FIXME: Uses the compare method which might be based on a guess
37 38 39 40 41 42 43 44 45 46 47 48 |
# File 'lib/adarwin/interval.rb', line 37 def merge(other_interval) @a = case compare(@a,other_interval.a,@loops) when 'gt' || 'eq' then other_interval.a when 'lt' then @a else other_interval.a end @b = case compare(@b,other_interval.b,@loops) when 'gt' || 'eq' then @b when 'lt' then other_interval.b else @b end end |
#to_s ⇒ Object
Print the interval as a string (e.g. [4..9]).
29 30 31 |
# File 'lib/adarwin/interval.rb', line 29 def to_s @a+RANGE_SEP+@b end |