diff options
| author | Felix Morgner <felix.morgner@gmail.com> | 2024-07-14 16:39:58 +0200 |
|---|---|---|
| committer | Felix Morgner <felix.morgner@gmail.com> | 2024-07-14 16:39:58 +0200 |
| commit | 37732d5ccae97d80a9083ae295af018f154edb5a (patch) | |
| tree | 45977187c68fe016fab835788486854211f7cf40 /domain/src | |
| parent | 3e6cc7e8e068447a2a2064754df56e18a1cf1c58 (diff) | |
| download | turns-37732d5ccae97d80a9083ae295af018f154edb5a.tar.xz turns-37732d5ccae97d80a9083ae295af018f154edb5a.zip | |
domain: add basic turn order type
Diffstat (limited to 'domain/src')
| -rw-r--r-- | domain/src/participant.cpp | 10 | ||||
| -rw-r--r-- | domain/src/turn_order.cpp | 40 |
2 files changed, 44 insertions, 6 deletions
diff --git a/domain/src/participant.cpp b/domain/src/participant.cpp index 8b16916..b52bcca 100644 --- a/domain/src/participant.cpp +++ b/domain/src/participant.cpp @@ -13,11 +13,9 @@ namespace turns::domain participant::participant(Glib::ustring name, float order_value) : Glib::ObjectBase{typeid(participant)} - , m_name{*this, "name"} - , m_order_value{*this, "order_value"} + , m_name{*this, "name", name} + , m_order_value{*this, "order_value", order_value} { - m_name = name; - m_order_value = order_value; } auto participant::operator<=>(participant const & other) const noexcept -> std::partial_ordering @@ -35,12 +33,12 @@ namespace turns::domain return m_name.get_proxy(); } - auto participant::property_over_value() -> Glib::PropertyProxy<float> + auto participant::property_order_value() -> Glib::PropertyProxy<float> { return m_order_value.get_proxy(); } - auto participant::property_over_value() const -> Glib::PropertyProxy_ReadOnly<float> + auto participant::property_order_value() const -> Glib::PropertyProxy_ReadOnly<float> { return m_order_value.get_proxy(); } 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<turn_order> + { + 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 |
