Home
Reading
Searching
Subscribe
Sponsors
Statistics
Posting
Contact
Spam
Lists
Links
About
Hosting
Filtering
Features Download
Marketing
Archives
FAQ
Blog
 
Gmane
From: Liam Healy <lhealy <at> common-lisp.net>
Subject: Re: [cffi] FSBV (#2)
Newsgroups: gmane.lisp.cffi.devel
Date: Monday 20th February 2012 17:12:44 UTC (over 4 years ago)
Ryan -

I am forwarding this to CFFI-devel and Martin directly (though I'm pretty
sure he's subscribed to cffi-devel).  Can you please send future messages
to cffi-devel?  I'm not sure many people read the github mailing list; this
issue should get wider visibility.   Thanks.

Liam

On Mon, Feb 20, 2012 at 12:02 PM, Ryan Pavlik <
[email protected]eply.github.com
> wrote:

> I'm not sure what you mean.  It doesn't really matter that a pointer is
> aggregate or not.  The goal is to get at the Nth member of an
> array-of-something.  In the case of scalar C types, you're getting the
> value; in the case of structs it's far more useful to get a pointer,
> because you probably only want a single value out of the struct, or to
> **put a value into the struct**.  (The `setf` form works for scalars in
the
> latter case, but not for "member-of-struct-of-index-N"... you most likely
> want the pointer in these cases.)
>
> It also occurred to me after posting that there is no difference between
> `(mem-aref ptr '(:pointer (:struct foo)) N)` and just simply `(mem-aref
ptr
> :pointer N)` ... both return a pointer value as if `ptr` is a `void
> *ptr[k]`.
>
> A struct of more bytes works the same way:
>
> ```
> (cffi:defcstruct my-struct
>  (x :long)
>  (y :long)
>  (x :long)
>  (t :long))
>
> ...
>
> Old-ref style:
> ptr : #.(SB-SYS:INT-SAP #X7FFFEEFC7FB8)
> aref: #.(SB-SYS:INT-SAP #X7FFFEEFC7FD8)
> New-ref style:
> ptr : #.(SB-SYS:INT-SAP #X7FFFEEFC7FB8)
> aref: (T 0 Y 0 X 0)
> New-ref with :pointer style:
> ptr : #.(SB-SYS:INT-SAP #X7FFFEEFC7FB8)
> aref: #.(SB-SYS:INT-SAP #X00000000)
> ```
>
> Note that on my system, a pointer is 8 bytes, not 4.  This is why I
> initially found the problem, when trying to access an array of points
> defined by 2 short; each member is 4 bytes, and it was giving offsets to
> `sizeof(void*)`.
>
> ---
> Reply to this email directly or view it on GitHub:
> https://github.com/cffi/cffi/pull/2#issuecomment-4057418
>
 
CD: 4ms