summaryrefslogtreecommitdiff
path: root/o3tl
diff options
context:
space:
mode:
authorMichael Stahl <mstahl@redhat.com>2012-08-01 14:41:43 +0200
committerMichael Stahl <mstahl@redhat.com>2012-08-01 14:59:10 +0200
commit8291d41667b1a63d35bf818aaf9d75529e1f12f0 (patch)
treef1464de3451cd79a5cc5837a5b028e580fe1b3b1 /o3tl
parent7e579295c8c07998d7e077fa7e1db24745726e5f (diff)
Revert "sorted_vector: turn Find parameter into template"
This reverts commit 3e3acee762fac71f7356ed1305a64e0278278081. It was a nice idea, but C++ is not yet ready for it; with the travesty of parametric polymorphism in C++ the find_unique inside the definition of find_unique actually refers to find_unique<Value, Compare>, so there is no way to actually refer to template<Value, Compare> find_unique inside its definition. Thanks to Luboš Luňák for explaining the problem to me. Somehow this does work in GCC 4.7 even with -std=c++98, likely by accident.
Diffstat (limited to 'o3tl')
-rw-r--r--o3tl/inc/o3tl/sorted_vector.hxx11
-rw-r--r--o3tl/qa/test-sorted_vector.cxx6
2 files changed, 9 insertions, 8 deletions
diff --git a/o3tl/inc/o3tl/sorted_vector.hxx b/o3tl/inc/o3tl/sorted_vector.hxx
index 6f444d90be14..4d442dd590ae 100644
--- a/o3tl/inc/o3tl/sorted_vector.hxx
+++ b/o3tl/inc/o3tl/sorted_vector.hxx
@@ -27,13 +27,12 @@ struct find_unique;
@tpl Compare comparison method
@tpl Find look up index of a Value in the array
*/
-template<typename Value, typename Compare = std::less<Value>,
- template<typename, typename> class Find = find_unique >
+template<class Value, class Compare = std::less<Value>,
+ class Find = find_unique<Value, Compare> >
class sorted_vector
: private std::vector<Value>
{
private:
- typedef Find<Value, Compare> Find_t;
typedef typename std::vector<Value> base_t;
typedef typename std::vector<Value>::iterator iterator;
public:
@@ -48,7 +47,7 @@ public:
std::pair<const_iterator,bool> insert( const Value& x )
{
- std::pair<const_iterator, bool> const ret(Find_t()(begin(), end(), x));
+ std::pair<const_iterator, bool> const ret(Find()(begin(), end(), x));
if (!ret.second)
{
const_iterator const it = base_t::insert(
@@ -60,7 +59,7 @@ public:
size_type erase( const Value& x )
{
- std::pair<const_iterator, bool> const ret(Find_t()(begin(), end(), x));
+ std::pair<const_iterator, bool> const ret(Find()(begin(), end(), x));
if (ret.second)
{
base_t::erase(begin_nonconst() + (ret.first - begin()));
@@ -130,7 +129,7 @@ public:
*/
const_iterator find( const Value& x ) const
{
- std::pair<const_iterator, bool> const ret(Find_t()(begin(), end(), x));
+ std::pair<const_iterator, bool> const ret(Find()(begin(), end(), x));
return (ret.second) ? ret.first : end();
}
diff --git a/o3tl/qa/test-sorted_vector.cxx b/o3tl/qa/test-sorted_vector.cxx
index 8e9e719f2c1d..1b321c91a2a4 100644
--- a/o3tl/qa/test-sorted_vector.cxx
+++ b/o3tl/qa/test-sorted_vector.cxx
@@ -136,7 +136,8 @@ public:
void testBasics_FindPtr()
{
o3tl::sorted_vector<SwContent*, o3tl::less_ptr_to<SwContent>,
- o3tl::find_partialorder_ptrequals> aVec;
+ o3tl::find_partialorder_ptrequals<SwContent*,
+ o3tl::less_ptr_to<SwContent> > > aVec;
SwContent *p1 = new SwContent(1);
SwContent *p2 = new SwContent(2);
SwContent *p2_2 = new SwContent(2);
@@ -194,7 +195,8 @@ public:
void testErase_FindPtr()
{
o3tl::sorted_vector<SwContent*, o3tl::less_ptr_to<SwContent>,
- o3tl::find_partialorder_ptrequals> aVec;
+ o3tl::find_partialorder_ptrequals<SwContent*,
+ o3tl::less_ptr_to<SwContent> > > aVec;
SwContent *p1 = new SwContent(1);
SwContent *p1_2 = new SwContent(1);
SwContent *p1_3 = new SwContent(1);