def self.array_field_class_from(type, num)
klass_name = type.name.split('::').last
code = "class ArrayField_\#{klass_name}_\#{num} < Field\n@info = \#{type}\n@num = \#{num}\nclass << self\nattr_reader :info, :num\ndef size\n\#{type.size} * \#{num}\nend\ndef align\n\#{type.align}\nend\nend\ndef get(ptr)\n@array ? @array : get_array_data(ptr)\nend\nprivate\ndef get_array_data(ptr)\n@array = FFI::Struct::Array.new(ptr + @off, self.class.info, self.class.num)\nend\nend\nArrayField_\#{klass_name}_\#{num}\n"
self.module_eval(code)
end