On 02/02/2012 01:24 PM, Paolo Bonzini wrote:
On 02/02/2012 08:06 PM, Anthony Liguori wrote:
I don't want object.h to have a dependency on QObject. We need to phase
out QObject.
The header doesn't.
Couple things:
1) We shouldn't use generic interfaces to read/write properties from
objects. We should use type-safe accessors provided by the types
themselves.
2) If we want to get fancy, we can add property_set_int, etc. and then
implement (1) via header files that just call these functions.
That's what patch 5 does. But writing visitors in C is a royal PITA. The only
sane way to do so is via QObject.
You just need a variant visitor. It's pretty simple to do, essentially:
typedef struct VariantVisitor
{
Visitor parent;
enum { VV_INT, VV_STR } kind;
union { int64_t v_int; char *v_str };
} VariantVisitor;
/* input */
static void visit_int(...)
{
v->kind = TYPE_INT;
v->v_int = *value;
}
/* output */
static void visit_int(...)
{
assert(v->kind == TYPE_INT);
*value = v->v_int;
}
void variant_visitor_set_int(VariantVisitor *v, int64_t value)
{
v->kind = TYPE_INT;
v->v_int = value;
}
The only types that matter are int and string so the variant visitor is pretty
simple.
Regards,
Anthony Liguori
Paolo