class CAStruct
Public Class Methods
[](*argv)
click to toggle source
# File lib/carray/struct.rb, line 101 def [] (*argv) obj = new() members.each do |name| obj[name] = argv.shift end return obj end
decode(data)
click to toggle source
# File lib/carray/struct.rb, line 113 def decode (data) ### required element as data class return new.decode(data) end
inspect()
click to toggle source
# File lib/carray/struct.rb, line 97 def inspect return name.nil? ? "AnonStruct" : name end
members()
click to toggle source
# File lib/carray/struct.rb, line 109 def members return self::MEMBERS.clone end
new(*argv)
click to toggle source
# File lib/carray/struct.rb, line 123 def initialize (*argv) @data = CScalar.new(self.class) mems = members if argv.size == 1 and argv.first.is_a?(Hash) argv.first.each do |k,v| self[k] = v end elsif argv.size <= mems.size argv.each_with_index do |v, i| self[mems[i]] = v end else raise ArgumentError, format("too many arguments for %s.new (<%i> for <%i>)", self.class.inspect, argv.size, members.size) end end
size()
click to toggle source
# File lib/carray/struct.rb, line 117 def size return self::DATA_SIZE end
Public Instance Methods
==(other)
click to toggle source
# File lib/carray/struct.rb, line 223 def == (other) case other when self.class return @data == other.__data__ else return false end end
[](name)
click to toggle source
# File lib/carray/struct.rb, line 149 def [] (name) if name.kind_of?(Integer) name = members[name] end offset, type, opts = *self.class::MEMBER_TABLE[name.to_s] case type when nil return send(name) when Class return type.decode(@data.field(offset, type)) when CArray return @data.field(offset,type)[0,false] else return @data.field(offset,type,opts)[0] end end
[]=(name, val)
click to toggle source
# File lib/carray/struct.rb, line 166 def []= (name, val) if name.kind_of?(Integer) name = members[name] end offset, type, opts = *self.class::MEMBER_TABLE[name.to_s] case type when nil send(name.to_s + "=", val) when Class @data.field(offset, type)[0] = val when CArray @data.field(offset, type)[0,false] = val else @data.field(offset,type,opts)[0] = val end end
decode(data)
click to toggle source
# File lib/carray/struct.rb, line 232 def decode (data) case data when String @data.load_binary(data) when CArray @data = data else raise "unkown data to decode" end return self end
each() { |self| ... }
click to toggle source
# File lib/carray/struct.rb, line 183 def each members.each do |name| yield(self[name]) end end
each_pair() { |intern, self| ... }
click to toggle source
# File lib/carray/struct.rb, line 189 def each_pair members.each do |name| yield(name.intern, self[name]) end end
encode()
click to toggle source
# File lib/carray/struct.rb, line 244 def encode ### required element as data class return @data.dump_binary end
Also aliased as: to_s
inspect()
click to toggle source
# File lib/carray/struct.rb, line 215 def inspect table = {} members.each do |key| table[key] = self[key] end return ["<", self.class.inspect, " ", table.inspect[1..-2], ">"].join end
length()
click to toggle source
# File lib/carray/struct.rb, line 195 def length return self.class::MEMBERS.length end
Also aliased as: size
members()
click to toggle source
# File lib/carray/struct.rb, line 201 def members return self.class::MEMBERS.clone end
swap_bytes()
click to toggle source
# File lib/carray/struct.rb, line 255 def swap_bytes return self.class.decode(@data.swap_bytes.dump_binary) end
swap_bytes!()
click to toggle source
# File lib/carray/struct.rb, line 250 def swap_bytes! @data.swap_bytes! return self end
to_ptr()
click to toggle source
# File lib/carray/struct.rb, line 259 def to_ptr return @data.to_ptr end
values()
click to toggle source
# File lib/carray/struct.rb, line 205 def values return members.map{|name| self[name] } end
Also aliased as: to_a
values_at(*names)
click to toggle source
# File lib/carray/struct.rb, line 211 def values_at (*names) return names.map{|name| self[name] } end
Protected Instance Methods
__data__()
click to toggle source
# File lib/carray/struct.rb, line 143 def __data__ @data end