From c1e3569468bece280886b80e67131be84fc5caf8 Mon Sep 17 00:00:00 2001 From: Jeremy Nimmer Date: Tue, 31 Dec 2024 09:14:11 -0800 Subject: [PATCH] Add non-const overload for Root::Model() getter This is consistent with the getters for World which also overload on const-ness. Co-authored-by: Sean Curtis Signed-off-by: Jeremy Nimmer --- include/sdf/Root.hh | 5 +++++ src/Root.cc | 6 ++++++ src/Root_TEST.cc | 23 ++++++++++++++++------- 3 files changed, 27 insertions(+), 7 deletions(-) diff --git a/include/sdf/Root.hh b/include/sdf/Root.hh index 9ad5f1632..aa54c2222 100644 --- a/include/sdf/Root.hh +++ b/include/sdf/Root.hh @@ -170,6 +170,11 @@ namespace sdf /// \return A pointer to the model, nullptr if it doesn't exist public: const sdf::Model *Model() const; + /// \brief Get a mutable pointer to the model object if it exists. + /// + /// \return A pointer to the model; nullptr if it doesn't exist. + public: sdf::Model *Model(); + /// \brief Set the model object. This will override any existing model, /// actor, and light object. /// \param[in] _model The model to use. diff --git a/src/Root.cc b/src/Root.cc index 03349d2af..c15cf8d5d 100644 --- a/src/Root.cc +++ b/src/Root.cc @@ -475,6 +475,12 @@ const Model *Root::Model() const return std::get_if(&this->dataPtr->modelLightOrActor); } +///////////////////////////////////////////////// +Model *Root::Model() +{ + return std::get_if(&this->dataPtr->modelLightOrActor); +} + ///////////////////////////////////////////////// void Root::SetModel(const sdf::Model &_model) { diff --git a/src/Root_TEST.cc b/src/Root_TEST.cc index 4bb518ad2..6a4d75105 100644 --- a/src/Root_TEST.cc +++ b/src/Root_TEST.cc @@ -46,6 +46,9 @@ TEST(DOMRoot, Construction) EXPECT_EQ(nullptr, root.Model()); EXPECT_EQ(nullptr, root.Light()); EXPECT_EQ(nullptr, root.Actor()); + + const sdf::Root &const_root = root; + EXPECT_EQ(nullptr, const_root.Model()); } ///////////////////////////////////////////////// @@ -424,6 +427,7 @@ TEST(DOMRoot, ToElementEmpty) TEST(DOMRoot, ToElementModel) { sdf::Root root; + const sdf::Root &const_root = root; sdf::Actor actor1; actor1.SetName("actor1"); @@ -438,6 +442,7 @@ TEST(DOMRoot, ToElementModel) root.SetModel(model1); ASSERT_NE(nullptr, root.Model()); + ASSERT_NE(nullptr, const_root.Model()); ASSERT_EQ(nullptr, root.Light()); ASSERT_EQ(nullptr, root.Actor()); EXPECT_EQ(0u, root.WorldCount()); @@ -447,12 +452,15 @@ TEST(DOMRoot, ToElementModel) ASSERT_NE(nullptr, elem); sdf::Root root2; + const sdf::Root &const_root2 = root2; root2.LoadSdfString(elem->ToString("")); EXPECT_EQ(SDF_VERSION, root2.Version()); ASSERT_NE(nullptr, root2.Model()); + ASSERT_NE(nullptr, const_root2.Model()); EXPECT_EQ("model1", root2.Model()->Name()); + EXPECT_EQ("model1", const_root2.Model()->Name()); ASSERT_EQ(nullptr, root2.Actor()); ASSERT_EQ(nullptr, root2.Light()); @@ -651,22 +659,23 @@ TEST(DOMRoot, CopyConstructor) TEST(DOMRoot, WorldByName) { sdf::Root root; - EXPECT_EQ(0u, root.WorldCount()); + const sdf::Root &const_root = root; + EXPECT_EQ(0u, const_root.WorldCount()); sdf::World world; world.SetName("world1"); EXPECT_TRUE(root.AddWorld(world).empty()); - EXPECT_EQ(1u, root.WorldCount()); + EXPECT_EQ(1u, const_root.WorldCount()); - EXPECT_TRUE(root.WorldNameExists("world1")); - const sdf::World *wPtr = root.WorldByName("world1"); - EXPECT_NE(nullptr, wPtr); + EXPECT_TRUE(const_root.WorldNameExists("world1")); + EXPECT_NE(nullptr, root.WorldByName("world1")); + EXPECT_NE(nullptr, const_root.WorldByName("world1")); // Modify the world sdf::World *w = root.WorldByName("world1"); ASSERT_NE(nullptr, w); EXPECT_EQ("world1", w->Name()); w->SetName("world2"); - ASSERT_TRUE(root.WorldNameExists("world2")); - EXPECT_EQ("world2", root.WorldByName("world2")->Name()); + ASSERT_TRUE(const_root.WorldNameExists("world2")); + EXPECT_EQ("world2", const_root.WorldByName("world2")->Name()); }