Re: [PATCH spice-server v2 3/4] Introduce a macro to help declaring new GObject

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Acked-by: Christophe Fergeau <cfergeau@xxxxxxxxxx>

On Mon, Sep 18, 2017 at 04:04:56PM +0100, Frediano Ziglio wrote:
> The macro will implement most of the boilerplate needed to declare an
> object.
> Its usage is similar to GLib G_DECLARE_*_TYPE macros.
> 
> Signed-off-by: Frediano Ziglio <fziglio@xxxxxxxxxx>
> ---
> Changes since v3:
> - define just SPICE_DECLARE_TYPE.
> Changes since v2:
> - declare only SPICE_DECLARE_TYPE, all type should have proper types and
>   namespace.
> Changes since v1:
> - use SPICE_ prefix instead of GOBJECT_;
> - if RED_ prefix is used use this prefix for all GLib
>   macros.
> ---
>  server/red-common.h | 26 ++++++++++++++++++++++++++
>  1 file changed, 26 insertions(+)
> 
> diff --git a/server/red-common.h b/server/red-common.h
> index 9ff1fd9b5..b9ab4aa5d 100644
> --- a/server/red-common.h
> +++ b/server/red-common.h
> @@ -93,4 +93,30 @@ typedef struct GListIter {
>  #define GLIST_FOREACH_REVERSED(_list, _type, _data) \
>      GLIST_FOREACH_GENERIC(_list, G_PASTE(_iter_, __LINE__), _type, _data, prev)
>  
> +/* Helper to declare a GObject type
> + *
> + * @ModuleObjName     type identifier like MyObject
> + * @module_obj_name   method prefix like my_object (no need to add the
> + *                    underscore)
> + * @OBJ_NAME          macro common part like MY_OBJECT
> + */
> +#define SPICE_DECLARE_TYPE(ModuleObjName, module_obj_name, OBJ_NAME) \
> +    typedef struct ModuleObjName ModuleObjName; \
> +    typedef struct ModuleObjName ## Class ModuleObjName ## Class; \
> +    typedef struct ModuleObjName ## Private ModuleObjName ## Private; \
> +    GType module_obj_name ## _get_type(void) G_GNUC_CONST; \
> +    static inline ModuleObjName *G_PASTE(RED_,OBJ_NAME)(void *obj) \
> +    { return G_TYPE_CHECK_INSTANCE_CAST(obj, \
> +             module_obj_name ## _get_type(), ModuleObjName); } \
> +    static inline ModuleObjName ## Class *G_PASTE(G_PASTE(RED_,OBJ_NAME),_CLASS)(void *klass) \
> +    { return G_TYPE_CHECK_CLASS_CAST(klass, \
> +             module_obj_name ## _get_type(), ModuleObjName ## Class); } \
> +    static inline gboolean G_PASTE(RED_IS_,OBJ_NAME)(void *obj) \
> +    { return G_TYPE_CHECK_INSTANCE_TYPE(obj, module_obj_name ## _get_type()); } \
> +    static inline gboolean G_PASTE(G_PASTE(RED_IS_,OBJ_NAME),_CLASS)(void *klass) \
> +    { return G_TYPE_CHECK_CLASS_TYPE((klass), module_obj_name ## _get_type()); } \
> +    static inline ModuleObjName ## Class *G_PASTE(G_PASTE(RED_,OBJ_NAME),_GET_CLASS)(void *obj) \
> +    { return G_TYPE_INSTANCE_GET_CLASS(obj, \
> +             module_obj_name ## _get_type(), ModuleObjName ## Class); }
> +
>  #endif /* RED_COMMON_H_ */
> -- 
> 2.13.5
> 
> _______________________________________________
> Spice-devel mailing list
> Spice-devel@xxxxxxxxxxxxxxxxxxxxx
> https://lists.freedesktop.org/mailman/listinfo/spice-devel
_______________________________________________
Spice-devel mailing list
Spice-devel@xxxxxxxxxxxxxxxxxxxxx
https://lists.freedesktop.org/mailman/listinfo/spice-devel




[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux]     [Linux OMAP]     [Linux MIPS]     [ECOS]     [Asterisk Internet PBX]     [Linux API]     [Monitors]