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, #type_of?, #unwrap, #val, #val=, #wrapped?, #~
Constructor Details
This class inherits a constructor from Value
Instance Method Details
#==(other) ⇒ Object
829
830
831
|
# File 'lib/primitive_wrapper.rb', line 829
def ==(other)
@value.eql? (~other)
end
|
#===(other) ⇒ Object
825
826
827
|
# File 'lib/primitive_wrapper.rb', line 825
def ===(other)
@value.include? other
end
|
800
801
802
|
# File 'lib/primitive_wrapper.rb', line 800
def count
size
end
|
#cover?(val) ⇒ Boolean
means val>=start and val<=end … different than include
806
807
808
|
# File 'lib/primitive_wrapper.rb', line 806
def cover?(val)
@value.reorder.include? val
end
|
#each(&block) ⇒ Object
903
904
905
|
# File 'lib/primitive_wrapper.rb', line 903
def each(&block)
self.send(:step, 1, &block)
end
|
#eql? ⇒ Boolean
822
823
824
|
# File 'lib/primitive_wrapper.rb', line 822
def eql?
@value.eql? (~other)
end
|
#include?(val) ⇒ Boolean
account for reversed ordering
803
804
805
|
# File 'lib/primitive_wrapper.rb', line 803
def include?(val)
@value.reorder.include? val
end
|
#max(*n, &block) ⇒ Object
816
817
818
|
# File 'lib/primitive_wrapper.rb', line 816
def max(*n, &block)
@value.reorder.send(:max, *n, &block)
end
|
#member?(val) ⇒ Boolean
809
810
811
|
# File 'lib/primitive_wrapper.rb', line 809
def member?(val)
@value.reorder.include? val
end
|
#min(*n, &block) ⇒ Object
819
820
821
|
# File 'lib/primitive_wrapper.rb', line 819
def min(*n, &block)
@value.reorder.send(:min, *n, &block)
end
|
#re_range(ng) ⇒ Object
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
|
# File 'lib/primitive_wrapper.rb', line 751
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
769
770
771
|
# File 'lib/primitive_wrapper.rb', line 769
def re_range!(ng)
replace re_range(ng)
end
|
734
735
736
737
|
# File 'lib/primitive_wrapper.rb', line 734
def reorder!
@value = @value.reorder
self
end
|
731
732
733
|
# File 'lib/primitive_wrapper.rb', line 731
def reverse
@value.reverse.to_xr
end
|
727
728
729
730
|
# File 'lib/primitive_wrapper.rb', line 727
def reverse!
@value = @value.reverse
self
end
|
#reverse_each(&block) ⇒ Object
907
908
909
|
# File 'lib/primitive_wrapper.rb', line 907
def reverse_each(&block)
self.send(:reverse_step, 1, &block)
end
|
#reverse_step(n = 1) ⇒ Object
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
|
# File 'lib/primitive_wrapper.rb', line 868
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
|
742
743
744
|
# File 'lib/primitive_wrapper.rb', line 742
def simplify
@value.simplify.to_xr
end
|
#simplify! ⇒ Object
738
739
740
741
|
# File 'lib/primitive_wrapper.rb', line 738
def simplify!
@value = @value.simplify
self
end
|
getting the wrong count … off by 1
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
|
# File 'lib/primitive_wrapper.rb', line 772
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
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
|
# File 'lib/primitive_wrapper.rb', line 833
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
|
812
813
814
815
|
# File 'lib/primitive_wrapper.rb', line 812
def to_a
dat = @value.reorder.to_a
return reversed? ? dat.reverse : dat
end
|
add similar to other wrappers
748
749
750
|
# File 'lib/primitive_wrapper.rb', line 748
def to_range
@value
end
|
745
746
747
|
# File 'lib/primitive_wrapper.rb', line 745
def to_xr
self
end
|
#valid_type(prm) ⇒ Object
722
723
724
725
726
|
# File 'lib/primitive_wrapper.rb', line 722
def valid_type(prm)
return true if prm.kind_of? Range
return true if prm.kind_of? XRange
false
end
|