diff options
Diffstat (limited to 'lib/src/turns-turn-order.cpp')
| -rw-r--r-- | lib/src/turns-turn-order.cpp | 41 |
1 files changed, 16 insertions, 25 deletions
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 <array> #include <bit> #include <cstddef> -#include <limits> 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<GParamSpec *, static_cast<std::size_t>(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<property>(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<std::size_t>(property::ParticipantCount)] = - g_param_spec_uint64("participant-count", - "Participant Count", - "The number of participants in this turn order.", - 0, - std::numeric_limits<gsize>::max(), - 0, - static_cast<GParamFlags>(G_PARAM_STATIC_STRINGS | G_PARAM_READABLE | G_PARAM_EXPLICIT_NOTIFY)); - properties[static_cast<std::size_t>(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<TurnsTurnOrder *>(self)), 0); - return self->participant_count; + return g_slist_length(self->participants); } gboolean turns_turn_order_get_running(TurnsTurnOrder const * self) |
