Sha256: 1494e4b97b99507d747a6b3874fd943897beee8d59a1563437b1bbae3bd652a4

Contents?: true

Size: 1.69 KB

Versions: 1

Compression:

Stored size: 1.69 KB

Contents

module Daru
  class Vector
    include Enumerable

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

    attr_accessor :name

    attr_reader   :size

    attr_reader   :vector
 
    def initialize source=[], name=nil
      if source.is_a?(Hash)
        initialize source.values[0], source.keys[0]
      else
        @name = name || SecureRandom.uuid

        @vector = 
        case source
        when Range, Matrix
          source.to_a.flatten
        else
          source
        end

        @size = @vector.size
      end
    end

    def [](index)
      @vector[index]
    end

    def []=(index, value)
      @vector[index] = value
    end

    def ==(other)
      other.vector == @vector and other.name == @name and other.size == @size
    end

    def <<(element)
      @vector << element

      @size += 1
    end

    def to_json
      self.to_a.to_json
    end

    def to_a
      @vector.to_a
    end

    def to_nmatrix
      @vector.to_nm
    end

    alias_method :to_nm, :to_nmatrix

    def first lim=1
      lim == 1 ? @vector.first : @vector.first(lim)
    end

    def delete index
      @vector[index] = nil
      @vector.compact!
      @size -= 1
    end

    def to_html threshold=15
      html = '<table><tr><th>' + @name.to_s + '</th></tr>>'

      @vector.to_a.each_with_index do |el,i|
        next if threshold < i and i < @arr.length-1
        content = i == threshold ? '...' : el.to_s
        html.concat('<tr><td>' + content  + '</td></tr>')
      end

      html += '</table>'
    end

    def dup
      Daru::Vector.new @vector.dup, @name
    end

    def daru_vector
      self
    end

    alias_method :dv, :daru_vector

    def compact!
      @vector.compact!
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
daru-0.0.2.3 lib/daru/vector.rb