# File dl/lib/dl/struct.rb, line 91 def malloc(size = nil) if( !size ) size = @size end ptr = DL::malloc(size) return new(ptr) end
ptr must be a PtrData object.
# File dl/lib/dl/struct.rb, line 85 def new(ptr) ptr.struct!(@tys, *@names) mem = Memory.new(ptr, @names, @ty, @len, @enc, @dec) return mem end
# File dl/lib/dl/struct.rb, line 99 def parse(contents) contents.each{|elem| name,ty,num,enc,dec = parse_elem(elem) @names.push(name) @ty[name] = ty @len[name] = num @enc[name] = enc @dec[name] = dec if( num ) @tys += "#{ty}#{num}" else @tys += ty end } @size = DL.sizeof(@tys) end
# File dl/lib/dl/struct.rb, line 116 def parse_elem(elem) elem.strip! case elem when /^([\w\d_\*]+)([\*\s]+)([\w\d_]+)$/ ty = ($1 + $2).strip name = $3 num = nil; when /^([\w\d_\*]+)([\*\s]+)([\w\d_]+)\[(\d+)\]$/ ty = ($1 + $2).strip name = $3 num = $4.to_i else raise(RuntimeError, "invalid element: #{elem}") end ty,enc,dec = @types.encode_struct_type(ty) if( !ty ) raise(TypeError, "unsupported type: #{ty}") end return [name,ty,num,enc,dec] end