rtree: IndexableGetter and EqualTo handled in members_holder interface.

Fix in glut_vis example - macro name fixed.

[SVN r83257]
This commit is contained in:
Adam Wulkiewicz 2013-03-03 00:34:45 +00:00
parent 7e6394ec68
commit 4727f94f4d
3 changed files with 34 additions and 22 deletions

View File

@ -9,7 +9,7 @@
#include <GL/glut.h> #include <GL/glut.h>
#define BOOST_GEOMETRY_INDEX_ENABLE_DEBUG_INTERFACE #define BOOST_GEOMETRY_INDEX_DETAIL_ENABLE_DEBUG_INTERFACE
#include <boost/foreach.hpp> #include <boost/foreach.hpp>

View File

@ -158,7 +158,7 @@ public:
inline explicit rtree(parameters_type const& parameters = parameters_type(), inline explicit rtree(parameters_type const& parameters = parameters_type(),
IndexableGetter const& indexable_getter = IndexableGetter(), IndexableGetter const& indexable_getter = IndexableGetter(),
EqualTo const& equal_to = EqualTo()) EqualTo const& equal_to = EqualTo())
: m_members(translator_type(indexable_getter, equal_to), parameters) : m_members(indexable_getter, equal_to, parameters)
{} {}
/*! /*!
@ -176,7 +176,7 @@ public:
IndexableGetter const& indexable_getter, IndexableGetter const& indexable_getter,
EqualTo const& equal_to, EqualTo const& equal_to,
allocator_type allocator) allocator_type allocator)
: m_members(translator_type(indexable_getter, equal_to), parameters, allocator) : m_members(indexable_getter, equal_to, parameters, allocator)
{} {}
/*! /*!
@ -201,7 +201,7 @@ public:
IndexableGetter const& indexable_getter = IndexableGetter(), IndexableGetter const& indexable_getter = IndexableGetter(),
EqualTo const& equal_to = EqualTo(), EqualTo const& equal_to = EqualTo(),
allocator_type allocator = allocator_type()) allocator_type allocator = allocator_type())
: m_members(translator_type(indexable_getter, equal_to), parameters, allocator) : m_members(indexable_getter, equal_to, parameters, allocator)
{ {
try try
{ {
@ -235,7 +235,7 @@ public:
IndexableGetter const& indexable_getter = IndexableGetter(), IndexableGetter const& indexable_getter = IndexableGetter(),
EqualTo const& equal_to = EqualTo(), EqualTo const& equal_to = EqualTo(),
allocator_type allocator = allocator_type()) allocator_type allocator = allocator_type())
: m_members(translator_type(indexable_getter, equal_to), parameters, allocator) : m_members(indexable_getter, equal_to, parameters, allocator)
{ {
try try
{ {
@ -273,7 +273,8 @@ public:
\li When memory allocation for Node fails. \li When memory allocation for Node fails.
*/ */
inline rtree(rtree const& src) inline rtree(rtree const& src)
: m_members(src.m_members.translator(), : m_members(src.m_members.indexable_getter(),
src.m_members.equal_to(),
src.m_members.parameters(), src.m_members.parameters(),
allocator_traits_type::select_on_container_copy_construction(src.get_allocator())) allocator_traits_type::select_on_container_copy_construction(src.get_allocator()))
{ {
@ -295,7 +296,9 @@ public:
\li When memory allocation for Node fails. \li When memory allocation for Node fails.
*/ */
inline rtree(rtree const& src, allocator_type const& allocator) inline rtree(rtree const& src, allocator_type const& allocator)
: m_members(src.m_members.translator(), src.m_members.parameters(), allocator) : m_members(src.m_members.indexable_getter(),
src.m_members.equal_to(),
src.m_members.parameters(), allocator)
{ {
this->raw_copy(src, *this, false); this->raw_copy(src, *this, false);
} }
@ -311,7 +314,8 @@ public:
Nothing. Nothing.
*/ */
inline rtree(BOOST_RV_REF(rtree) src) inline rtree(BOOST_RV_REF(rtree) src)
: m_members(src.m_members.translator(), : m_members(src.m_members.indexable_getter(),
src.m_members.equal_to(),
src.m_members.parameters(), src.m_members.parameters(),
boost::move(src.m_members.allocators())) boost::move(src.m_members.allocators()))
{ {
@ -335,7 +339,8 @@ public:
\li When memory allocation for Node fails (only if allocators aren't equal). \li When memory allocation for Node fails (only if allocators aren't equal).
*/ */
inline rtree(BOOST_RV_REF(rtree) src, allocator_type const& allocator) inline rtree(BOOST_RV_REF(rtree) src, allocator_type const& allocator)
: m_members(src.m_members.translator(), : m_members(src.m_members.indexable_getter(),
src.m_members.equal_to(),
src.m_members.parameters(), src.m_members.parameters(),
boost::move(allocator)) boost::move(allocator))
{ {
@ -403,8 +408,10 @@ public:
{ {
this->raw_destroy(*this); this->raw_destroy(*this);
m_members.translator() = src.m_members.translator(); m_members.indexable_getter() = src.m_members.indexable_getter();
m_members.equal_to() = src.m_members.equal_to();
m_members.parameters() = src.m_members.parameters(); m_members.parameters() = src.m_members.parameters();
boost::swap(m_members.values_count, src.m_members.values_count); boost::swap(m_members.values_count, src.m_members.values_count);
boost::swap(m_members.leafs_level, src.m_members.leafs_level); boost::swap(m_members.leafs_level, src.m_members.leafs_level);
boost::swap(m_members.root, src.m_members.root); boost::swap(m_members.root, src.m_members.root);
@ -437,7 +444,8 @@ public:
*/ */
void swap(rtree & other) void swap(rtree & other)
{ {
boost::swap(m_members.translator(), other.m_members.translator()); boost::swap(m_members.indexable_getter(), other.m_members.indexable_getter());
boost::swap(m_members.equal_to(), other.m_members.equal_to());
boost::swap(m_members.parameters(), other.m_members.parameters()); boost::swap(m_members.parameters(), other.m_members.parameters());
m_members.allocators().swap(other.m_members.allocators()); m_members.allocators().swap(other.m_members.allocators());
@ -1014,7 +1022,8 @@ private:
if ( copy_tr_and_params ) if ( copy_tr_and_params )
{ {
dst.m_members.translator() = src.m_members.translator(); // SHOULDN'T THROW dst.m_members.indexable_getter() = src.m_members.indexable_getter();
dst.m_members.equal_to() = src.m_members.equal_to();
dst.m_members.parameters() = src.m_members.parameters(); dst.m_members.parameters() = src.m_members.parameters();
} }
@ -1122,11 +1131,12 @@ private:
members_holder(members_holder const&); members_holder(members_holder const&);
public: public:
template <typename Transl, typename Alloc> template <typename IndGet, typename ValEq, typename Alloc>
members_holder(Transl const& transl, members_holder(IndGet const& ind_get,
ValEq const& val_eq,
Parameters const& parameters, Parameters const& parameters,
BOOST_FWD_REF(Alloc) alloc) BOOST_FWD_REF(Alloc) alloc)
: translator_type(transl) : translator_type(ind_get, val_eq)
, Parameters(parameters) , Parameters(parameters)
, allocators_type(boost::forward<Alloc>(alloc)) , allocators_type(boost::forward<Alloc>(alloc))
, values_count(0) , values_count(0)
@ -1134,10 +1144,11 @@ private:
, root(0) , root(0)
{} {}
template <typename Transl> template <typename IndGet, typename ValEq>
members_holder(Transl const& transl, members_holder(IndGet const& ind_get,
ValEq const& val_eq,
Parameters const& parameters) Parameters const& parameters)
: translator_type(transl) : translator_type(ind_get, val_eq)
, Parameters(parameters) , Parameters(parameters)
, allocators_type() , allocators_type()
, values_count(0) , values_count(0)
@ -1146,7 +1157,11 @@ private:
{} {}
translator_type const& translator() const { return *this; } translator_type const& translator() const { return *this; }
translator_type & translator() { return *this; }
IndexableGetter const& indexable_getter() const { return *this; }
IndexableGetter & indexable_getter() { return *this; }
EqualTo const& equal_to() const { return *this; }
EqualTo & equal_to() { return *this; }
Parameters const& parameters() const { return *this; } Parameters const& parameters() const { return *this; }
Parameters & parameters() { return *this; } Parameters & parameters() { return *this; }
allocators_type const& allocators() const { return *this; } allocators_type const& allocators() const { return *this; }

View File

@ -249,9 +249,6 @@ struct translator
{ {
return EqualTo::operator()(v1, v2); return EqualTo::operator()(v1, v2);
} }
IndexableGetter const& indexable_get() const { return *this; }
EqualTo const& value_eq() const { return *this; }
}; };
template <typename Translator> template <typename Translator>