Loading libs/vr/libpdx/private/pdx/rpc/variant.h +5 −4 Original line number Diff line number Diff line Loading @@ -429,7 +429,7 @@ class Variant { // Handles assignment from the empty type. This overload supports assignment // in visitors using generic lambdas. Variant& operator=(EmptyVariant) { Assign(EmptyVariant{}); Destruct(); return *this; } Loading Loading @@ -541,7 +541,10 @@ class Variant { void Construct(EmptyVariant) {} // Destroys the active element of the Variant. void Destruct() { value_.Destruct(index_); } void Destruct() { value_.Destruct(index_); index_ = kEmptyIndex; } // Assigns the Variant when non-empty and the current type matches the target // type, otherwise destroys the current value and constructs a element of the Loading @@ -562,8 +565,6 @@ class Variant { Construct(std::forward<T>(value)); } } // Handles assignment from an empty Variant. void Assign(EmptyVariant) { Destruct(); } }; // Utility type to extract/convert values from a variant. This class simplifies Loading libs/vr/libpdx/variant_tests.cpp +21 −2 Original line number Diff line number Diff line Loading @@ -584,6 +584,25 @@ TEST(Variant, CopyMoveConstructAssign) { EXPECT_EQ(0u, InstrumentType<int>::move_assignment_count()); EXPECT_EQ(1u, InstrumentType<int>::copy_assignment_count()); } { InstrumentType<int>::clear(); // Construct from temporary, temporary ctor/dtor. Variant<int, InstrumentType<int>> v(InstrumentType<int>(25)); // Assign EmptyVariant. v = EmptyVariant{}; EXPECT_EQ(2u, InstrumentType<int>::constructor_count()); EXPECT_EQ(2u, InstrumentType<int>::destructor_count()); EXPECT_EQ(0u, InstrumentType<int>::move_assignment_count()); EXPECT_EQ(0u, InstrumentType<int>::copy_assignment_count()); } EXPECT_EQ(2u, InstrumentType<int>::constructor_count()); EXPECT_EQ(2u, InstrumentType<int>::destructor_count()); EXPECT_EQ(0u, InstrumentType<int>::move_assignment_count()); EXPECT_EQ(0u, InstrumentType<int>::copy_assignment_count()); } TEST(Variant, MoveConstructor) { Loading Loading @@ -758,7 +777,7 @@ TEST(Variant, Swap) { Variant<std::string> b; std::swap(a, b); EXPECT_TRUE(!a.empty()); EXPECT_TRUE(a.empty()); EXPECT_TRUE(!b.empty()); ASSERT_TRUE(b.is<std::string>()); EXPECT_EQ("1", std::get<std::string>(b)); Loading @@ -770,7 +789,7 @@ TEST(Variant, Swap) { std::swap(a, b); EXPECT_TRUE(!a.empty()); EXPECT_TRUE(!b.empty()); EXPECT_TRUE(b.empty()); ASSERT_TRUE(a.is<std::string>()); EXPECT_EQ("1", std::get<std::string>(a)); } Loading Loading
libs/vr/libpdx/private/pdx/rpc/variant.h +5 −4 Original line number Diff line number Diff line Loading @@ -429,7 +429,7 @@ class Variant { // Handles assignment from the empty type. This overload supports assignment // in visitors using generic lambdas. Variant& operator=(EmptyVariant) { Assign(EmptyVariant{}); Destruct(); return *this; } Loading Loading @@ -541,7 +541,10 @@ class Variant { void Construct(EmptyVariant) {} // Destroys the active element of the Variant. void Destruct() { value_.Destruct(index_); } void Destruct() { value_.Destruct(index_); index_ = kEmptyIndex; } // Assigns the Variant when non-empty and the current type matches the target // type, otherwise destroys the current value and constructs a element of the Loading @@ -562,8 +565,6 @@ class Variant { Construct(std::forward<T>(value)); } } // Handles assignment from an empty Variant. void Assign(EmptyVariant) { Destruct(); } }; // Utility type to extract/convert values from a variant. This class simplifies Loading
libs/vr/libpdx/variant_tests.cpp +21 −2 Original line number Diff line number Diff line Loading @@ -584,6 +584,25 @@ TEST(Variant, CopyMoveConstructAssign) { EXPECT_EQ(0u, InstrumentType<int>::move_assignment_count()); EXPECT_EQ(1u, InstrumentType<int>::copy_assignment_count()); } { InstrumentType<int>::clear(); // Construct from temporary, temporary ctor/dtor. Variant<int, InstrumentType<int>> v(InstrumentType<int>(25)); // Assign EmptyVariant. v = EmptyVariant{}; EXPECT_EQ(2u, InstrumentType<int>::constructor_count()); EXPECT_EQ(2u, InstrumentType<int>::destructor_count()); EXPECT_EQ(0u, InstrumentType<int>::move_assignment_count()); EXPECT_EQ(0u, InstrumentType<int>::copy_assignment_count()); } EXPECT_EQ(2u, InstrumentType<int>::constructor_count()); EXPECT_EQ(2u, InstrumentType<int>::destructor_count()); EXPECT_EQ(0u, InstrumentType<int>::move_assignment_count()); EXPECT_EQ(0u, InstrumentType<int>::copy_assignment_count()); } TEST(Variant, MoveConstructor) { Loading Loading @@ -758,7 +777,7 @@ TEST(Variant, Swap) { Variant<std::string> b; std::swap(a, b); EXPECT_TRUE(!a.empty()); EXPECT_TRUE(a.empty()); EXPECT_TRUE(!b.empty()); ASSERT_TRUE(b.is<std::string>()); EXPECT_EQ("1", std::get<std::string>(b)); Loading @@ -770,7 +789,7 @@ TEST(Variant, Swap) { std::swap(a, b); EXPECT_TRUE(!a.empty()); EXPECT_TRUE(!b.empty()); EXPECT_TRUE(b.empty()); ASSERT_TRUE(a.is<std::string>()); EXPECT_EQ("1", std::get<std::string>(a)); } Loading