proxy: embed private date in NMPacRunnerManager and NMProxyConfig

These are final/sealed types (that is without subclasses). We can
hide the type structures and neatly embed the private data there.
This commit is contained in:
Thomas Haller 2016-08-19 09:32:20 +02:00
parent 27811b792c
commit a9820a63d4
4 changed files with 59 additions and 33 deletions

View file

@ -28,12 +28,8 @@
#include "nm-ip4-config.h"
#include "nm-ip6-config.h"
G_DEFINE_TYPE (NMPacRunnerManager, nm_pacrunner_manager, G_TYPE_OBJECT)
NM_DEFINE_SINGLETON_INSTANCE (NMPacRunnerManager);
#define NM_PACRUNNER_MANAGER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_PACRUNNER_MANAGER, NMPacRunnerManagerPrivate))
#define PACRUNNER_DBUS_SERVICE "org.pacrunner"
#define PACRUNNER_DBUS_INTERFACE "org.pacrunner.Manager"
#define PACRUNNER_DBUS_PATH "/org/pacrunner/manager"
@ -52,6 +48,30 @@ typedef struct {
GList *remove;
} NMPacRunnerManagerPrivate;
struct _NMPacRunnerManager {
GObject parent;
NMPacRunnerManagerPrivate _priv;
};
struct _NMPacRunnerManagerClass {
GObjectClass parent;
};
G_DEFINE_TYPE (NMPacRunnerManager, nm_pacrunner_manager, G_TYPE_OBJECT)
#define NM_PACRUNNER_MANAGER_GET_PRIVATE(self) \
({ \
/* preserve the const-ness of self. Unfortunately, that
* way, @self cannot be a void pointer */ \
typeof (self) _self = (self); \
\
/* Get compiler error if variable is of wrong type */ \
_nm_unused const NMPacRunnerManager *_self2 = (_self); \
\
nm_assert (NM_IS_PACRUNNER_MANAGER (_self)); \
&_self->_priv; \
})
/*****************************************************************************/
#define _NMLOG_DOMAIN LOGD_PROXY
@ -470,7 +490,7 @@ nm_pacrunner_manager_init (NMPacRunnerManager *self)
static void
dispose (GObject *object)
{
NMPacRunnerManagerPrivate *priv = NM_PACRUNNER_MANAGER_GET_PRIVATE (object);
NMPacRunnerManagerPrivate *priv = NM_PACRUNNER_MANAGER_GET_PRIVATE ((NMPacRunnerManager *) object);
g_clear_pointer (&priv->iface, g_free);
@ -492,7 +512,5 @@ nm_pacrunner_manager_class_init (NMPacRunnerManagerClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
g_type_class_add_private (object_class, sizeof (NMPacRunnerManagerPrivate));
object_class->dispose = dispose;
}

View file

@ -28,13 +28,7 @@
#define NM_IS_PACRUNNER_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_PACRUNNER_MANAGER))
#define NM_PACRUNNER_MANAGER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_PACRUNNER_MANAGER, NMPacRunnerManagerClass))
struct _NMPacRunnerManager {
GObject parent;
};
typedef struct {
GObjectClass parent;
} NMPacRunnerManagerClass;
typedef struct _NMPacRunnerManagerClass NMPacRunnerManagerClass;
GType nm_pacrunner_manager_get_type (void);

View file

@ -26,10 +26,6 @@
#include "nm-core-internal.h"
#define NM_PROXY_CONFIG_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_PROXY_CONFIG, NMProxyConfigPrivate))
G_DEFINE_TYPE (NMProxyConfig, nm_proxy_config, G_TYPE_OBJECT)
typedef struct {
NMProxyConfigMethod method;
GPtrArray *proxies;
@ -39,6 +35,32 @@ typedef struct {
char *pac_script;
} NMProxyConfigPrivate;
struct _NMProxyConfig {
GObject parent;
NMProxyConfigPrivate _priv;
};
struct _NMProxyConfigClass {
GObjectClass parent;
};
G_DEFINE_TYPE (NMProxyConfig, nm_proxy_config, G_TYPE_OBJECT)
#define NM_PROXY_CONFIG_GET_PRIVATE(self) \
({ \
/* preserve the const-ness of self. Unfortunately, that
* way, @self cannot be a void pointer */ \
typeof (self) _self = (self); \
\
/* Get compiler error if variable is of wrong type */ \
_nm_unused const NMProxyConfig *_self2 = (_self); \
\
nm_assert (NM_IS_PROXY_CONFIG (_self)); \
&_self->_priv; \
})
/*****************************************************************************/
NMProxyConfig *
nm_proxy_config_new (void)
{
@ -56,7 +78,7 @@ nm_proxy_config_set_method (NMProxyConfig *config, NMProxyConfigMethod method)
NMProxyConfigMethod
nm_proxy_config_get_method (const NMProxyConfig *config)
{
NMProxyConfigPrivate *priv = NM_PROXY_CONFIG_GET_PRIVATE (config);
const NMProxyConfigPrivate *priv = NM_PROXY_CONFIG_GET_PRIVATE (config);
return priv->method;
}
@ -153,7 +175,7 @@ nm_proxy_config_merge_setting (NMProxyConfig *config, NMSettingProxy *setting)
char **
nm_proxy_config_get_proxies (const NMProxyConfig *config)
{
NMProxyConfigPrivate *priv = NM_PROXY_CONFIG_GET_PRIVATE (config);
const NMProxyConfigPrivate *priv = NM_PROXY_CONFIG_GET_PRIVATE (config);
return _nm_utils_ptrarray_to_strv (priv->proxies);
}
@ -161,7 +183,7 @@ nm_proxy_config_get_proxies (const NMProxyConfig *config)
char **
nm_proxy_config_get_excludes (const NMProxyConfig *config)
{
NMProxyConfigPrivate *priv = NM_PROXY_CONFIG_GET_PRIVATE (config);
const NMProxyConfigPrivate *priv = NM_PROXY_CONFIG_GET_PRIVATE (config);
return _nm_utils_ptrarray_to_strv (priv->excludes);
}
@ -169,7 +191,7 @@ nm_proxy_config_get_excludes (const NMProxyConfig *config)
gboolean
nm_proxy_config_get_browser_only (const NMProxyConfig *config)
{
NMProxyConfigPrivate *priv = NM_PROXY_CONFIG_GET_PRIVATE (config);
const NMProxyConfigPrivate *priv = NM_PROXY_CONFIG_GET_PRIVATE (config);
return priv->browser_only;
}
@ -186,7 +208,7 @@ nm_proxy_config_set_pac_url (NMProxyConfig *config, const char *url)
const char *
nm_proxy_config_get_pac_url (const NMProxyConfig *config)
{
NMProxyConfigPrivate *priv = NM_PROXY_CONFIG_GET_PRIVATE (config);
const NMProxyConfigPrivate *priv = NM_PROXY_CONFIG_GET_PRIVATE (config);
return priv->pac_url;
}
@ -203,7 +225,7 @@ nm_proxy_config_set_pac_script (NMProxyConfig *config, const char *script)
const char *
nm_proxy_config_get_pac_script (const NMProxyConfig *config)
{
NMProxyConfigPrivate *priv = NM_PROXY_CONFIG_GET_PRIVATE (config);
const NMProxyConfigPrivate *priv = NM_PROXY_CONFIG_GET_PRIVATE (config);
return priv->pac_script;
}
@ -239,7 +261,5 @@ nm_proxy_config_class_init (NMProxyConfigClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
g_type_class_add_private (object_class, sizeof (NMProxyConfigPrivate));
object_class->finalize = finalize;
}

View file

@ -36,13 +36,7 @@ typedef enum {
#define NM_IS_PROXY_CONFIG_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_PROXY_CONFIG))
#define NM_PROXY_CONFIG_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_PROXY_CONFIG, NMProxyConfigClass))
struct _NMProxyConfig {
GObject parent;
};
typedef struct {
GObjectClass parent;
} NMProxyConfigClass;
typedef struct _NMProxyConfigClass NMProxyConfigClass;
GType nm_proxy_config_get_type (void);