core: make NMIP4Config struct private and directly embed private data

With GObject, the object structure and class structure must be public
to be able to inherit from the type. As NMIP4Config is not inherited
(final), we don't need that and we don't expect ever needing that for
this type.

Already now, we want to have the priv pointer directly accessible via
self->priv. The main reason is improved debugging, another reason
is faster lookup.

Now with the struct private, we can directly embed the private data
inside NMIP4Config. This avoids storing the private data outside separately
inside the GObject which involves a small overhead.
It becomes more attractive to do so, as every NMDevice has a multitude of
these NMIP4Config instances.

And likewise for NMIP6Config.
This commit is contained in:
Thomas Haller
2016-05-11 11:41:54 +02:00
parent 2e710c2e10
commit 51f2572db5
4 changed files with 43 additions and 46 deletions

View File

@@ -35,11 +35,7 @@
#include "nmdbus-ip4-config.h"
G_DEFINE_TYPE (NMIP4Config, nm_ip4_config, NM_TYPE_EXPORTED_OBJECT)
#define NM_IP4_CONFIG_GET_PRIVATE(o) ((o)->priv)
typedef struct _NMIP4ConfigPrivate {
typedef struct {
gboolean never_default;
guint32 gateway;
gboolean has_gateway;
@@ -60,6 +56,25 @@ typedef struct _NMIP4ConfigPrivate {
gboolean metered;
} NMIP4ConfigPrivate;
struct _NMIP4Config {
NMExportedObject parent;
NMIP4ConfigPrivate _priv;
};
struct _NMIP4ConfigClass {
NMExportedObjectClass parent;
};
G_DEFINE_TYPE (NMIP4Config, nm_ip4_config, NM_TYPE_EXPORTED_OBJECT)
#define NM_IP4_CONFIG_GET_PRIVATE(o) \
({ \
const NMIP4ConfigPrivate *_priv = &(o)->_priv; \
\
/* cast away the const. */ \
((NMIP4ConfigPrivate *) _priv); \
})
/* internal guint32 are assigned to gobject properties of type uint. Ensure, that uint is large enough */
G_STATIC_ASSERT (sizeof (uint) >= sizeof (guint32));
G_STATIC_ASSERT (G_MAXUINT >= 0xFFFFFFFF);
@@ -2199,10 +2214,7 @@ nm_ip4_config_equal (const NMIP4Config *a, const NMIP4Config *b)
static void
nm_ip4_config_init (NMIP4Config *config)
{
NMIP4ConfigPrivate *priv;
priv = G_TYPE_INSTANCE_GET_PRIVATE (config, NM_TYPE_IP4_CONFIG, NMIP4ConfigPrivate);
config->priv = priv;
NMIP4ConfigPrivate *priv = NM_IP4_CONFIG_GET_PRIVATE (config);
priv->addresses = g_array_new (FALSE, FALSE, sizeof (NMPlatformIP4Address));
priv->routes = g_array_new (FALSE, FALSE, sizeof (NMPlatformIP4Route));
@@ -2424,8 +2436,6 @@ nm_ip4_config_class_init (NMIP4ConfigClass *config_class)
GObjectClass *object_class = G_OBJECT_CLASS (config_class);
NMExportedObjectClass *exported_object_class = NM_EXPORTED_OBJECT_CLASS (config_class);
g_type_class_add_private (config_class, sizeof (NMIP4ConfigPrivate));
exported_object_class->export_path = NM_DBUS_PATH "/IP4Config/%u";
object_class->get_property = get_property;

View File

@@ -31,18 +31,7 @@
#define NM_IS_IP4_CONFIG_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_IP4_CONFIG))
#define NM_IP4_CONFIG_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_IP4_CONFIG, NMIP4ConfigClass))
struct _NMIP4ConfigPrivate;
struct _NMIP4Config {
NMExportedObject parent;
/* private */
struct _NMIP4ConfigPrivate *priv;
};
typedef struct {
NMExportedObjectClass parent;
} NMIP4ConfigClass;
typedef struct _NMIP4ConfigClass NMIP4ConfigClass;
/* internal */
#define NM_IP4_CONFIG_IFINDEX "ifindex"

View File

@@ -34,11 +34,7 @@
#include "nmdbus-ip6-config.h"
G_DEFINE_TYPE (NMIP6Config, nm_ip6_config, NM_TYPE_EXPORTED_OBJECT)
#define NM_IP6_CONFIG_GET_PRIVATE(o) ((o)->priv)
typedef struct _NMIP6ConfigPrivate {
typedef struct {
gboolean never_default;
struct in6_addr gateway;
GArray *addresses;
@@ -52,6 +48,24 @@ typedef struct _NMIP6ConfigPrivate {
gint64 route_metric;
} NMIP6ConfigPrivate;
struct _NMIP6Config {
NMExportedObject parent;
NMIP6ConfigPrivate _priv;
};
struct _NMIP6ConfigClass {
NMExportedObjectClass parent;
};
G_DEFINE_TYPE (NMIP6Config, nm_ip6_config, NM_TYPE_EXPORTED_OBJECT)
#define NM_IP6_CONFIG_GET_PRIVATE(o) \
({ \
const NMIP6ConfigPrivate *_priv = &(o)->_priv; \
\
/* cast away the const. */ \
((NMIP6ConfigPrivate *) _priv); \
})
NM_GOBJECT_PROPERTIES_DEFINE (NMIP6Config,
PROP_IFINDEX,
@@ -1887,10 +1901,7 @@ nm_ip6_config_equal (const NMIP6Config *a, const NMIP6Config *b)
static void
nm_ip6_config_init (NMIP6Config *config)
{
NMIP6ConfigPrivate *priv;
priv = G_TYPE_INSTANCE_GET_PRIVATE (config, NM_TYPE_IP6_CONFIG, NMIP6ConfigPrivate);
config->priv = priv;
NMIP6ConfigPrivate *priv = NM_IP6_CONFIG_GET_PRIVATE (config);
priv->addresses = g_array_new (FALSE, TRUE, sizeof (NMPlatformIP6Address));
priv->routes = g_array_new (FALSE, TRUE, sizeof (NMPlatformIP6Route));
@@ -2110,8 +2121,6 @@ nm_ip6_config_class_init (NMIP6ConfigClass *config_class)
GObjectClass *object_class = G_OBJECT_CLASS (config_class);
NMExportedObjectClass *exported_object_class = NM_EXPORTED_OBJECT_CLASS (config_class);
g_type_class_add_private (config_class, sizeof (NMIP6ConfigPrivate));
exported_object_class->export_path = NM_DBUS_PATH "/IP6Config/%u";
/* virtual methods */

View File

@@ -33,18 +33,7 @@
#define NM_IS_IP6_CONFIG_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_IP6_CONFIG))
#define NM_IP6_CONFIG_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_IP6_CONFIG, NMIP6ConfigClass))
struct _NMIP6ConfigPrivate;
struct _NMIP6Config {
NMExportedObject parent;
/* private */
struct _NMIP6ConfigPrivate *priv;
};
typedef struct {
NMExportedObjectClass parent;
} NMIP6ConfigClass;
typedef struct _NMIP6ConfigClass NMIP6ConfigClass;
/* internal */
#define NM_IP6_CONFIG_IFINDEX "ifindex"