Kaydet (Commit) cb11bca5 authored tarafından Bjoern Michaelsen's avatar Bjoern Michaelsen

add unique() function

Change-Id: I9866a2725bc74e3afd90eb5c32587beb7f4f6e2a
üst bf449c26
...@@ -85,6 +85,9 @@ namespace sw ...@@ -85,6 +85,9 @@ namespace sw
/** @return the previous item in the ring container */ /** @return the previous item in the ring container */
const_value_type* GetPrevInRing() const const_value_type* GetPrevInRing() const
{ return pPrev; } { return pPrev; }
/** @return true if and only if this item is alone in its ring */
bool unique() const
{ return algo::unique(static_cast< const_value_type* >(this)); }
private: private:
/** internal implementation class -- not for external use */ /** internal implementation class -- not for external use */
......
...@@ -1282,6 +1282,8 @@ namespace ...@@ -1282,6 +1282,8 @@ namespace
{ return GetNextInRing(); } { return GetNextInRing(); }
TestRing* GetPrev() TestRing* GetPrev()
{ return GetPrevInRing(); } { return GetPrevInRing(); }
bool lonely() const
{ return unique(); }
#if 0 #if 0
void debug() void debug()
{ {
...@@ -1301,11 +1303,17 @@ void SwDocTest::testIntrusiveRing() ...@@ -1301,11 +1303,17 @@ void SwDocTest::testIntrusiveRing()
vRings.push_back(&aRing4); vRings.push_back(&aRing4);
vRings.push_back(&aRing5); vRings.push_back(&aRing5);
CPPUNIT_ASSERT_EQUAL(aRing1.GetRingContainer().size(), static_cast<size_t>(1)); CPPUNIT_ASSERT_EQUAL(aRing1.GetRingContainer().size(), static_cast<size_t>(1));
CPPUNIT_ASSERT(aRing1.lonely());
CPPUNIT_ASSERT(aRing2.lonely());
CPPUNIT_ASSERT(aRing3.lonely());
aRing2.MoveTo(&aRing1); aRing2.MoveTo(&aRing1);
aRing3.MoveTo(&aRing1); aRing3.MoveTo(&aRing1);
CPPUNIT_ASSERT_EQUAL(aRing1.GetRingContainer().size(), static_cast<size_t>(3)); CPPUNIT_ASSERT_EQUAL(aRing1.GetRingContainer().size(), static_cast<size_t>(3));
CPPUNIT_ASSERT_EQUAL(aRing2.GetRingContainer().size(), static_cast<size_t>(3)); CPPUNIT_ASSERT_EQUAL(aRing2.GetRingContainer().size(), static_cast<size_t>(3));
CPPUNIT_ASSERT_EQUAL(aRing3.GetRingContainer().size(), static_cast<size_t>(3)); CPPUNIT_ASSERT_EQUAL(aRing3.GetRingContainer().size(), static_cast<size_t>(3));
CPPUNIT_ASSERT(!aRing1.lonely());
CPPUNIT_ASSERT(!aRing2.lonely());
CPPUNIT_ASSERT(!aRing3.lonely());
aRing5.MoveTo(&aRing4); aRing5.MoveTo(&aRing4);
CPPUNIT_ASSERT_EQUAL(aRing4.GetRingContainer().size(), static_cast<size_t>(2)); CPPUNIT_ASSERT_EQUAL(aRing4.GetRingContainer().size(), static_cast<size_t>(2));
aRing4.GetRingContainer().merge(aRing1.GetRingContainer()); aRing4.GetRingContainer().merge(aRing1.GetRingContainer());
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment