From ef5297c13b0035db7703995ed14dbd2dd747d6be Mon Sep 17 00:00:00 2001 From: Felix Morgner Date: Fri, 16 May 2025 15:50:18 +0200 Subject: lib: switch to SList for participant storage --- lib/src/turns-turn-order.cpp | 41 ++++++++++++++++------------------------- 1 file changed, 16 insertions(+), 25 deletions(-) (limited to 'lib') diff --git a/lib/src/turns-turn-order.cpp b/lib/src/turns-turn-order.cpp index 3d1b4eb..407ac3b 100644 --- a/lib/src/turns-turn-order.cpp +++ b/lib/src/turns-turn-order.cpp @@ -9,7 +9,6 @@ #include #include #include -#include G_BEGIN_DECLS @@ -17,8 +16,7 @@ struct _TurnsTurnOrder { GObject parent_instance; - GList participants; - gsize participant_count; + GSList * participants; gboolean running; }; @@ -35,21 +33,27 @@ namespace { enum struct property { - ParticipantCount = 1, - Running, + Running = 1, N_PROPERTIES, }; auto static constinit properties = std::array(property::N_PROPERTIES)>{}; + auto finalize(GObject * self) + { + auto instance = TURNS_TURN_ORDER(self); + + g_slist_free_full(instance->participants, g_object_unref); + + G_OBJECT_CLASS(turns_turn_order_parent_class)->finalize(self); + } + auto get_property(GObject * self, guint id, GValue * value, GParamSpec * specification) -> void { auto instance = TURNS_TURN_ORDER(self); switch (static_cast(id)) { - case property::ParticipantCount: - return g_value_set_uint64(value, turns_turn_order_get_participant_count(instance)); case property::Running: return g_value_set_boolean(value, turns_turn_order_get_running(instance)); default: @@ -65,17 +69,9 @@ static void turns_turn_order_class_init(TurnsTurnOrderClass * klass) { auto object_class = G_OBJECT_CLASS(klass); + object_class->finalize = finalize; object_class->get_property = get_property; - properties[static_cast(property::ParticipantCount)] = - g_param_spec_uint64("participant-count", - "Participant Count", - "The number of participants in this turn order.", - 0, - std::numeric_limits::max(), - 0, - static_cast(G_PARAM_STATIC_STRINGS | G_PARAM_READABLE | G_PARAM_EXPLICIT_NOTIFY)); - properties[static_cast(property::Running)] = g_param_spec_boolean("running", "Running", @@ -88,19 +84,14 @@ static void turns_turn_order_class_init(TurnsTurnOrderClass * klass) static void turns_turn_order_init(TurnsTurnOrder * self) { - self->participants = { - .data = nullptr, - .next = nullptr, - .prev = nullptr, - }; - self->participant_count = 0; + self->participants = nullptr; self->running = false; } static gpointer turns_turn_order_list_model_get_item(TurnsTurnOrder * self, guint position) { - g_return_val_if_fail(position < self->participant_count, nullptr); - return g_list_nth_data(&self->participants, position); + g_return_val_if_fail(position < turns_turn_order_get_participant_count(self), nullptr); + return g_slist_nth_data(self->participants, position); } static guint turns_turn_order_list_model_get_n_items(TurnsTurnOrder * self) @@ -129,7 +120,7 @@ TurnsTurnOrder * turns_turn_order_new() gsize turns_turn_order_get_participant_count(TurnsTurnOrder const * self) { g_return_val_if_fail(TURNS_IS_TURN_ORDER(const_cast(self)), 0); - return self->participant_count; + return g_slist_length(self->participants); } gboolean turns_turn_order_get_running(TurnsTurnOrder const * self) -- cgit v1.2.3