Class DL::Importable::Internal::Struct
In: dl/struct.rb
Parent: Object

Methods

malloc   members   new   new   parse   parse_elem   size  

Public Class methods

[Source]

    # File dl/struct.rb, line 65
65:         def initialize(types, contents)
66:           @names = []
67:           @ty   = {}
68:           @len  = {}
69:           @enc  = {}
70:           @dec  = {}
71:           @size = 0
72:           @tys  = ""
73:           @types = types
74:           parse(contents)
75:         end

Public Instance methods

[Source]

    # File dl/struct.rb, line 92
92:         def malloc(size = nil)
93:           if( !size )
94:             size = @size
95:           end
96:           ptr = DL::malloc(size)
97:           return new(ptr)
98:         end

[Source]

    # File dl/struct.rb, line 81
81:         def members
82:           return @names
83:         end

ptr must be a PtrData object.

[Source]

    # File dl/struct.rb, line 86
86:         def new(ptr)
87:           ptr.struct!(@tys, *@names)
88:           mem = Memory.new(ptr, @names, @ty, @len, @enc, @dec)
89:           return mem
90:         end

[Source]

     # File dl/struct.rb, line 100
100:         def parse(contents)
101:           contents.each{|elem|
102:             name,ty,num,enc,dec = parse_elem(elem)
103:             @names.push(name)
104:             @ty[name]  = ty
105:             @len[name] = num
106:             @enc[name] = enc
107:             @dec[name] = dec
108:             if( num )
109:               @tys += "#{ty}#{num}"
110:             else
111:               @tys += ty
112:             end
113:           }
114:           @size = DL.sizeof(@tys)
115:         end

[Source]

     # File dl/struct.rb, line 117
117:         def parse_elem(elem)
118:           elem.strip!
119:           case elem
120:           when /^([\w\d_\*]+)([\*\s]+)([\w\d_]+)$/
121:             ty = ($1 + $2).strip
122:             name = $3
123:             num = nil;
124:           when /^([\w\d_\*]+)([\*\s]+)([\w\d_]+)\[(\d+)\]$/
125:             ty = ($1 + $2).strip
126:             name = $3
127:             num = $4.to_i
128:           else
129:             raise(RuntimeError, "invalid element: #{elem}")
130:           end
131:           ty,enc,dec = @types.encode_struct_type(ty)
132:           if( !ty )
133:             raise(TypeError, "unsupported type: #{ty}")
134:           end
135:           return [name,ty,num,enc,dec]
136:         end

[Source]

    # File dl/struct.rb, line 77
77:         def size
78:           return @size
79:         end

Search

Google

Ruby API Docs

Links