On 2012-01-31 17:12, Anthony Liguori wrote: > On 01/31/2012 08:58 AM, Paolo Bonzini wrote: >> On 01/31/2012 03:51 PM, Jan Kiszka wrote: >>>>> >>>>> BTW, this is yet another benefit of making structures public. You can >>>>> take the >>>>> address of a child and set link fields directly without accessors. >>> Well, that has two sides. We introduced properties to avoid this direct >>> messing. >>> >>> Does linking also work without exposing internals? >> >> Perhaps it doesn't need to expose internals. Just like we create interfaces >> automatically when creating a parent object, perhaps we can create children >> as >> well, like >> >> TypeInfo type_piix3 = { >> ... >> .children = { >> { "pic[0]", TYPE_I8259, offsetof(PIIX3, pic[0]) }, >> { "pic[1]", TYPE_I8259, offsetof(PIIX3, pic[1]) }, >> { "pit, TYPE_I8254, offsetof(PIIX3, pit) }, >> { "rtc", TYPE_RTC, offsetof(PIIX3, rtc) }, > > > Eeek. I absolutely want to avoid any offset based interfaces.
Why? > > You can just as well do: > > void object_property_add_child(Object *obj, const char *name, > const char *type, Object **child); > > It could then do: > > *child = object_new(type); How does this resolve where the link is stored in the opaque state structure? Jan -- Siemens AG, Corporate Technology, CT T DE IT 1 Corporate Competence Center Embedded Linux