From 72734d184b28953a14bf150ea13450fad5bba218 Mon Sep 17 00:00:00 2001 From: Varun Agrawal Date: Thu, 29 Jun 2023 12:12:48 -0400 Subject: [PATCH] overload += operator in Ordering --- gtsam/inference/Ordering.cpp | 12 ++++++++++++ gtsam/inference/Ordering.h | 20 +++++++------------- gtsam/inference/tests/testOrdering.cpp | 14 ++++++++++++++ 3 files changed, 33 insertions(+), 13 deletions(-) diff --git a/gtsam/inference/Ordering.cpp b/gtsam/inference/Ordering.cpp index 2956c7575..cb2ca752d 100644 --- a/gtsam/inference/Ordering.cpp +++ b/gtsam/inference/Ordering.cpp @@ -281,6 +281,18 @@ void Ordering::print(const std::string& str, cout.flush(); } +/* ************************************************************************* */ +Ordering::This& Ordering::operator+=(Key key) { + this->push_back(key); + return *this; +} + +/* ************************************************************************* */ +Ordering::This& Ordering::operator,(Key key) { + this->push_back(key); + return *this; +} + /* ************************************************************************* */ Ordering::This& Ordering::operator+=(KeyVector& keys) { this->insert(this->end(), keys.begin(), keys.end()); diff --git a/gtsam/inference/Ordering.h b/gtsam/inference/Ordering.h index 884a93f0d..86d44e072 100644 --- a/gtsam/inference/Ordering.h +++ b/gtsam/inference/Ordering.h @@ -25,10 +25,6 @@ #include #include -#ifdef GTSAM_USE_BOOST_FEATURES -#include -#endif - #include #include @@ -61,15 +57,13 @@ public: Base(keys.begin(), keys.end()) { } -#ifdef GTSAM_USE_BOOST_FEATURES - /// Add new variables to the ordering as ordering += key1, key2, ... Equivalent to calling - /// push_back. - boost::assign::list_inserter > operator+=( - Key key) { - return boost::assign::make_list_inserter( - boost::assign_detail::call_push_back(*this))(key); - } -#endif + /// Add new variables to the ordering as + /// `ordering += key1, key2, ...`. + This& operator+=(Key key); + + /// Overloading the comma operator allows for chaining appends + // e.g. keys += key1, key2 + This& operator,(Key key); /** * @brief Append new keys to the ordering as `ordering += keys`. diff --git a/gtsam/inference/tests/testOrdering.cpp b/gtsam/inference/tests/testOrdering.cpp index 761c330b4..328d383d8 100644 --- a/gtsam/inference/tests/testOrdering.cpp +++ b/gtsam/inference/tests/testOrdering.cpp @@ -196,6 +196,20 @@ TEST(Ordering, csr_format_3) { EXPECT(adjExpected == adjAcutal); } +/* ************************************************************************* */ +TEST(Ordering, AppendKey) { + using symbol_shorthand::X; + Ordering actual; + actual += X(0); + + Ordering expected1{X(0)}; + EXPECT(assert_equal(expected1, actual)); + + actual += X(1), X(2), X(3); + Ordering expected2{X(0), X(1), X(2), X(3)}; + EXPECT(assert_equal(expected2, actual)); +} + /* ************************************************************************* */ TEST(Ordering, AppendVector) { using symbol_shorthand::X;