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
size()
Alias for: length
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_a()
Alias for: values
to_ptr() click to toggle source
# File lib/carray/struct.rb, line 259
def to_ptr
  return @data.to_ptr
end
to_s()
Alias for: encode
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