From 842097d321e2ad9eedd7a171cdcca001d112de55 Mon Sep 17 00:00:00 2001 From: Felix Morgner Date: Fri, 16 May 2025 18:39:44 +0200 Subject: lib: implement addition of participants --- lib/src/turns-turn-order.cpp | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) (limited to 'lib/src/turns-turn-order.cpp') diff --git a/lib/src/turns-turn-order.cpp b/lib/src/turns-turn-order.cpp index 407ac3b..46ea0e6 100644 --- a/lib/src/turns-turn-order.cpp +++ b/lib/src/turns-turn-order.cpp @@ -39,6 +39,25 @@ namespace auto static constinit properties = std::array(property::N_PROPERTIES)>{}; + auto compare_participant(TurnsParticipant const * lhs, TurnsParticipant const * rhs) + { + auto left_priority = turns_participant_get_priority(lhs); + auto right_priority = turns_participant_get_priority(rhs); + + if (left_priority < right_priority) + { + return -1; + } + else if (left_priority > right_priority) + { + return 1; + } + else + { + return 0; + } + } + auto finalize(GObject * self) { auto instance = TURNS_TURN_ORDER(self); @@ -91,7 +110,7 @@ static void turns_turn_order_init(TurnsTurnOrder * self) static gpointer turns_turn_order_list_model_get_item(TurnsTurnOrder * self, guint position) { g_return_val_if_fail(position < turns_turn_order_get_participant_count(self), nullptr); - return g_slist_nth_data(self->participants, position); + return g_object_ref(g_slist_nth_data(self->participants, position)); } static guint turns_turn_order_list_model_get_n_items(TurnsTurnOrder * self) @@ -117,6 +136,12 @@ TurnsTurnOrder * turns_turn_order_new() return TURNS_TURN_ORDER(g_object_new(TURNS_TYPE_TURN_ORDER, nullptr)); } +void turns_turn_order_add(TurnsTurnOrder * self, TurnsParticipant * participant) +{ + g_return_if_fail(participant != nullptr); + self->participants = g_slist_insert_sorted(self->participants, g_object_ref(participant), std::bit_cast(&compare_participant)); +} + gsize turns_turn_order_get_participant_count(TurnsTurnOrder const * self) { g_return_val_if_fail(TURNS_IS_TURN_ORDER(const_cast(self)), 0); -- cgit v1.2.3