Author: tabish
Date: Wed Feb 4 22:11:25 2009
New Revision: 740916
URL: http://svn.apache.org/viewvc?rev=740916&view=rev
Log:
Adds the ability to define what the comparison is for map keys, defaults to the
standard std::less comparator. Completes the definition of the Comparator
interface in Util, adds a PointerComparator to the Pointer class so that the
elements in a Pointer can be compared based on the actual contained objects and
not just the underlying pointer value. Adds some test cases to validate these
classes.
Modified:
activemq/activemq-cpp/trunk/src/main/decaf/lang/Pointer.h
activemq/activemq-cpp/trunk/src/test/decaf/lang/PointerTest.cpp
Modified: activemq/activemq-cpp/trunk/src/main/decaf/lang/Pointer.h
URL:
http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/src/main/decaf/lang/Pointer.h?rev=740916&r1=740915&r2=740916&view=diff
==============================================================================
--- activemq/activemq-cpp/trunk/src/main/decaf/lang/Pointer.h (original)
+++ activemq/activemq-cpp/trunk/src/main/decaf/lang/Pointer.h Wed Feb 4
22:11:25 2009
@@ -382,7 +382,7 @@
// Requires that the type in the pointer is an instance of a
Comparable.
virtual int compare( const Pointer<T,R>& left, const Pointer<T,R>&
right ) const {
- return left->compareTo( *right );
+ return *left < *right ? -1 : *right < *left ? 1 : 0;
}
};
Modified: activemq/activemq-cpp/trunk/src/test/decaf/lang/PointerTest.cpp
URL:
http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/src/test/decaf/lang/PointerTest.cpp?rev=740916&r1=740915&r2=740916&view=diff
==============================================================================
--- activemq/activemq-cpp/trunk/src/test/decaf/lang/PointerTest.cpp (original)
+++ activemq/activemq-cpp/trunk/src/test/decaf/lang/PointerTest.cpp Wed Feb 4
22:11:25 2009
@@ -327,6 +327,25 @@
CPPUNIT_ASSERT( testMap.find( pointer1 ) != testMap.end() );
CPPUNIT_ASSERT( testMap.find( pointer2 ) != testMap.end() );
+
+ Pointer< int > one( new int );
+ Pointer< int > two( new int );
+ Pointer< int > three( new int );
+
+ *one = 1;
+ *two = 2;
+ *three = 3;
+
+ std::map< Pointer<int>, int, PointerComparator<int> > testMap2;
+
+ CPPUNIT_ASSERT( testMap2.size() == 0 );
+ testMap2.insert( std::make_pair( three, 3 ) );
+ testMap2.insert( std::make_pair( two, 2 ) );
+ testMap2.insert( std::make_pair( one, 1 ) );
+ CPPUNIT_ASSERT( testMap2.size() == 3 );
+
+ CPPUNIT_ASSERT( *( testMap2.begin()->first ) == 1 );
+ CPPUNIT_ASSERT( *( testMap2.rbegin()->first ) == 3 );
}
////////////////////////////////////////////////////////////////////////////////