Class: XRange
Instance Method Summary
collapse
Methods inherited from ValueAdd
bestow_methods, capture_base_methods
Methods inherited from Value
#!=, #ensure_valid, #freeze, freeze_raise?, ignore_on_freeze, #initialize, #inspect, #prim_value, raise_on_freeze, #replace, #to_s, #to_wrapper, #type_of?, #unwrap, #val, #val=, #wrapped?, #~
Constructor Details
This class inherits a constructor from Value
Instance Method Details
#==(other) ⇒ Object
807
808
809
|
# File 'lib/primitive_wrapper.rb', line 807
def ==(other)
@value.eql? (~other)
end
|
#===(other) ⇒ Object
803
804
805
|
# File 'lib/primitive_wrapper.rb', line 803
def ===(other)
@value.include? other
end
|
778
779
780
|
# File 'lib/primitive_wrapper.rb', line 778
def count
size
end
|
#cover?(val) ⇒ Boolean
means val>=start and val<=end … different than include
784
785
786
|
# File 'lib/primitive_wrapper.rb', line 784
def cover?(val)
@value.reorder.include? val
end
|
#each(&block) ⇒ Object
881
882
883
|
# File 'lib/primitive_wrapper.rb', line 881
def each(&block)
self.send(:step, 1, &block)
end
|
#eql? ⇒ Boolean
800
801
802
|
# File 'lib/primitive_wrapper.rb', line 800
def eql?
@value.eql? (~other)
end
|
#include?(val) ⇒ Boolean
account for reversed ordering
781
782
783
|
# File 'lib/primitive_wrapper.rb', line 781
def include?(val)
@value.reorder.include? val
end
|
#max(*n, &block) ⇒ Object
794
795
796
|
# File 'lib/primitive_wrapper.rb', line 794
def max(*n, &block)
@value.reorder.send(:max, *n, &block)
end
|
#member?(val) ⇒ Boolean
787
788
789
|
# File 'lib/primitive_wrapper.rb', line 787
def member?(val)
@value.reorder.include? val
end
|
#min(*n, &block) ⇒ Object
797
798
799
|
# File 'lib/primitive_wrapper.rb', line 797
def min(*n, &block)
@value.reorder.send(:min, *n, &block)
end
|
#re_range(ng) ⇒ Object
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
|
# File 'lib/primitive_wrapper.rb', line 729
def re_range(ng)
return self if ng.nil?
return self if ng <= 0
return self unless first.kind_of? Integer
t_first = first
t_last = last
if first.negative?
t_first = ng+first
end
if last.negative?
t_last = ng+last
end
if exclude_end?
XRange.new (t_first...t_last)
else
XRange.new (t_first..t_last)
end
end
|
#re_range!(ng) ⇒ Object
747
748
749
|
# File 'lib/primitive_wrapper.rb', line 747
def re_range!(ng)
replace re_range(ng)
end
|
715
716
717
718
|
# File 'lib/primitive_wrapper.rb', line 715
def reorder!
@value = @value.reorder
self
end
|
708
709
710
|
# File 'lib/primitive_wrapper.rb', line 708
def reverse
@value.reverse.to_xr
end
|
704
705
706
707
|
# File 'lib/primitive_wrapper.rb', line 704
def reverse!
@value = @value.reverse
self
end
|
#reverse_each(&block) ⇒ Object
885
886
887
|
# File 'lib/primitive_wrapper.rb', line 885
def reverse_each(&block)
self.send(:reverse_step, 1, &block)
end
|
#reverse_step(n = 1) ⇒ Object
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
|
# File 'lib/primitive_wrapper.rb', line 846
def reverse_step(n=1)
n = 1 if n<= 0
return Enumerator.enumerate_yields(self, :reverse_step, n) unless block_given?
curr = last.pw_copy
if exclude_end?
if reversed?
loop do
break if curr >= first
yield curr
n.times { |t| curr = curr.succ }
end
else
loop do
break if curr <= first
yield curr
n.times { |t| curr = curr.pred }
end
end
else
if reversed?
loop do
yield curr
break if curr >= first
n.times { |t| curr = curr.succ }
end
else
loop do
yield curr
break if curr <= first
n.times { |t| curr = curr.pred }
end
end
end
end
|
720
721
722
|
# File 'lib/primitive_wrapper.rb', line 720
def simplify
@value.simplify.to_xr
end
|
#simplify! ⇒ Object
711
712
713
714
|
# File 'lib/primitive_wrapper.rb', line 711
def simplify!
@value = @value.simplify
self
end
|
getting the wrong count … off by 1
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
|
# File 'lib/primitive_wrapper.rb', line 750
def size
dirty = false
sz = @value.size
if sz.nil?
dirty = true
elsif sz==0
dirty = true
end
unless dirty
return sz
end
if first.respond_to? :lcm
sz = reversed? ? @value.reverse.size : @value.size
return sz
end
range = @value.reorder
cnt = 0
curr = range.first.pw_copy
stop = range.last
loop do
cnt += 1
break if curr==stop
curr.succ!
end
cnt -= 1 if exclude_end?
return cnt
end
|
#step(n = 1) ⇒ Object
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
|
# File 'lib/primitive_wrapper.rb', line 811
def step(n=1)
n = 1 if n<= 0
return Enumerator.enumerate_yields(self, :step, n) unless block_given?
curr = first.pw_copy
if exclude_end?
if reversed?
loop do
break if curr <= last
yield curr
n.times { |t| curr = curr.pred }
end
else
loop do
break if curr >= last
yield curr
n.times { |t| curr = curr.succ }
end
end
else
if reversed?
loop do
yield curr
break if curr <= last
n.times { |t| curr = curr.pred }
end
else
loop do
yield curr
break if curr >= last
n.times { |t| curr = curr.succ }
end
end
end
end
|
790
791
792
793
|
# File 'lib/primitive_wrapper.rb', line 790
def to_a
dat = @value.reorder.to_a
return reversed? ? dat.reverse : dat
end
|
add similar to other wrappers
726
727
728
|
# File 'lib/primitive_wrapper.rb', line 726
def to_range
@value
end
|
723
724
725
|
# File 'lib/primitive_wrapper.rb', line 723
def to_xr
self
end
|
#valid_type(prm) ⇒ Object
699
700
701
702
703
|
# File 'lib/primitive_wrapper.rb', line 699
def valid_type(prm)
return true if prm.kind_of? Range
return true if prm.kind_of? XRange
false
end
|