From 37732d5ccae97d80a9083ae295af018f154edb5a Mon Sep 17 00:00:00 2001 From: Felix Morgner Date: Sun, 14 Jul 2024 16:39:58 +0200 Subject: domain: add basic turn order type --- domain/src/turn_order.cpp | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 domain/src/turn_order.cpp (limited to 'domain/src/turn_order.cpp') diff --git a/domain/src/turn_order.cpp b/domain/src/turn_order.cpp new file mode 100644 index 0000000..8b9e042 --- /dev/null +++ b/domain/src/turn_order.cpp @@ -0,0 +1,40 @@ +#include "turns/domain/turn_order.hpp" + +namespace turns::domain +{ + + namespace + { + auto constexpr comparator = [](auto lhs, auto rhs){ + auto result = *lhs <=> *rhs; + if(result == std::partial_ordering::equivalent || result == std::partial_ordering::unordered) + { + return 0; + } + else if(result == std::partial_ordering::less) + { + return 1; + } + return -1; + }; + } + + auto turn_order::create() -> Glib::RefPtr + { + return Glib::make_refptr_for_instance(new turn_order{}); + } + + auto turn_order::append(Glib::ustring const & name, float order_value) -> turn_order & + { + auto participant = participant::create(name, order_value); + participant->property_order_value().signal_changed().connect([this] { sort(); }); + insert_sorted(participant, comparator); + return *this; + } + + auto turn_order::sort() -> void + { + super::sort(comparator); + } + +} // namespace turns::domain \ No newline at end of file -- cgit v1.2.3