module StructPacking::Base::ClassMethods

Common extending methods for Packable and Unpackable.

Automatically extend on including StructPacking::Base module.

Private Class Methods

extended(base) click to toggle source
# File lib/struct_packing/base.rb, line 52
def self.extended(base)
  base.class_eval do
    begin
      @struct_field_getter = superclass.class_eval { @struct_field_getter }
    rescue
      @struct_field_getter = nil
    end
    begin
      @struct_field_setter = superclass.class_eval { @struct_field_setter }
    rescue
      @struct_field_setter = nil
    end
    begin
      @struct_internal_format = superclass.class_eval { @struct_internal_format }
      if @struct_internal_format == nil
        @struct_internal_format = ""
      end
    rescue
      @struct_internal_format = ""
    end
  end
end

Public Instance Methods

attr_mapped_struct() click to toggle source

Declare this struct as accessible by attr-style-access(access by {name}= operator). This is default behavior.

# File lib/struct_packing/base.rb, line 139
def attr_mapped_struct
  set_field_getter {|obj, name| obj.send(name) }
  set_field_setter {|obj, name, value| obj.send("#{name}=", value) }
end
byte_format=(text) click to toggle source

Set structure format for this class by string.

# File lib/struct_packing/base.rb, line 85
def byte_format=(text)
  @struct_internal_format = text

  true
end
Also aliased as: define_struct
define_struct(text)
Alias for: byte_format=
get_field_value(obj, name) click to toggle source

Call getter procedure to get field of target object.

# File lib/struct_packing/base.rb, line 105
def get_field_value(obj, name)
  begin
    @struct_field_getter.call(obj, name)
  rescue
    0
  end
end
hash_mapped_struct() click to toggle source

Declare this struct as accessible by hash-style-access(access by [] operator).

# File lib/struct_packing/base.rb, line 132
def hash_mapped_struct
  set_field_getter {|obj, name| obj[name.to_sym] }
  set_field_setter {|obj, name, value| obj[name.to_sym] = value }
end
pack_template() click to toggle source

Get Ruby's pack template string for this class.

# File lib/struct_packing/base.rb, line 94
def pack_template
  if self.to_s =~ /^.*<(.*):0x.*/
    clsname = $1
  else
    clsname = self.to_s
  end
  
  Util.pack_template_from( @struct_internal_format, clsname )
end
set_field_getter(&block) click to toggle source

Set gettter procedure.

# File lib/struct_packing/base.rb, line 122
def set_field_getter(&block)
  @struct_field_getter = block
end
set_field_setter(&block) click to toggle source

Set settter procedure.

# File lib/struct_packing/base.rb, line 127
def set_field_setter(&block)
  @struct_field_setter = block
end
set_field_value(obj, name, value) click to toggle source

Call setter procedure to set value to the field of target object.

# File lib/struct_packing/base.rb, line 114
def set_field_value(obj, name, value)
  begin
    @struct_field_setter.call(obj, name, value)
  rescue
  end
end

Protected Instance Methods

internal_format() click to toggle source

Get internal structure format used to pack a object of this class.

# File lib/struct_packing/base.rb, line 78
def internal_format
  Util.internal_format_from( @struct_internal_format)
end