diff options
author | Thomas Haller <thaller@redhat.com> | 2016-04-28 14:10:06 +0200 |
---|---|---|
committer | Thomas Haller <thaller@redhat.com> | 2016-04-28 14:36:24 +0200 |
commit | 8bc895d5aa27e70a4302598d6a7c39b786acf4a0 (patch) | |
tree | 9584b48392c5d700af046473c0486788e0ef18b5 | |
parent | d27a80c4df243d3d73b902440f2d4a1f47961476 (diff) | |
download | NetworkManager-8bc895d5aa27e70a4302598d6a7c39b786acf4a0.tar.gz |
manager: embed NMManagerPrivate data directly into NMManager struct
For a type to be inheritable, its public struct (NMManager) must
be known. As nobody inherits NMManager, we can make it private.
As the struct is private anyway, we can also reuse it for the private
data directly, instead of registering NMManagerPrivate in the manager
class.
There are advantages and disadvantages:
+ simplifies debugging, as the self pointer also contains the
private data.
+ removes a small overhead of tracking the private data separately
- is a different way to implement the class, contrary to many
other classes.
- inheriting from the class later requires reverting this change
(but we will never inherit from NMManager).
- as it is now, nobody uses the priv field directly and we still
access it via NM_MANAGER_GET_PRIVATE(self). However, the presence
of the priv field might encourage us to use it directly -- which
increases above disadvantages.
-rw-r--r-- | src/nm-manager.c | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/src/nm-manager.c b/src/nm-manager.c index 7a94800626..2edf3fda49 100644 --- a/src/nm-manager.c +++ b/src/nm-manager.c @@ -140,13 +140,14 @@ typedef struct { struct _NMManager { NMExportedObject parent; + NMManagerPrivate priv; }; typedef struct { NMExportedObjectClass parent; } NMManagerClass; -#define NM_MANAGER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_MANAGER, NMManagerPrivate)) +#define NM_MANAGER_GET_PRIVATE(o) ({ nm_assert (NM_IS_MANAGER (o)); &((o)->priv); }) G_DEFINE_TYPE (NMManager, nm_manager, NM_TYPE_EXPORTED_OBJECT) @@ -1942,11 +1943,12 @@ factory_component_added_cb (NMDeviceFactory *factory, GObject *component, gpointer user_data) { + NMManager *self = user_data; GSList *iter; - g_return_val_if_fail (NM_IS_MANAGER (user_data), FALSE); + g_return_val_if_fail (self, FALSE); - for (iter = NM_MANAGER_GET_PRIVATE (user_data)->devices; iter; iter = iter->next) { + for (iter = NM_MANAGER_GET_PRIVATE (self)->devices; iter; iter = iter->next) { if (nm_device_notify_component_added ((NMDevice *) iter->data, component)) return TRUE; } @@ -5465,8 +5467,6 @@ nm_manager_class_init (NMManagerClass *manager_class) GObjectClass *object_class = G_OBJECT_CLASS (manager_class); NMExportedObjectClass *exported_object_class = NM_EXPORTED_OBJECT_CLASS (manager_class); - g_type_class_add_private (manager_class, sizeof (NMManagerPrivate)); - exported_object_class->export_path = NM_DBUS_PATH; /* virtual methods */ |