Re: feature request for setting _pack_ to a higher value

Axel Seibert <[email protected]>
Newsgroups gmane.comp.python.ctypes
Message-ID <[email protected]>
Hi, Thomas!

Thanx for your suggestion. I took your code and changed my union definition. I believe your code has an issue if size happens to be the same as value (8 in our example), because then modulo operation in the line delta = 8 - size % 8 yields 0, and then delta is set to 8, while it actually should be 0. Right?

So, the original fill_union raises the following exception:
Assert sizeof(N13ARValueStruct3DOT_1E) == 8, sizeof(N13ARValueStruct3DOT_1E
AssertionError: 16

After changing the logic to return the fields unchanged in case size == value, I get another exception:
assert alignment(N13ARValueStruct3DOT_1E) == 8, alignment(N13ARValueStruct3DOT_1E)
AssertionError: 4

So, while the size is now calculated ok, the alignment still is not ok. 
Any thoughts?

Thanx,
Axel



Am 13.04.2010 um 22:01 schrieb Thomas Heller:

> Axel Seibert schrieb:
>> Hi, Thomas!
>> 
>> Thanx for asking -- no, I have not found any other solution yet.
> 
> Ok, so the remaining question was:  How can I change a (generated) ctypes Union
> definition so that the packing is a multiple of an arbitrary value, 8 in this case.
> 
> Background:  A Union contains all the _fields_ in the same memory block (they overlay
> each other; only one is normally valid), so the Union size is the size of the largest
> field.  We have now the goal to bring the union size up to a multiple of 8 by adding
> a dummy field.  Here is the ode that I wrote:
> 
> <snip>
> from ctypes import *
> 
> def fill_union(value, fields):
>    size = 0
>    for name, typ in fields:
>        size = max(size, sizeof(typ))
>    delta = 8 - size % 8
>    return fields + [("", c_char * (size + delta))]
> 
> class X(Union):
>    _fields_ = fill_union(8, [("a", c_char),
>                              ("b", c_short),
>                              ("c", c_char * 31)])
> 
> print sizeof(X)
> <snip/>
> 
>> So long,
>> Axel
>> 
>> Am 09.04.2010 um 10:02 schrieb Thomas Heller:
>> 
>>> Axel Seibert schrieb:
>>>> Hi, Thomas!
>>>> 
>>>> I tried to apply your solution to my problem. I found two issues with that:
>>>> a) a couple of my structs that require padding are Unions. Do you have a solution for that?
>>>> b) I believe that line "missing = a - size % a" needs to be replaced by missing = a - sizeof(t) % a
>>> 
>>> Axel - sorry for this delayed reply; I'm very short on time.  Is the question
>>> still open or did you find a solution yourself in the meantime?
>>> 
>>> -- 
>>> Thanks,
>>> Thomas
>>> 
>>> 
>>> ------------------------------------------------------------------------------
>>> Download Intel&#174; Parallel Studio Eval
>>> Try the new software tools for yourself. Speed compiling, find bugs
>>> proactively, and fine-tune applications for parallel performance.
>>> See why Intel Parallel Studio got high marks during beta.
>>> http://p.sf.net/sfu/intel-sw-dev
>>> _______________________________________________
>>> ctypes-users mailing list
>>> [email protected]
>>> https://lists.sourceforge.net/lists/listinfo/ctypes-users
>>> 
>> 
>> 
>> ------------------------------------------------------------------------------
>> Download Intel&#174; Parallel Studio Eval
>> Try the new software tools for yourself. Speed compiling, find bugs
>> proactively, and fine-tune applications for parallel performance.
>> See why Intel Parallel Studio got high marks during beta.
>> http://p.sf.net/sfu/intel-sw-dev
> 
> 
> -- 
> Thanks,
> Thomas
> 
> 
> ------------------------------------------------------------------------------
> Download Intel&#174; Parallel Studio Eval
> Try the new software tools for yourself. Speed compiling, find bugs
> proactively, and fine-tune applications for parallel performance.
> See why Intel Parallel Studio got high marks during beta.
> http://p.sf.net/sfu/intel-sw-dev
> _______________________________________________
> ctypes-users mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/ctypes-users
> 


------------------------------------------------------------------------------
Download Intel&#174; Parallel Studio Eval
Try the new software tools for yourself. Speed compiling, find bugs
proactively, and fine-tune applications for parallel performance.
See why Intel Parallel Studio got high marks during beta.
http://p.sf.net/sfu/intel-sw-dev
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.