Sha256: 8b71420d293c948f85d071ab6e910ce6fb32e44c079c00629b42b0baa84f3abe

Contents?: true

Size: 1.28 KB

Versions: 1

Compression:

Stored size: 1.28 KB

Contents

module PyCall
  class List
    include PyObjectWrapper
    include Enumerable

    def self.new(init=nil)
      case init
      when LibPython::PyObjectStruct
        super
      when nil
        new(0)
      when Integer
        new(LibPython.PyList_New(init))
      when Array
        new.tap do |list|
          init.each do |item|
            list << item
          end
        end
      else
        new(obj.to_ary)
      end
    end

    def <<(value)
      value = Conversions.from_ruby(value)
      LibPython.PyList_Append(__pyobj__, value)
      self
    end

    def size
      LibPython.PyList_Size(__pyobj__)
    end

    alias length size

    def include?(value)
      value = Conversions.from_ruby(value)
      value = LibPython.PySequence_Contains(__pyobj__, value)
      raise PyError.fetch if value == -1
      1 == value
    end

    def ==(other)
      case other
      when Array
        self.to_a == other
      else
        super
      end
    end

    def each
      return enum_for unless block_given?
      i, n = 0, size
      while i < n
        yield self[i]
        i += 1
      end
      self
    end

    def to_a
      [].tap do |a|
        i, n = 0, size
        while i < n
          a << self[i]
          i += 1
        end
      end
    end

    alias to_ary to_a
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
pycall-0.1.0.alpha.20170711 lib/pycall/list.rb