The ranges are given in biological coordinates, meaning the first coordinate is 1 (0 is illegal) and max_length is a legal coordinate. So, if max_length=10 then our coordinates are in 1..10 (both inclusive). Also note that a range like [2,4] expands to2,3,4 since both start and end are inclusive.
in reply to Re: Serializing a large object
in thread Serializing a large object
This convention always causes some trouble, and most of the time I use to convert the coordinates at the beginning and at the end so I can work with 0-based coordinates. In this case I didn't since it's quite simple, so I'm working with biological coordinates.
Anyway, if we now take your example and arbitrarily replace all 0's with 1's we get:
my @ranges = ([ 1, 5 ], [ 1, 6 ], [ 2, 7 ], [ 3, 8 ], [ 4, 9 ], [ 5,
+10 ],[ 5, 1 ], [ 6, 1 ], [ 7, 2 ], [ 8, 3 ], [ 9, 4 ], [ 10, 5 ],);
my $rm = RangeMap->new( 10, \@ranges );
Now, [1,3] returns 5; since only the first two and last three ranges contain it.
[1,4] returns 4; since only the first two and last two ranges contain it.
I hope it makes sense now