[folks/perf2: 2/2] FolksSmallSet: Add take() method
- From: Niels De Graef <nielsdg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [folks/perf2: 2/2] FolksSmallSet: Add take() method
- Date: Thu, 26 Nov 2020 20:34:49 +0000 (UTC)
commit 4faa9508a8a6559affb81b0a4ff1ed1693b4a882
Author: Niels De Graef <nielsdegraef gmail com>
Date: Tue Oct 20 22:50:27 2020 +0200
FolksSmallSet: Add take() method
backends/eds/lib/edsf-persona.vala | 18 +++++++++---------
folks/folks-generics.vapi | 3 +++
folks/individual.vala | 6 +++---
folks/small-set.c | 23 +++++++++++++++++++++++
tests/eds/add-contacts-stress-test.vala | 2 +-
5 files changed, 39 insertions(+), 13 deletions(-)
---
diff --git a/backends/eds/lib/edsf-persona.vala b/backends/eds/lib/edsf-persona.vala
index 5f03d248..baab5b7f 100644
--- a/backends/eds/lib/edsf-persona.vala
+++ b/backends/eds/lib/edsf-persona.vala
@@ -1269,7 +1269,7 @@ public class Edsf.Persona : Folks.Persona,
var default_role_fd = this._get_default_role ();
if (default_role_fd != null)
{
- new_roles.add ((!) default_role_fd);
+ new_roles.take ((!) (owned) default_role_fd);
}
unowned E.VCard vcard = (E.VCard) this.contact;
@@ -1321,7 +1321,7 @@ public class Edsf.Persona : Folks.Persona,
}
}
- new_roles.add (role_fd);
+ new_roles.take ((owned) role_fd);
}
if (!Folks.Internal.equal_sets<RoleFieldDetails> (new_roles, this._roles))
@@ -1376,7 +1376,7 @@ public class Edsf.Persona : Folks.Persona,
if (assistant != null && manager != "")
default_role.set_parameter ("assistant", (!) assistant);
- _default_role = default_role;
+ _default_role = (owned) default_role;
}
}
@@ -1434,7 +1434,7 @@ public class Edsf.Persona : Folks.Persona,
var email_fd = new EmailFieldDetails ((!) val);
this._update_params (email_fd, attr);
- new_email_addresses.add (email_fd);
+ new_email_addresses.take ((owned) email_fd);
}
if (!Folks.Internal.equal_sets<EmailFieldDetails> (new_email_addresses,
@@ -1477,7 +1477,7 @@ public class Edsf.Persona : Folks.Persona,
if (n != null && n != "")
{
var note = new NoteFieldDetails ((!) n);
- new_notes.add (note);
+ new_notes.take ((owned) note);
}
if (!Folks.Internal.equal_sets<NoteFieldDetails> (new_notes, this._notes))
@@ -1638,7 +1638,7 @@ public class Edsf.Persona : Folks.Persona,
{
var fd_u = new UrlFieldDetails ((!) u);
fd_u.set_parameter (AbstractFieldDetails.PARAM_TYPE, folks_type);
- new_urls.add (fd_u);
+ new_urls.take ((owned) fd_u);
}
}
@@ -1656,7 +1656,7 @@ public class Edsf.Persona : Folks.Persona,
var url_fd = new UrlFieldDetails ((!) val);
this._update_params (url_fd, attr);
- new_urls.add (url_fd);
+ new_urls.take ((owned) url_fd);
}
}
@@ -2006,7 +2006,7 @@ public class Edsf.Persona : Folks.Persona,
var phone_fd = new PhoneFieldDetails ((!) val);
this._update_params (phone_fd, attr);
- new_phone_numbers.add (phone_fd);
+ new_phone_numbers.take ((owned) phone_fd);
}
// Does not use phone comparison because this will try to match only
@@ -2118,7 +2118,7 @@ public class Edsf.Persona : Folks.Persona,
var pa_fd = new PostalAddressFieldDetails (address);
this._update_params (pa_fd, attr);
- new_postal_addresses.add (pa_fd);
+ new_postal_addresses.take ((owned) pa_fd);
}
if (!Folks.Internal.equal_sets<PostalAddressFieldDetails> (
diff --git a/folks/folks-generics.vapi b/folks/folks-generics.vapi
index 0f55c989..3a562a87 100644
--- a/folks/folks-generics.vapi
+++ b/folks/folks-generics.vapi
@@ -44,6 +44,9 @@ namespace Folks
#if FOLKS_COMPILATION
[CCode (cheader_filename = "folks/small-set-internal.h")]
public unowned G @get (int i);
+
+ [CCode (cheader_filename = "folks/small-set-internal.h")]
+ public bool take (owned G item);
#endif
}
}
diff --git a/folks/individual.vala b/folks/individual.vala
index d5daa146..5ce4af6b 100644
--- a/folks/individual.vala
+++ b/folks/individual.vala
@@ -2555,7 +2555,7 @@ public class Folks.Individual : Object,
new UrlFieldDetails (url_fd.value);
new_url_fd.extend_parameters (url_fd.parameters);
urls_set.set (new_url_fd.value, new_url_fd);
- new_urls.add (new_url_fd);
+ new_urls.take ((owned) new_url_fd);
}
}
}
@@ -2612,7 +2612,7 @@ public class Folks.Individual : Object,
new PhoneFieldDetails (phone_fd.value);
new_fd.extend_parameters (phone_fd.parameters);
phone_numbers_set.set (new_fd.value, new_fd);
- new_phone_numbers.add (new_fd);
+ new_phone_numbers.take ((owned) new_fd);
}
}
}
@@ -2671,7 +2671,7 @@ public class Folks.Individual : Object,
new EmailFieldDetails (email_fd.value,
email_fd.parameters);
emails_set.set (new_email_fd.value, new_email_fd);
- new_email_addresses.add (new_email_fd);
+ new_email_addresses.take ((owned) new_email_fd);
}
}
}
diff --git a/folks/small-set.c b/folks/small-set.c
index b5a19683..9fc4ef78 100644
--- a/folks/small-set.c
+++ b/folks/small-set.c
@@ -549,6 +549,29 @@ folks_small_set_contains (GeeAbstractCollection *collection,
return _find (self, item, NULL);
}
+/*
+ * folks_small_set_take:
+ * @self: A #FolksSmallSet
+ * @item: (transfer full):
+ *
+ * Adds @item and takes ownership.
+ *
+ * Returns: %TRUE if it was not already there.
+ */
+gboolean
+folks_small_set_take (FolksSmallSet *self,
+ gpointer item)
+{
+ g_return_val_if_fail (self != NULL, FALSE);
+ g_return_val_if_fail ((self->flags & FOLKS_SMALL_SET_FLAG_READ_ONLY) == 0, FALSE);
+
+ if (_find (self, item, NULL))
+ return FALSE;
+
+ g_ptr_array_add (self->items, item);
+ return TRUE;
+}
+
/*
* Add @item.
*
diff --git a/tests/eds/add-contacts-stress-test.vala b/tests/eds/add-contacts-stress-test.vala
index 74b9dab2..7588fc4d 100644
--- a/tests/eds/add-contacts-stress-test.vala
+++ b/tests/eds/add-contacts-stress-test.vala
@@ -28,7 +28,7 @@ public class AddContactsStressTestTests : EdsTest.TestCase
private Edsf.PersonaStore _pstore;
private bool _added_contacts = false;
private HashTable<string, bool> _contacts_found;
- private int _contacts_cnt = 1000;
+ private int _contacts_cnt = 10000;
private DateTime _start_time;
public AddContactsStressTestTests ()
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]