summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNiels De Graef <nielsdegraef@gmail.com>2020-10-20 22:50:27 +0200
committerNiels De Graef <nielsdegraef@gmail.com>2020-10-20 22:50:27 +0200
commit4faa9508a8a6559affb81b0a4ff1ed1693b4a882 (patch)
tree3d05e0d6bbb4e23edd608fbb8451e921558b5a27
parent6cec0dee5c98fb80ee776f75f153dc30efc05b3d (diff)
downloadfolks-perf2.tar.gz
FolksSmallSet: Add take() methodperf2
-rw-r--r--backends/eds/lib/edsf-persona.vala18
-rw-r--r--folks/folks-generics.vapi3
-rw-r--r--folks/individual.vala6
-rw-r--r--folks/small-set.c23
-rw-r--r--tests/eds/add-contacts-stress-test.vala2
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 ()