summaryrefslogtreecommitdiff
path: root/lib/src/turns-turn-order.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lib/src/turns-turn-order.cpp')
-rw-r--r--lib/src/turns-turn-order.cpp27
1 files changed, 26 insertions, 1 deletions
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<GParamSpec *, static_cast<std::size_t>(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<GCompareFunc>(&compare_participant));
+}
+
gsize turns_turn_order_get_participant_count(TurnsTurnOrder const * self)
{
g_return_val_if_fail(TURNS_IS_TURN_ORDER(const_cast<TurnsTurnOrder *>(self)), 0);