Sha256: 8b35f2cc02cd243482b32f671e3248c769f04607d86dc0569b1956b6bd85a4f1

Contents?: true

Size: 813 Bytes

Versions: 3

Compression:

Stored size: 813 Bytes

Contents

require 'ffi-glib/list_methods'

module GLib
  load_class :SList

  # Overrides for GSList, GLib's singly linked list implementation.
  class SList
    include ListMethods

    # Override default field accessors.
    undef :next
    undef :data

    alias :next :tail
    alias :data :head

    class << self
      undef :new
      def new type
        _real_new(FFI::Pointer.new(0)).tap {|it|
          it.element_type = type}
      end

      def from_array type, arr
        return nil if arr.nil?
        return arr if arr.is_a? self
        arr.reverse.inject(self.new type) { |lst, val|
          lst.prepend val }
      end
    end

    def prepend data
      data_ptr = GirFFI::InPointer.from(element_type, data)
      self.class.wrap(element_type, Lib.g_slist_prepend(self, data_ptr))
    end

  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
gir_ffi-0.2.2 lib/ffi-glib/s_list.rb
gir_ffi-0.2.1 lib/ffi-glib/s_list.rb
gir_ffi-0.2.0 lib/ffi-glib/s_list.rb