
On Tue, May 17, 2011 at 04:42:09PM -0600, Eric Blake wrote:
* include/libvirt/libvirt.h.in (virTypedParameterType) (VIR_TYPED_PARAM_FIELD_LENGTH, _virTypedParameter): New enum, macro, and type. (virSchedParameter, virBlkioParameter, virMemoryParameter): Rewrite in terms of a common type, while keeping all old public names for backwards compatibility. (struct _virSchedParameter, struct _virBlkioParameter) (struct _virMemoryParameter): Delete - these are private names. * python/generator.py (enum): Cope with the refactoring. --- include/libvirt/libvirt.h.in | 144 +++++++++++++++++++++++------------------ python/generator.py | 12 ++++ 2 files changed, 93 insertions(+), 63 deletions(-)
diff --git a/include/libvirt/libvirt.h.in b/include/libvirt/libvirt.h.in index a174201..7cd6e13 100644 --- a/include/libvirt/libvirt.h.in +++ b/include/libvirt/libvirt.h.in @@ -281,18 +281,70 @@ struct _virNodeInfo { };
+/* Common data types shared among interfaces with name/type/value lists. */ + +/** + * virTypedParameterType: + * + * Express the type of a virTypedParameter + */ +typedef enum { + VIR_TYPED_PARAM_INT = 1, /* integer case */ + VIR_TYPED_PARAM_UINT = 2, /* unsigned integer case */ + VIR_TYPED_PARAM_LLONG = 3, /* long long case */ + VIR_TYPED_PARAM_ULLONG = 4, /* unsigned long long case */ + VIR_TYPED_PARAM_DOUBLE = 5, /* double case */ + VIR_TYPED_PARAM_BOOLEAN = 6 /* boolean(character) case */ +} virTypedParameterType; + +/** + * VIR_TYPED_PARAM_FIELD_LENGTH: + * + * Macro providing the field length of virTypedParameter name + */ +#define VIR_TYPED_PARAM_FIELD_LENGTH 80 + +/** + * virTypedParameter: + * + * A named parameter, including a type and value. + */ +typedef struct _virTypedParameter virTypedParameter; + +struct _virTypedParameter { + char field[VIR_TYPED_PARAM_FIELD_LENGTH]; /* parameter name */ + int type; /* parameter type, virTypedParameterType */
virTypedParameterType type; ?
+ union { + int i; /* type is INT */ + unsigned int ui; /* type is UINT */ + long long int l; /* type is LLONG */ + unsigned long long int ul; /* type is ULLONG */ + double d; /* type is DOUBLE */ + char b; /* type is BOOLEAN */ + } value; /* parameter value */ +}; + +/** + * virTypedParameterPtr: + * + * a pointer to a virTypedParameter structure. + */ +typedef virTypedParameter *virTypedParameterPtr; + +/* Management of scheduler parameters */ + /** * virDomainSchedParameterType: * * A scheduler parameter field type */ typedef enum { - VIR_DOMAIN_SCHED_FIELD_INT = 1, /* integer case */ - VIR_DOMAIN_SCHED_FIELD_UINT = 2, /* unsigned integer case */ - VIR_DOMAIN_SCHED_FIELD_LLONG = 3, /* long long case */ - VIR_DOMAIN_SCHED_FIELD_ULLONG = 4, /* unsigned long long case */ - VIR_DOMAIN_SCHED_FIELD_DOUBLE = 5, /* double case */ - VIR_DOMAIN_SCHED_FIELD_BOOLEAN = 6 /* boolean(character) case */ + VIR_DOMAIN_SCHED_FIELD_INT = VIR_TYPED_PARAM_INT, + VIR_DOMAIN_SCHED_FIELD_UINT = VIR_TYPED_PARAM_UINT, + VIR_DOMAIN_SCHED_FIELD_LLONG = VIR_TYPED_PARAM_LLONG, + VIR_DOMAIN_SCHED_FIELD_ULLONG = VIR_TYPED_PARAM_ULLONG, + VIR_DOMAIN_SCHED_FIELD_DOUBLE = VIR_TYPED_PARAM_DOUBLE, + VIR_DOMAIN_SCHED_FIELD_BOOLEAN = VIR_TYPED_PARAM_BOOLEAN, } virSchedParameterType;
Can we remove VIR_DOMAIN_SCHED_FIELD_XXX and use VIR_TYPED_PARAM_XXX directly since parameter types are basically types like int, long, ... and don't depend on what parameters are? Likewise for other PARAMs in this patch.
typedef enum { @@ -307,7 +359,7 @@ typedef enum { * Macro providing the field length of virSchedParameter */
-#define VIR_DOMAIN_SCHED_FIELD_LENGTH 80 +#define VIR_DOMAIN_SCHED_FIELD_LENGTH VIR_TYPED_PARAM_FIELD_LENGTH
/** * virDomainSchedParameter: @@ -315,20 +367,7 @@ typedef enum { * a virDomainSchedParameter is the set of scheduler parameters */
-typedef struct _virSchedParameter virSchedParameter; - -struct _virSchedParameter { - char field[VIR_DOMAIN_SCHED_FIELD_LENGTH]; /* parameter name */ - int type; /* parameter type */ - union { - int i; /* data for integer case */ - unsigned int ui; /* data for unsigned integer case */ - long long int l; /* data for long long integer case */ - unsigned long long int ul; /* data for unsigned long long integer case */ - double d; /* data for double case */ - char b; /* data for char case */ - } value; /* parameter value */ -}; +typedef struct _virTypedParameter virSchedParameter;
/** * virSchedParameterPtr: @@ -758,18 +797,21 @@ int virDomainGetState (virDomainPtr domain, */ char * virDomainGetSchedulerType(virDomainPtr domain, int *nparams); + +/* Manage blkio parameters. */ + /** * virDomainBlkioParameterType: * * A blkio parameter field type */ typedef enum { - VIR_DOMAIN_BLKIO_PARAM_INT = 1, /* integer case */ - VIR_DOMAIN_BLKIO_PARAM_UINT = 2, /* unsigned integer case */ - VIR_DOMAIN_BLKIO_PARAM_LLONG = 3, /* long long case */ - VIR_DOMAIN_BLKIO_PARAM_ULLONG = 4, /* unsigned long long case */ - VIR_DOMAIN_BLKIO_PARAM_DOUBLE = 5, /* double case */ - VIR_DOMAIN_BLKIO_PARAM_BOOLEAN = 6 /* boolean(character) case */ + VIR_DOMAIN_BLKIO_PARAM_INT = VIR_TYPED_PARAM_INT, + VIR_DOMAIN_BLKIO_PARAM_UINT = VIR_TYPED_PARAM_UINT, + VIR_DOMAIN_BLKIO_PARAM_LLONG = VIR_TYPED_PARAM_LLONG, + VIR_DOMAIN_BLKIO_PARAM_ULLONG = VIR_TYPED_PARAM_ULLONG, + VIR_DOMAIN_BLKIO_PARAM_DOUBLE = VIR_TYPED_PARAM_DOUBLE, + VIR_DOMAIN_BLKIO_PARAM_BOOLEAN = VIR_TYPED_PARAM_BOOLEAN, } virBlkioParameterType;
/** @@ -778,7 +820,7 @@ typedef enum { * Macro providing the field length of virBlkioParameter */
-#define VIR_DOMAIN_BLKIO_FIELD_LENGTH 80 +#define VIR_DOMAIN_BLKIO_FIELD_LENGTH VIR_TYPED_PARAM_FIELD_LENGTH
/** * VIR_DOMAIN_BLKIO_WEIGHT: @@ -795,20 +837,7 @@ typedef enum { * a virDomainBlkioParameter is the set of blkio parameters */
-typedef struct _virBlkioParameter virBlkioParameter; - -struct _virBlkioParameter { - char field[VIR_DOMAIN_BLKIO_FIELD_LENGTH]; /* parameter name */ - int type; /* parameter type */ - union { - int i; /* data for integer case */ - unsigned int ui; /* data for unsigned integer case */ - long long int l; /* data for long long integer case */ - unsigned long long int ul; /* data for unsigned long long integer case */ - double d; /* data for double case */ - char b; /* data for char case */ - } value; /* parameter value */ -}; +typedef struct _virTypedParameter virBlkioParameter;
/** * virBlkioParameterPtr: @@ -826,18 +855,20 @@ int virDomainGetBlkioParameters(virDomainPtr domain, virBlkioParameterPtr params, int *nparams, unsigned int flags);
+/* Manage memory parameters. */ + /** * virDomainMemoryParameterType: * * A memory parameter field type */ typedef enum { - VIR_DOMAIN_MEMORY_PARAM_INT = 1, /* integer case */ - VIR_DOMAIN_MEMORY_PARAM_UINT = 2, /* unsigned integer case */ - VIR_DOMAIN_MEMORY_PARAM_LLONG = 3, /* long long case */ - VIR_DOMAIN_MEMORY_PARAM_ULLONG = 4, /* unsigned long long case */ - VIR_DOMAIN_MEMORY_PARAM_DOUBLE = 5, /* double case */ - VIR_DOMAIN_MEMORY_PARAM_BOOLEAN = 6 /* boolean(character) case */ + VIR_DOMAIN_MEMORY_PARAM_INT = VIR_TYPED_PARAM_INT, + VIR_DOMAIN_MEMORY_PARAM_UINT = VIR_TYPED_PARAM_UINT, + VIR_DOMAIN_MEMORY_PARAM_LLONG = VIR_TYPED_PARAM_LLONG, + VIR_DOMAIN_MEMORY_PARAM_ULLONG = VIR_TYPED_PARAM_ULLONG, + VIR_DOMAIN_MEMORY_PARAM_DOUBLE = VIR_TYPED_PARAM_DOUBLE, + VIR_DOMAIN_MEMORY_PARAM_BOOLEAN = VIR_TYPED_PARAM_BOOLEAN, } virMemoryParameterType;
/** @@ -846,7 +877,7 @@ typedef enum { * Macro providing the field length of virMemoryParameter */
-#define VIR_DOMAIN_MEMORY_FIELD_LENGTH 80 +#define VIR_DOMAIN_MEMORY_FIELD_LENGTH VIR_TYPED_PARAM_FIELD_LENGTH
/** * VIR_DOMAIN_MEMORY_PARAM_UNLIMITED: @@ -899,20 +930,7 @@ typedef enum { * a virDomainMemoryParameter is the set of scheduler parameters */
-typedef struct _virMemoryParameter virMemoryParameter; - -struct _virMemoryParameter { - char field[VIR_DOMAIN_MEMORY_FIELD_LENGTH]; /* parameter name */ - int type; /* parameter type */ - union { - int i; /* data for integer case */ - unsigned int ui; /* data for unsigned integer case */ - long long int l; /* data for long long integer case */ - unsigned long long int ul; /* data for unsigned long long integer case */ - double d; /* data for double case */ - char b; /* data for char case */ - } value; /* parameter value */ -}; +typedef struct _virTypedParameter virMemoryParameter;
/** * virMemoryParameterPtr: diff --git a/python/generator.py b/python/generator.py index 9f9deb2..1741bba 100755 --- a/python/generator.py +++ b/python/generator.py @@ -154,6 +154,18 @@ def function(name, desc, ret, args, file, cond): def enum(type, name, value): if not enums.has_key(type): enums[type] = {} + if value == 'VIR_TYPED_PARAM_INT': + value = 1 + elif value == 'VIR_TYPED_PARAM_UINT': + value = 2 + elif value == 'VIR_TYPED_PARAM_LLONG': + value = 3 + elif value == 'VIR_TYPED_PARAM_ULLONG': + value = 4 + elif value == 'VIR_TYPED_PARAM_DOUBLE': + value = 5 + elif value == 'VIR_TYPED_PARAM_BOOLEAN': + value = 6 enums[type][name] = value
####################################################################### -- 1.7.4.4
-- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list