mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* ext/dl/lib/dl/struct.rb (DL::CStructEntity#set_ctypes): Refactored
#set_ctypes using newer ruby features to simplify its implementation. * test/dl/test_c_struct_entry.rb (class DL): Test to verify refactoring. Reviewed by Aaron Patterson. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@35857 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
4f69926f75
commit
fe962cde15
3 changed files with 31 additions and 19 deletions
|
@ -1,3 +1,10 @@
|
||||||
|
Fri Jun 1 06:57:10 2012 Eric Hodel <drbrain@segment7.net>
|
||||||
|
|
||||||
|
* ext/dl/lib/dl/struct.rb (DL::CStructEntity#set_ctypes): Refactored
|
||||||
|
#set_ctypes using newer ruby features to simplify its implementation.
|
||||||
|
* test/dl/test_c_struct_entry.rb (class DL): Test to verify
|
||||||
|
refactoring.
|
||||||
|
|
||||||
Fri Jun 1 06:40:25 2012 Eric Hodel <drbrain@segment7.net>
|
Fri Jun 1 06:40:25 2012 Eric Hodel <drbrain@segment7.net>
|
||||||
|
|
||||||
* object.c (Init_Object): Restored Kernel documentation based on
|
* object.c (Init_Object): Restored Kernel documentation based on
|
||||||
|
|
|
@ -127,27 +127,20 @@ module DL
|
||||||
@ctypes = types
|
@ctypes = types
|
||||||
@offset = []
|
@offset = []
|
||||||
offset = 0
|
offset = 0
|
||||||
max_align = 0
|
|
||||||
types.each_with_index{|t,i|
|
max_align = types.map { |type, count = 1|
|
||||||
orig_offset = offset
|
orig_offset = offset
|
||||||
if( t.is_a?(Array) )
|
align = ALIGN_MAP[type]
|
||||||
align = ALIGN_MAP[t[0]]
|
|
||||||
else
|
|
||||||
align = ALIGN_MAP[t]
|
|
||||||
end
|
|
||||||
offset = PackInfo.align(orig_offset, align)
|
offset = PackInfo.align(orig_offset, align)
|
||||||
@offset[i] = offset
|
|
||||||
if( t.is_a?(Array) )
|
@offset << offset
|
||||||
offset += (SIZE_MAP[t[0]] * t[1])
|
|
||||||
else
|
offset += (SIZE_MAP[type] * count)
|
||||||
offset += SIZE_MAP[t]
|
|
||||||
end
|
align
|
||||||
if (max_align < align)
|
}.max
|
||||||
max_align = align
|
|
||||||
end
|
@size = PackInfo.align(offset, max_align)
|
||||||
}
|
|
||||||
offset = PackInfo.align(offset, max_align)
|
|
||||||
@size = offset
|
|
||||||
end
|
end
|
||||||
|
|
||||||
# Fetch struct member +name+
|
# Fetch struct member +name+
|
||||||
|
|
|
@ -37,5 +37,17 @@ class DL::TestCStructEntity < DL::TestBase
|
||||||
|
|
||||||
assert_equal expected, size
|
assert_equal expected, size
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_set_ctypes
|
||||||
|
union = DL::CStructEntity.malloc [DL::TYPE_INT, DL::TYPE_LONG]
|
||||||
|
union.assign_names %w[int long]
|
||||||
|
|
||||||
|
# this test is roundabout because the stored ctypes are not accessible
|
||||||
|
union['long'] = 1
|
||||||
|
union['int'] = 2
|
||||||
|
|
||||||
|
assert_equal 1, union['long']
|
||||||
|
assert_equal 2, union['int']
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue