101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
|
# File 'lib/windows_com/common.rb', line 101
def self.[](parent_vtbl, spec)
spec.each { |name, sig|
sig[0].unshift(:pointer)
}
Class.new(FFI::Struct) {
const_set :ParentVtbl, parent_vtbl
const_set :Spec, {}
self::Spec.merge!(self::ParentVtbl::Spec) if self::ParentVtbl
self::Spec.merge!(spec)
layout_args = self::Spec.map { |name, sig|
params, ret = sig
[name, callback(params, ret)]
}
layout_args.flatten!
layout(*layout_args)
}
end
|