diff options
Diffstat (limited to 'domain/src')
| -rw-r--r-- | domain/src/turn_order.cpp | 21 |
1 files changed, 14 insertions, 7 deletions
diff --git a/domain/src/turn_order.cpp b/domain/src/turn_order.cpp index 454e27a..eddd468 100644 --- a/domain/src/turn_order.cpp +++ b/domain/src/turn_order.cpp @@ -23,6 +23,10 @@ namespace turns::domain } return -1; }; + + auto constexpr equal_comparator = [](auto lhs, auto rhs) { + return (lhs->get_name() == rhs->get_name()) && (lhs->get_priority() && rhs->get_priority()); + }; } // namespace auto turn_order::create() -> Glib::RefPtr<turn_order> @@ -30,11 +34,19 @@ namespace turns::domain return Glib::make_refptr_for_instance(new turn_order{}); } + auto turn_order::append(Glib::RefPtr<participant> item) -> void + { + if (auto [found, index] = find(item, equal_comparator); !found) + { + insert_sorted(item, comparator); + } + } + auto turn_order::append(Glib::ustring const & name, float priority) -> void { auto participant = participant::create(name, priority); - participant->property_priority().signal_changed().connect([this] { sort(); }); - insert_sorted(participant, comparator); + participant->property_priority().signal_changed().connect([this] { sort(comparator); }); + append(participant); } auto turn_order::remove(Glib::RefPtr<participant> item) -> void @@ -45,9 +57,4 @@ namespace turns::domain } } - auto turn_order::sort() -> void - { - super::sort(comparator); - } - } // namespace turns::domain
\ No newline at end of file |
