diff options
author | Niels De Graef <nielsdegraef@gmail.com> | 2020-10-20 22:50:27 +0200 |
---|---|---|
committer | Niels De Graef <nielsdegraef@gmail.com> | 2020-10-20 22:50:27 +0200 |
commit | 4faa9508a8a6559affb81b0a4ff1ed1693b4a882 (patch) | |
tree | 3d05e0d6bbb4e23edd608fbb8451e921558b5a27 | |
parent | 6cec0dee5c98fb80ee776f75f153dc30efc05b3d (diff) | |
download | folks-perf2.tar.gz |
FolksSmallSet: Add take() methodperf2
-rw-r--r-- | backends/eds/lib/edsf-persona.vala | 18 | ||||
-rw-r--r-- | folks/folks-generics.vapi | 3 | ||||
-rw-r--r-- | folks/individual.vala | 6 | ||||
-rw-r--r-- | folks/small-set.c | 23 | ||||
-rw-r--r-- | 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 @@ -550,6 +550,29 @@ folks_small_set_contains (GeeAbstractCollection *collection, } /* + * 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. * * Returns: %TRUE if it was not already there. 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 () |