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_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

#countObject



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

Returns:

  • (Boolean)


784
785
786
# File 'lib/primitive_wrapper.rb', line 784

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

Returns:

  • (Boolean)


800
801
802
# File 'lib/primitive_wrapper.rb', line 800

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

#include?(val) ⇒ Boolean

account for reversed ordering

Returns:

  • (Boolean)


781
782
783
# File 'lib/primitive_wrapper.rb', line 781

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

same as include?

Returns:

  • (Boolean)


787
788
789
# File 'lib/primitive_wrapper.rb', line 787

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

#reorder!Object



715
716
717
718
# File 'lib/primitive_wrapper.rb', line 715

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

#reverseObject



708
709
710
# File 'lib/primitive_wrapper.rb', line 708

def reverse
  @value.reverse.to_xr
end

#reverse!Object



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

#simplifyObject



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

#sizeObject

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   # 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



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

#to_aObject



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

#to_rangeObject

add similar to other wrappers



726
727
728
# File 'lib/primitive_wrapper.rb', line 726

def to_range  # add similar to other wrappers
  @value
end

#to_xrObject



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