[libvirt] [PATCH 1/7] libvirt.h: consolidate typed parameter handling
Hu Tao
hutao at cn.fujitsu.com
Wed May 18 02:49:02 UTC 2011
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 at redhat.com
> https://www.redhat.com/mailman/listinfo/libvir-list
More information about the libvir-list
mailing list