Gustavo Sverzut Barbieri schrieb: > On Fri, May 1, 2009 at 8:18 AM, Vincent Torri <vto...@univ-evry.fr> wrote: > >> On Fri, 1 May 2009, Gustavo Sverzut Barbieri wrote: >> >> >>> On Thu, Apr 30, 2009 at 9:13 PM, Carsten Haitzler <ras...@rasterman.com> >>> wrote: >>> >>>> On Thu, 30 Apr 2009 18:02:45 -0300 Gustavo Sverzut Barbieri >>>> <barbi...@profusion.mobi> said: >>>> >>>> >>>>> On Thu, Apr 30, 2009 at 10:11 AM, Albin Tonnerre >>>>> <albin.tonne...@gmail.com> wrote: >>>>> >>>>>> Hello, >>>>>> >>>>>> While playing with Eina_Inlist, I noticed that given a pointer to an >>>>>> Eina_Inlist, one can't easily get a pointer to the structure containing >>>>>> it. >>>>>> The only option now is to put the Eina_Inlist first in the structure, >>>>>> and >>>>>> then cast this structure to an Eina_Inlist, which is far from optimal. >>>>>> I'd therefore like to propose that we add in eina_inlist.h a macro >>>>>> along the >>>>>> lines of >>>>>> >>>>>> #define FIND_A_SENSBILE_NAME_FOR_THIS(ptr, type) ((type *) >>>>>> ((Eina_Inlist *) >>>>>> #ptr - offsetof(type, __in_list))) >>>>>> >>>>>> Then, we could get a pointer to the containing structure, no matter >>>>>> where >>>>>> the Eina_Inlist is (note that I used __in_list as the member as we >>>>>> already >>>>>> have a macro '#define EINA_INLIST Eina_Inlist __in_list', but a member >>>>>> argument could be added just as well) >>>>>> >>>>>> Thoughts ? >>>>>> >>>>> As we discussed on IRC, I like this. It would help avoid casts and try >>>>> to make code bit easier to get right. >>>>> >>>> much uglier as now you need to drag an offset # around all the time, and >>>> now >>>> you still need to cast anyway (use a raw pointer offset and cast to ah >>>> Inlist >>>> pointer). you don't get rid of it. >>>> >>>> inheritance in c in the end requires casting. thats how c does it. dont >>>> be >>>> afraid of casting or think its ugly. it's how c becomes powerful and >>>> flexible. >>>> >>> As the macro says, it still does the cast, BUT this cast will add some >>> safety since if you change types somewhere and forget in some place, >>> compiler will warn you. >>> >>> The only problem I see and I already talked to Albin about it is on >>> weird compilers without offsetof() macros. >>> >> offsetof seems to exist in the lib c of Microsoft >> > > it's not a libc, rather compiler as it's executed at compile time. It > works on struct and its members information, no dependency on real > memory, pointers, ... >
It's a macro in stddef.h, so it's part of the libc. ------------------------------------------------------------------------------ Register Now & Save for Velocity, the Web Performance & Operations Conference from O'Reilly Media. Velocity features a full day of expert-led, hands-on workshops and two days of sessions from industry leaders in dedicated Performance & Operations tracks. Use code vel09scf and Save an extra 15% before 5/3. http://p.sf.net/sfu/velocityconf _______________________________________________ enlightenment-devel mailing list enlightenment-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-devel