From 578a0a5214806c18a981a990539bcf0b71156f11 Mon Sep 17 00:00:00 2001 From: Ben Kelly Date: Thu, 7 Aug 2014 22:47:31 +1000 Subject: Added operator< overload for Entity class. Allowing use of Entity obects in std::set and std::map. Added test code. --- entityx/Entity.h | 4 ++++ entityx/Entity_test.cc | 28 ++++++++++++++++++++++++++++ 2 files changed, 32 insertions(+) mode change 100755 => 100644 entityx/Entity_test.cc diff --git a/entityx/Entity.h b/entityx/Entity.h index 7312e25..e30f87e 100644 --- a/entityx/Entity.h +++ b/entityx/Entity.h @@ -102,6 +102,10 @@ public: return !(other == *this); } + bool operator < (const Entity &other) const { + return other.id_ < id_; + } + /** * Is this Entity handle valid? * diff --git a/entityx/Entity_test.cc b/entityx/Entity_test.cc old mode 100755 new mode 100644 index ee1ccac..9140773 --- a/entityx/Entity_test.cc +++ b/entityx/Entity_test.cc @@ -15,6 +15,8 @@ #include #include #include +#include +#include #include "entityx/3rdparty/catch.hpp" #include "entityx/Entity.h" @@ -23,6 +25,9 @@ using namespace entityx; using std::ostream; using std::vector; +using std::set; +using std::map; +using std::pair; using std::string; template @@ -491,3 +496,26 @@ TEST_CASE_METHOD(EntityManagerFixture, "TestDeleteEntityWithNoComponents") { Entity b = em.create(); b.destroy(); } + +TEST_CASE_METHOD(EntityManagerFixture, "TestEntityInStdSet") { + Entity a = em.create(); + Entity b = em.create(); + Entity c = em.create(); + set entitySet; + REQUIRE(entitySet.insert(a).second); + REQUIRE(entitySet.insert(b).second); + REQUIRE(entitySet.insert(c).second); +} + +TEST_CASE_METHOD(EntityManagerFixture, "TestEntityInStdMap") { + Entity a = em.create(); + Entity b = em.create(); + Entity c = em.create(); + map entityMap; + REQUIRE(entityMap.insert(pair(a, 1)).second); + REQUIRE(entityMap.insert(pair(b, 2)).second); + REQUIRE(entityMap.insert(pair(c, 3)).second); + REQUIRE(entityMap[a] == 1); + REQUIRE(entityMap[b] == 2); + REQUIRE(entityMap[c] == 3); +} -- cgit v1.2.3