Class: XRange

Inherits:
ValueAdd show all
Defined in:
lib/primitive_wrapper.rb

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

#countObject



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

Returns:

  • (Boolean)


806
807
808
# File 'lib/primitive_wrapper.rb', line 806

def cover?(val)  # means val>=start and val<=end ... different than include
  @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

Returns:

  • (Boolean)


822
823
824
# File 'lib/primitive_wrapper.rb', line 822

def eql?
  @value.eql? (~other)
end

#include?(val) ⇒ Boolean

account for reversed ordering

Returns:

  • (Boolean)


803
804
805
# File 'lib/primitive_wrapper.rb', line 803

def include?(val)  # account for reversed ordering
  @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

same as include?

Returns:

  • (Boolean)


809
810
811
# File 'lib/primitive_wrapper.rb', line 809

def member?(val) # same as include?
  @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

#reorder!Object



734
735
736
737
# File 'lib/primitive_wrapper.rb', line 734

def reorder!
  @value = @value.reorder
  self
end

#reverseObject



731
732
733
# File 'lib/primitive_wrapper.rb', line 731

def reverse
  @value.reverse.to_xr
end

#reverse!Object



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

#simplifyObject



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

#sizeObject

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   # getting the wrong count ... off by 1
  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  # Covers both Integer and Int
    sz = reversed? ? @value.reverse.size : @value.size
    return sz
  end
  range = @value.reorder
  cnt = 0
  # curr = range.first.dup rescue range.first
  curr = range.first.pw_copy
  stop = range.last
  loop do
    cnt += 1  # 5..5 is count of 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

#to_aObject



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

#to_rangeObject

add similar to other wrappers



748
749
750
# File 'lib/primitive_wrapper.rb', line 748

def to_range  # add similar to other wrappers
  @value
end

#to_xrObject



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