Sha256: 39858b4fd6ec984ab8919cd4410bbd43e83b1eab5fb9008653a15f0a2e882b4b

Contents?: true

Size: 1.44 KB

Versions: 1

Compression:

Stored size: 1.44 KB

Contents

module Daru
  module Accessors
    # Internal class for wrapping ruby array
    class ArrayWrapper
      include Enumerable

      def each(&block)
        @data.each(&block)
      end

      def map!(&block)
        @data.map!(&block)
      end

      attr_accessor :size
      attr_reader   :data

      def initialize vector, context
        @data = vector.to_a
        @context = context

        set_size
      end

      def [] index
        @data[index]
      end

      def []= index, value
        @data[index] = value
        set_size
      end

      def == other
        @data == other
      end

      def delete_at index
        @data.delete_at index
        set_size
      end

      def index key
        @data.index key
      end

      def << element
        @data << element
        set_size
      end

      def uniq
        @data.uniq
      end

      def to_a
        @data
      end

      def dup
        ArrayWrapper.new @data.dup, @context
      end

      def mean
        sum.quo(@size - @context.nil_positions.size).to_f
      end

      def product
        @data.inject(1) { |m,e| m*e unless e.nil? }
      end

      def max
        @data.max
      end

      def min
        @data.min
      end

      def sum
        @data.inject(0) do |memo ,e|
          memo += e unless e.nil? #TODO: Remove this conditional somehow!
          memo
        end
      end

     private

      def set_size
        @size = @data.size
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
daru-0.0.5 lib/daru/accessors/array_wrapper.rb