Revert "sorted_vector: turn Find parameter into template"
This reverts commit 3e3acee762
.
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.
This commit is contained in:
@@ -27,13 +27,12 @@ struct find_unique;
|
|||||||
@tpl Compare comparison method
|
@tpl Compare comparison method
|
||||||
@tpl Find look up index of a Value in the array
|
@tpl Find look up index of a Value in the array
|
||||||
*/
|
*/
|
||||||
template<typename Value, typename Compare = std::less<Value>,
|
template<class Value, class Compare = std::less<Value>,
|
||||||
template<typename, typename> class Find = find_unique >
|
class Find = find_unique<Value, Compare> >
|
||||||
class sorted_vector
|
class sorted_vector
|
||||||
: private std::vector<Value>
|
: private std::vector<Value>
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
typedef Find<Value, Compare> Find_t;
|
|
||||||
typedef typename std::vector<Value> base_t;
|
typedef typename std::vector<Value> base_t;
|
||||||
typedef typename std::vector<Value>::iterator iterator;
|
typedef typename std::vector<Value>::iterator iterator;
|
||||||
public:
|
public:
|
||||||
@@ -48,7 +47,7 @@ public:
|
|||||||
|
|
||||||
std::pair<const_iterator,bool> insert( const Value& x )
|
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)
|
if (!ret.second)
|
||||||
{
|
{
|
||||||
const_iterator const it = base_t::insert(
|
const_iterator const it = base_t::insert(
|
||||||
@@ -60,7 +59,7 @@ public:
|
|||||||
|
|
||||||
size_type erase( const Value& x )
|
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)
|
if (ret.second)
|
||||||
{
|
{
|
||||||
base_t::erase(begin_nonconst() + (ret.first - begin()));
|
base_t::erase(begin_nonconst() + (ret.first - begin()));
|
||||||
@@ -130,7 +129,7 @@ public:
|
|||||||
*/
|
*/
|
||||||
const_iterator find( const Value& x ) const
|
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();
|
return (ret.second) ? ret.first : end();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -136,7 +136,8 @@ public:
|
|||||||
void testBasics_FindPtr()
|
void testBasics_FindPtr()
|
||||||
{
|
{
|
||||||
o3tl::sorted_vector<SwContent*, o3tl::less_ptr_to<SwContent>,
|
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 = new SwContent(1);
|
||||||
SwContent *p2 = new SwContent(2);
|
SwContent *p2 = new SwContent(2);
|
||||||
SwContent *p2_2 = new SwContent(2);
|
SwContent *p2_2 = new SwContent(2);
|
||||||
@@ -194,7 +195,8 @@ public:
|
|||||||
void testErase_FindPtr()
|
void testErase_FindPtr()
|
||||||
{
|
{
|
||||||
o3tl::sorted_vector<SwContent*, o3tl::less_ptr_to<SwContent>,
|
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 = new SwContent(1);
|
||||||
SwContent *p1_2 = new SwContent(1);
|
SwContent *p1_2 = new SwContent(1);
|
||||||
SwContent *p1_3 = new SwContent(1);
|
SwContent *p1_3 = new SwContent(1);
|
||||||
|
@@ -145,7 +145,7 @@ struct CompareSwRedlineTbl
|
|||||||
};
|
};
|
||||||
class _SwRedlineTbl
|
class _SwRedlineTbl
|
||||||
: public o3tl::sorted_vector<SwRedline*, CompareSwRedlineTbl,
|
: public o3tl::sorted_vector<SwRedline*, CompareSwRedlineTbl,
|
||||||
o3tl::find_partialorder_ptrequals>
|
o3tl::find_partialorder_ptrequals<SwRedline*, CompareSwRedlineTbl> >
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
~_SwRedlineTbl();
|
~_SwRedlineTbl();
|
||||||
|
@@ -76,14 +76,14 @@ struct CompareSwpHtStart
|
|||||||
bool operator()(SwTxtAttr* const lhs, SwTxtAttr* const rhs) const;
|
bool operator()(SwTxtAttr* const lhs, SwTxtAttr* const rhs) const;
|
||||||
};
|
};
|
||||||
class SwpHtStart : public o3tl::sorted_vector<SwTxtAttr*, CompareSwpHtStart,
|
class SwpHtStart : public o3tl::sorted_vector<SwTxtAttr*, CompareSwpHtStart,
|
||||||
o3tl::find_partialorder_ptrequals> {};
|
o3tl::find_partialorder_ptrequals<SwTxtAttr*, CompareSwpHtStart> > {};
|
||||||
|
|
||||||
struct CompareSwpHtEnd
|
struct CompareSwpHtEnd
|
||||||
{
|
{
|
||||||
bool operator()(SwTxtAttr* const lhs, SwTxtAttr* const rhs) const;
|
bool operator()(SwTxtAttr* const lhs, SwTxtAttr* const rhs) const;
|
||||||
};
|
};
|
||||||
class SwpHtEnd : public o3tl::sorted_vector<SwTxtAttr*, CompareSwpHtEnd,
|
class SwpHtEnd : public o3tl::sorted_vector<SwTxtAttr*, CompareSwpHtEnd,
|
||||||
o3tl::find_partialorder_ptrequals> {};
|
o3tl::find_partialorder_ptrequals<SwTxtAttr*, CompareSwpHtEnd> > {};
|
||||||
|
|
||||||
// Class SwpHintsArr
|
// Class SwpHintsArr
|
||||||
|
|
||||||
|
@@ -130,7 +130,8 @@ public:
|
|||||||
class SwHTMLPosFlyFrms
|
class SwHTMLPosFlyFrms
|
||||||
: public o3tl::sorted_vector<SwHTMLPosFlyFrm*,
|
: public o3tl::sorted_vector<SwHTMLPosFlyFrm*,
|
||||||
o3tl::less_ptr_to<SwHTMLPosFlyFrm>,
|
o3tl::less_ptr_to<SwHTMLPosFlyFrm>,
|
||||||
o3tl::find_partialorder_ptrequals>
|
o3tl::find_partialorder_ptrequals<SwHTMLPosFlyFrm*,
|
||||||
|
o3tl::less_ptr_to<SwHTMLPosFlyFrm> > >
|
||||||
{};
|
{};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@@ -106,7 +106,8 @@ using namespace ::com::sun::star::container;
|
|||||||
|
|
||||||
class SwContentArr
|
class SwContentArr
|
||||||
: public o3tl::sorted_vector<SwContent*, o3tl::less_ptr_to<SwContent>,
|
: public o3tl::sorted_vector<SwContent*, o3tl::less_ptr_to<SwContent>,
|
||||||
o3tl::find_partialorder_ptrequals>
|
o3tl::find_partialorder_ptrequals<SwContent*,
|
||||||
|
o3tl::less_ptr_to<SwContent> > >
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
~SwContentArr() { DeleteAndDestroyAll(); }
|
~SwContentArr() { DeleteAndDestroyAll(); }
|
||||||
|
Reference in New Issue
Block a user