summaryrefslogtreecommitdiff
path: root/domain/src
diff options
context:
space:
mode:
Diffstat (limited to 'domain/src')
-rw-r--r--domain/src/participant.cpp10
-rw-r--r--domain/src/turn_order.cpp40
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