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, ... -- Gustavo Sverzut Barbieri http://profusion.mobi embedded systems -------------------------------------- MSN: barbi...@gmail.com Skype: gsbarbieri Mobile: +55 (19) 9225-2202 ------------------------------------------------------------------------------ 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