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
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