[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH] Use new Xen public header for product numbers and names
On 01/10/2012 11:13, "Ian Jackson" <Ian.Jackson@xxxxxxxxxxxxx> wrote: > Paul Durrant writes ("RE: [Xen-devel] [PATCH] Use new Xen public header for > product numbers and names"): >> Ok. I'll come up with something we can use to define an array and >> then we can iterate over that. > > Great. > > > What do people think of this preprocessor approach, which I suggested > earlier: My usual way to do this would be to place the list in its own header file: pvdrivers_list.h: EACH(WINDOWS, 0x0001, "xensource-windows") EACH(...) ... Then e.g., #define EACH(name,num,string) PVDRIVERS_ID_##name = num, enum { #include "pvdrivers_list.h" } #undef EACH Which is a bit more abstruse on the consuming side, but does avoid the list itself being an ugly multi-line macro monster. I don't have a strong opinion on this by the way. :) Just saying... -- Keir > #define PVDRIVERS_LIST(EACH) \ > EACH(WINDOWS, 0x0001 /* Citrix */, "xensource-windows") \ > ... > > That can be used to generate arrays, or switch statements, or > whatever. For example in pvdrivers.h: > > #define PVDRIVERS_EACH_ENUM(name,num,string) \ > PVDRIVERS_ID_##name = num, > enum { > PVDRIVERS_LIST(PVDRIVERS_EACH_ENUM) > }; > > and then in qemu: > > #define PVDRIVERS_EACH_SWITCH(name,num,string) \ > case PVDRIVERS_ID_##name: product = string; break; > > switch (id) { > PVDRIVERS_LIST(PVDRIVERS_EACH_SWITCH) > default: > sprintf blah blah > } > > > If the indirect macro trick is too abstruse it's also possible to do > this: > > #define PVDRIVERS_LIST \ > PVDRIVERS_EACH(WINDOWS, 0x0001 /* Citrix */, "xensource-windows") \ > ... > > That can be used to generate arrays, or switch statements, or > whatever. For example in pvdrivers.h: > > #define PVDRIVERS_EACH(name,num,string) \ > PVDRIVERS_ID_##name = num, > enum { > PVDRIVERS_LIST > }; > #undef PVDRIVERS_EACH > > and then in qemu: > > #define PVDRIVERS_EACH(name,num,string) \ > case PVDRIVERS_ID_##name: product = string; break; > > switch (id) { > PVDRIVERS_LIST > default: > sprintf blah blah > } > > #undef PVDRIVERS_EACH > > > A #define containing an array initialiser is the other obvious > alternative although of course the macro-based approaches I sketch > above can be used to define arrays but not vice versa. > > > Ian. > > _______________________________________________ > Xen-devel mailing list > Xen-devel@xxxxxxxxxxxxx > http://lists.xen.org/xen-devel _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |