|
Boost : |
From: Russell Hind (rh_gmane_at_[hidden])
Date: 2005-05-11 04:11:49
Thorsten Ottosen wrote:
> Thanks. I have applied them and comitted.
>
I've had to make some mods as Borland doesn't appear to like template
statements in macros. See attached but don't apply this without reading
my comments below
> | The next error I'm not so sure on is in tutl.cpp line 233:
> |
> | tut1.cpp:
> | Error E2227 tut1.cpp 233: Extra parameter in call to
>
> I don't get this error. Do you know what the fix is?
>
I think the problem is the 'using base_type::release' in the macros at
the end of reversible_ptr_container.hpp I don't think Borland is
picking these up. I've tried to implement a release instead of the
using, which just passes it on to base_type. This works for ptr_vector,
but gives more compile errors in ptr_deque due to auto_type. Maybe you
can help with this?
The other common error is on ptr_sequence_adaptor.hpp line 99. Perhaps
you understand what is happening here to? I've attached my test output
also.
Thanks
Russell
Index: boost/ptr_container/detail/reversible_ptr_container.hpp
===================================================================
RCS file: /cvsroot/boost/boost/boost/ptr_container/detail/reversible_ptr_container.hpp,v
retrieving revision 1.12
diff -u -r1.12 reversible_ptr_container.hpp
--- boost/ptr_container/detail/reversible_ptr_container.hpp 10 May 2005 21:22:23 -0000 1.12
+++ boost/ptr_container/detail/reversible_ptr_container.hpp 11 May 2005 09:05:49 -0000
@@ -40,7 +40,7 @@
namespace boost
{
-
+
namespace ptr_container_detail
{
@@ -63,18 +63,18 @@
struct is_pointer_or_integral_tag {};
struct is_range_tag {};
-
-
+
+
template
- <
- class Config,
+ <
+ class Config,
class CloneAllocator
>
- class reversible_ptr_container
+ class reversible_ptr_container
{
private:
BOOST_STATIC_CONSTANT( bool, allow_null = Config::allow_null );
-
+
typedef BOOST_DEDUCED_TYPENAME Config::value_type Ty_;
template< bool allow_null_values >
@@ -82,10 +82,10 @@
{
template< class Iter >
static Ty_* allocate_clone_from_iterator( Iter i )
- {
+ {
return allocate_clone( Config::get_const_pointer( i ) );
}
-
+
static Ty_* allocate_clone( const Ty_* x )
{
if( allow_null_values )
@@ -100,7 +100,7 @@
return CloneAllocator::allocate_clone( *x );
}
-
+
static void deallocate_clone( const Ty_* x )
{
if( allow_null_values )
@@ -114,12 +114,12 @@
};
typedef BOOST_DEDUCED_TYPENAME Config::void_container_type Cont;
-#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
- typedef null_clone_allocator<reversible_ptr_container::allow_null>
+#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
+ typedef null_clone_allocator<reversible_ptr_container::allow_null>
null_cloner_type;
#else
typedef null_clone_allocator<allow_null> null_cloner_type;
-#endif
+#endif
typedef clone_deleter<null_cloner_type> Deleter;
Cont c_;
@@ -129,59 +129,59 @@
const Cont& c_private() const { return c_; }
public: // typedefs
- typedef BOOST_DEDUCED_TYPENAME Config::object_type
+ typedef BOOST_DEDUCED_TYPENAME Config::object_type
object_type;
typedef Ty_* value_type;
typedef Ty_* pointer;
typedef Ty_& reference;
typedef const Ty_& const_reference;
-
- typedef BOOST_DEDUCED_TYPENAME Config::iterator
+
+ typedef BOOST_DEDUCED_TYPENAME Config::iterator
iterator;
typedef BOOST_DEDUCED_TYPENAME Config::const_iterator
const_iterator;
typedef BOOST_DEDUCED_TYPENAME Config::reverse_iterator
reverse_iterator;
- typedef BOOST_DEDUCED_TYPENAME Config::const_reverse_iterator
+ typedef BOOST_DEDUCED_TYPENAME Config::const_reverse_iterator
const_reverse_iterator;
typedef BOOST_DEDUCED_TYPENAME Cont::difference_type
- difference_type;
+ difference_type;
typedef BOOST_DEDUCED_TYPENAME Cont::size_type
size_type;
typedef BOOST_DEDUCED_TYPENAME Config::allocator_type
allocator_type;
- typedef ptr_container_detail::static_move_ptr<Ty_,Deleter>
+ typedef ptr_container_detail::static_move_ptr<Ty_,Deleter>
auto_type;
-
- protected:
-
+
+ protected:
+
typedef ptr_container_detail::scoped_deleter<Ty_,null_cloner_type>
scoped_deleter;
typedef BOOST_DEDUCED_TYPENAME Cont::iterator
- ptr_iterator;
+ ptr_iterator;
typedef BOOST_DEDUCED_TYPENAME Cont::const_iterator
- ptr_const_iterator;
+ ptr_const_iterator;
private:
- template< class InputIterator >
- void copy( InputIterator first, InputIterator last )
+ template< class InputIterator >
+ void copy( InputIterator first, InputIterator last )
{
std::copy( first, last, begin() );
}
-
+
void copy( const reversible_ptr_container& r )
- {
+ {
copy( r.begin(), r.end() );
}
-
+
void copy_clones_and_release( scoped_deleter& sd ) // nothrow
{
BOOST_ASSERT( size_type( std::distance( sd.begin(), sd.end() ) ) == c_.size() );
std::copy( sd.begin(), sd.end(), c_.begin() );
- sd.release();
+ sd.release();
}
-
+
void insert_clones_and_release( scoped_deleter& sd ) // strong
{
c_.insert( sd.begin(), sd.end() );
@@ -189,8 +189,8 @@
}
template< class ForwardIterator >
- void clone_assign( ForwardIterator first,
- ForwardIterator last ) // strong
+ void clone_assign( ForwardIterator first,
+ ForwardIterator last ) // strong
{
BOOST_ASSERT( first != last );
scoped_deleter sd( first, last ); // strong
@@ -205,34 +205,34 @@
scoped_deleter sd( first, last );
insert_clones_and_release( sd, end() );
}
-
- void remove_all()
+
+ void remove_all()
{
- remove( begin(), end() );
+ remove( begin(), end() );
}
protected:
- void insert_clones_and_release( scoped_deleter& sd,
+ void insert_clones_and_release( scoped_deleter& sd,
iterator where ) // strong
{
//
// 'c_.insert' always provides the strong guarantee for T* elements
// since a copy constructor of a pointer cannot throw
//
- c_.insert( where.base(),
- sd.begin(), sd.end() );
+ c_.insert( where.base(),
+ sd.begin(), sd.end() );
sd.release();
}
template< class I >
void remove( I i )
- {
+ {
null_policy_deallocate_clone( Config::get_const_pointer(i) );
}
template< class I >
- void remove( I first, I last )
+ void remove( I first, I last )
{
for( ; first != last; ++first )
remove( first );
@@ -242,7 +242,7 @@
BOOST_DEDUCED_TYPENAME range_result_iterator<Range>::type
adl_begin( Range& r )
{
- #if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
+ #if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
return begin( r );
#else
using boost::begin;
@@ -254,14 +254,14 @@
BOOST_DEDUCED_TYPENAME range_result_iterator<Range>::type
adl_end( Range& r )
{
- #if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
+ #if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
return end( r );
#else
using boost::end;
return end( r );
#endif
}
-
+
static void enforce_null_policy( Ty_* x, const char* msg )
{
if( !allow_null )
@@ -283,27 +283,27 @@
private:
template< class ForwardIterator >
- ForwardIterator advance( ForwardIterator begin, size_type n )
+ ForwardIterator advance( ForwardIterator begin, size_type n )
{
ForwardIterator iter = begin;
std::advance( iter, n );
return iter;
}
-
+
private:
reversible_ptr_container( const reversible_ptr_container& );
void operator=( const reversible_ptr_container& );
-
+
public: // foundation! should be protected!
- explicit reversible_ptr_container( const allocator_type& a = allocator_type() )
+ explicit reversible_ptr_container( const allocator_type& a = allocator_type() )
: c_( a )
{}
-
+
template< class PtrContainer >
explicit reversible_ptr_container( std::auto_ptr<PtrContainer> clone )
- : c_( allocator_type() )
- {
- swap( *clone );
+ : c_( allocator_type() )
+ {
+ swap( *clone );
}
private:
@@ -330,13 +330,18 @@
// overhead: null-initilization of container pointer (very cheap compared to cloning)
// overhead: 1 heap allocation (very cheap compared to cloning)
template< class InputIterator >
- reversible_ptr_container( InputIterator first,
+ reversible_ptr_container( InputIterator first,
InputIterator last,
const allocator_type& a = allocator_type() ) // basic, strong
: c_( a )
- {
+ {
+#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
+ constructor_impl( first, last,
+ iterator_category<InputIterator>::type() );
+#else
constructor_impl( first, last, BOOST_DEDUCED_TYPENAME
iterator_category<InputIterator>::type() );
+#endif
}
template< class Compare >
@@ -344,40 +349,40 @@
const allocator_type& a )
: c_( comp, a ) {}
- public:
+ public:
~reversible_ptr_container()
- {
+ {
remove_all();
}
-
+
template< class PtrContainer >
- void operator=( std::auto_ptr<PtrContainer> clone )
+ void operator=( std::auto_ptr<PtrContainer> clone )
{
swap( *clone );
}
public:
-
- allocator_type get_allocator() const
+
+ allocator_type get_allocator() const
{
- return c_.get_allocator();
+ return c_.get_allocator();
}
-
+
public: // container requirements
iterator begin() { return iterator( c_.begin() ); }
const_iterator begin() const { return const_iterator( c_.begin() ); }
iterator end() { return iterator( c_.end() ); }
const_iterator end() const { return const_iterator( c_.end() ); }
- reverse_iterator rbegin() { return reverse_iterator( c_.rbegin() ); }
- const_reverse_iterator rbegin() const { return const_reverse_iterator( c_.rbegin() ); }
- reverse_iterator rend() { return reverse_iterator( c_.rend() ); }
- const_reverse_iterator rend() const { return const_reverse_iterator( c_.rend() ); }
-
+ reverse_iterator rbegin() { return reverse_iterator( c_.rbegin() ); }
+ const_reverse_iterator rbegin() const { return const_reverse_iterator( c_.rbegin() ); }
+ reverse_iterator rend() { return reverse_iterator( c_.rend() ); }
+ const_reverse_iterator rend() const { return const_reverse_iterator( c_.rend() ); }
+
void swap( reversible_ptr_container& r ) // notrow
- {
+ {
c_.swap( r.c_ );
}
-
+
size_type size() const // nothrow
{
return c_.size();
@@ -385,9 +390,9 @@
size_type max_size() const // nothrow
{
- return c_.max_size();
+ return c_.max_size();
}
-
+
bool empty() const // nothrow
{
return c_.empty();
@@ -396,7 +401,7 @@
public: // optional container requirements
bool operator==( const reversible_ptr_container& r ) const // nothrow
- {
+ {
if( size() != r.size() )
return false;
else
@@ -407,23 +412,23 @@
{
return !(*this == r);
}
-
- bool operator<( const reversible_ptr_container& r ) const // nothrow
+
+ bool operator<( const reversible_ptr_container& r ) const // nothrow
{
return std::lexicographical_compare( begin(), end(), r.begin(), r.end() );
}
- bool operator<=( const reversible_ptr_container& r ) const // nothrow
+ bool operator<=( const reversible_ptr_container& r ) const // nothrow
{
return !(r < *this);
}
- bool operator>( const reversible_ptr_container& r ) const // nothrow
+ bool operator>( const reversible_ptr_container& r ) const // nothrow
{
return r < *this;
}
- bool operator>=( const reversible_ptr_container& r ) const // nothrow
+ bool operator>=( const reversible_ptr_container& r ) const // nothrow
{
return !(*this < r);
}
@@ -440,20 +445,20 @@
return res;
}
- iterator erase( iterator x ) // nothrow
- {
+ iterator erase( iterator x ) // nothrow
+ {
BOOST_ASSERT( !empty() );
BOOST_ASSERT( x != end() );
-
- remove( x );
+
+ remove( x );
return iterator( c_.erase( x.base() ) );
}
-
- iterator erase( iterator first, iterator last ) // nothrow
+
+ iterator erase( iterator first, iterator last ) // nothrow
{
BOOST_ASSERT( !empty() );
- remove( first, last );
- return iterator( c_.erase( first.base(),
+ remove( first, last );
+ return iterator( c_.erase( first.base(),
last.base() ) );
}
@@ -462,66 +467,66 @@
{
return erase( adl_begin(r), adl_end(r) );
}
-
- void clear()
- {
- remove_all();
+
+ void clear()
+ {
+ remove_all();
c_.clear();
}
-
+
public: // access interface
-
+
auto_type release( iterator where )
- {
+ {
BOOST_ASSERT( where != end() );
if( empty() )
- throw bad_ptr_container_operation( "'release()' on empty container" );
-
+ throw bad_ptr_container_operation( "'release()' on empty container" );
+
auto_type ptr( Config::get_pointer( where ) ); // nothrow
c_.erase( where.base() ); // nothrow
- return boost::ptr_container_detail::move( ptr );
+ return boost::ptr_container_detail::move( ptr );
}
- auto_type replace( iterator where, Ty_* x ) // strong
- {
+ auto_type replace( iterator where, Ty_* x ) // strong
+ {
BOOST_ASSERT( where != end() );
enforce_null_policy( x, "Null pointer in 'replace()'" );
-
+
auto_type ptr( x );
-
+
if( empty() )
throw bad_ptr_container_operation( "'replace()' on empty container" );
auto_type old( Config::get_pointer( where ) ); // nothrow
-
+
//#if defined( __GNUC__ ) || defined( __MWERKS__ ) || defined( __COMO__ )
- const_cast<void*&>(*where.base()) = ptr.release();
+ const_cast<void*&>(*where.base()) = ptr.release();
//#else
// *where.base() = ptr.release(); // nothrow, commit
-//#endif
+//#endif
return boost::ptr_container_detail::move( old );
}
auto_type replace( size_type idx, Ty_* x ) // strong
{
enforce_null_policy( x, "Null pointer in 'replace()'" );
-
- auto_type ptr( x );
-
- if( idx >= size() )
+
+ auto_type ptr( x );
+
+ if( idx >= size() )
throw bad_index( "'replace()' out of bounds" );
-
+
auto_type old( static_cast<Ty_*>( c_[idx] ) ); // nothrow
c_[idx] = ptr.release(); // nothrow, commit
return boost::ptr_container_detail::move( old );
- }
-
+ }
+
}; // 'reversible_ptr_container'
-
+
//
- // two-phase lookup of template functions
+ // two-phase lookup of template functions
// is buggy on most compilers, so we use a macro instead
//
#define BOOST_PTR_CONTAINER_DEFINE_RELEASE_AND_CLONE( PC, base_type ) \
@@ -541,7 +546,10 @@
return ptr; \
} \
\
- using base_type::release; \
+ auto_type release(iterator where) \
+ { \
+ return base_type::release(where); \
+ } \
\
std::auto_ptr<PC> clone() const \
{ \
@@ -556,16 +564,16 @@
PC( const allocator_type& a = allocator_type() ) : base_type(a) {} \
template< class InputIterator > \
PC( InputIterator first, InputIterator last, \
- const allocator_type& a = allocator_type() ) : base_type( first, last, a ) {}
-
+ const allocator_type& a = allocator_type() ) : base_type( first, last, a ) {}
+
+
-
#define BOOST_PTR_CONTAINER_DEFINE_NON_INHERITED_MEMBERS( PC, base_type ) \
BOOST_PTR_CONTAINER_DEFINE_CONSTRUCTORS( PC, base_type ) \
BOOST_PTR_CONTAINER_DEFINE_RELEASE_AND_CLONE( PC, base_type )
-
+
} // namespace 'ptr_container_detail'
-} // namespace 'boost'
+} // namespace 'boost'
#endif
Index: boost/ptr_container/ptr_array.hpp
===================================================================
RCS file: /cvsroot/boost/boost/boost/ptr_container/ptr_array.hpp,v
retrieving revision 1.3
diff -u -r1.3 ptr_array.hpp
--- boost/ptr_container/ptr_array.hpp 1 May 2005 22:27:36 -0000 1.3
+++ boost/ptr_container/ptr_array.hpp 11 May 2005 08:34:52 -0000
@@ -27,7 +27,7 @@
{
template
<
- class T,
+ class T,
size_t N,
class Allocator = int // dummy
>
@@ -35,32 +35,32 @@
{
public:
typedef Allocator allocator_type;
-
- ptr_array_impl( Allocator a = Allocator() )
+
+ ptr_array_impl( Allocator a = Allocator() )
{
- this->assign( 0 );
+ this->assign( 0 );
}
-
+
ptr_array_impl( size_t, T*, Allocator a = Allocator() )
{
this->assing( 0 );
}
};
}
-
+
template
- <
- class T,
- size_t N,
+ <
+ class T,
+ size_t N,
class CloneAllocator = heap_clone_allocator
>
- class ptr_array : public
- ptr_sequence_adapter< T,
+ class ptr_array : public
+ ptr_sequence_adapter< T,
ptr_container_detail::ptr_array_impl<void*,N>,
CloneAllocator >
- {
+ {
private:
- typedef ptr_sequence_adapter< T,
+ typedef ptr_sequence_adapter< T,
ptr_container_detail::ptr_array_impl<void*,N>,
CloneAllocator >
base_class;
@@ -69,36 +69,36 @@
ptr_array( const ptr_array& );
void operator=( const ptr_array& );
-
+
public:
typedef U* value_type;
typedef U* pointer;
typedef U& reference;
typedef const U& const_reference;
- typedef BOOST_DEDUCED_TYPENAME base_class::auto_type
+ typedef BOOST_DEDUCED_TYPENAME base_class::auto_type
auto_type;
-
+
public: // constructors
ptr_array() : base_class()
{ }
-
- ptr_array( std::auto_ptr<ptr_array> r )
- : base_class( r ) { }
- void operator=( std::auto_ptr<ptr_array> r )
+ ptr_array( std::auto_ptr<ptr_array<T,N,CloneAllocator> > r )
+ : base_class( r ) { }
+
+ void operator=( std::auto_ptr<ptr_array<T,N,CloneAllocator> > r )
{
base_class::operator=(r);
}
-
- std::auto_ptr<ptr_array> release()
- {
- std::auto_ptr<ptr_array> ptr( new ptr_array );
- this->swap( *ptr );
- return ptr;
- }
-
- std::auto_ptr<ptr_array> clone() const
- {
+
+ std::auto_ptr<ptr_array<T,N,CloneAllocator> > release()
+ {
+ std::auto_ptr<ptr_array> ptr( new ptr_array );
+ this->swap( *ptr );
+ return ptr;
+ }
+
+ std::auto_ptr<ptr_array<T,N,CloneAllocator> > clone() const
+ {
std::auto_ptr<ptr_array> pa( new ptr_array );
for( size_t i = 0; i != N; ++i )
{
@@ -107,7 +107,7 @@
}
return pa;
}
-
+
private: // hide some members
using base_class::insert;
using base_class::erase;
@@ -117,7 +117,7 @@
using base_class::pop_back;
using base_class::transfer;
using base_class::get_allocator;
-
+
public: // compile-time interface
template< size_t idx >
@@ -126,7 +126,7 @@
BOOST_STATIC_ASSERT( idx < N );
this->enforce_null_policy( r, "Null pointer in 'ptr_array::replace()'" );
-
+
auto_type res( static_cast<U*>( this->c_private()[idx] ) ); // nothrow
this->c_private()[idx] = r; // nothrow
return move(res); // nothrow
@@ -152,21 +152,21 @@
T& at()
{
BOOST_STATIC_ASSERT( idx < N );
- return (*this)[idx];
+ return (*this)[idx];
}
template< size_t idx >
const T& at() const
{
BOOST_STATIC_ASSERT( idx < N );
- return (*this)[idx];
+ return (*this)[idx];
}
bool is_null( size_t idx ) const
{
return base_class::is_null(idx);
}
-
+
template< size_t idx >
bool is_null() const
{
Index: boost/ptr_container/ptr_deque.hpp
===================================================================
RCS file: /cvsroot/boost/boost/boost/ptr_container/ptr_deque.hpp,v
retrieving revision 1.3
diff -u -r1.3 ptr_deque.hpp
--- boost/ptr_container/ptr_deque.hpp 10 May 2005 21:22:22 -0000 1.3
+++ boost/ptr_container/ptr_deque.hpp 11 May 2005 09:03:50 -0000
@@ -21,36 +21,40 @@
namespace boost
{
-
+
template
- <
- class T,
+ <
+ class T,
class CloneAllocator = heap_clone_allocator,
class Allocator = std::allocator<void*>
>
- class ptr_deque : public
+ class ptr_deque : public
ptr_sequence_adapter< T,
- std::deque<void*,Allocator>,
+ std::deque<void*,Allocator>,
CloneAllocator >
{
typedef ptr_sequence_adapter< T,
- std::deque<void*,Allocator>,
+ std::deque<void*,Allocator>,
CloneAllocator >
base_class;
+
public:
-#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
- BOOST_PTR_CONTAINER_DEFINE_NON_INHERITED_MEMBERS( ptr_deque<T,CloneAllocator,Allocator>,
- base_class );
-#else
- BOOST_PTR_CONTAINER_DEFINE_NON_INHERITED_MEMBERS( ptr_deque,
+ typedef BOOST_DEDUCED_TYPENAME base_class::auto_type auto_type;
+
+#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
+ typedef ptr_deque<T,CloneAllocator,Allocator> this_type;
+ BOOST_PTR_CONTAINER_DEFINE_NON_INHERITED_MEMBERS( this_type,
+ base_class );
+#else
+ BOOST_PTR_CONTAINER_DEFINE_NON_INHERITED_MEMBERS( ptr_deque,
base_class );
#endif
};
//////////////////////////////////////////////////////////////////////////////
// clonability
-
+
template< typename T, typename CA, typename A >
inline ptr_deque<T,CA,A>* new_clone( const ptr_deque<T,CA,A>& r )
{
Index: boost/ptr_container/ptr_list.hpp
===================================================================
RCS file: /cvsroot/boost/boost/boost/ptr_container/ptr_list.hpp,v
retrieving revision 1.5
diff -u -r1.5 ptr_list.hpp
--- boost/ptr_container/ptr_list.hpp 10 May 2005 21:22:22 -0000 1.5
+++ boost/ptr_container/ptr_list.hpp 11 May 2005 08:41:03 -0000
@@ -23,31 +23,32 @@
{
template
- <
- class T,
+ <
+ class T,
class CloneAllocator = heap_clone_allocator,
class Allocator = std::allocator<void*>
>
- class ptr_list : public
- ptr_sequence_adapter< T,
- std::list<void*,Allocator>,
+ class ptr_list : public
+ ptr_sequence_adapter< T,
+ std::list<void*,Allocator>,
CloneAllocator >
{
- typedef ptr_sequence_adapter< T,
- std::list<void*,Allocator>,
+ typedef ptr_sequence_adapter< T,
+ std::list<void*,Allocator>,
CloneAllocator >
base_class;
-
+
public:
-#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
- BOOST_PTR_CONTAINER_DEFINE_NON_INHERITED_MEMBERS( ptr_list<T,CloneAllocator,Allocator>,
+#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
+ typedef ptr_list<T,CloneAllocator,Allocator> this_type;
+ BOOST_PTR_CONTAINER_DEFINE_NON_INHERITED_MEMBERS( this_type,
base_class );
-#else
+#else
- BOOST_PTR_CONTAINER_DEFINE_NON_INHERITED_MEMBERS( ptr_list,
+ BOOST_PTR_CONTAINER_DEFINE_NON_INHERITED_MEMBERS( ptr_list,
base_class );
#endif
-
+
public:
void unique( iterator first, iterator last )
{
@@ -72,25 +73,25 @@
}
using base_class::merge;
-
- void merge( ptr_list& x )
+
+ void merge( ptr_list& x )
{
merge( x, std::less<T>() );
}
- template< typename Compare >
- void merge( ptr_list& x, Compare comp )
+ template< typename Compare >
+ void merge( ptr_list& x, Compare comp )
{
this->c_private().merge( x.c_private(), void_ptr_indirect_fun<Compare,T>( comp ) );
}
- void sort()
- {
- sort( std::less<T>() );
+ void sort()
+ {
+ sort( std::less<T>() );
};
- template< typename Compare >
- void sort( Compare comp )
+ template< typename Compare >
+ void sort( Compare comp )
{
this->c_private().sort( void_ptr_indirect_fun<Compare,T>( comp ) );
}
@@ -105,7 +106,7 @@
{
return r.clone().release();
}
-
+
/////////////////////////////////////////////////////////////////////////
// swap
Index: boost/ptr_container/ptr_map.hpp
===================================================================
RCS file: /cvsroot/boost/boost/boost/ptr_container/ptr_map.hpp,v
retrieving revision 1.3
diff -u -r1.3 ptr_map.hpp
--- boost/ptr_container/ptr_map.hpp 10 May 2005 21:22:22 -0000 1.3
+++ boost/ptr_container/ptr_map.hpp 11 May 2005 08:39:06 -0000
@@ -21,75 +21,77 @@
namespace boost
{
-
+
template
- <
- class Key,
- class T,
+ <
+ class Key,
+ class T,
class Compare = std::less<Key>,
class CloneAllocator = heap_clone_allocator,
class Allocator = std::allocator< std::pair<const Key,void*> >
>
- class ptr_map :
+ class ptr_map :
public ptr_map_adapter<T,std::map<Key,void*,Compare,Allocator>,CloneAllocator>
{
typedef ptr_map_adapter<T,std::map<Key,void*,Compare,Allocator>,CloneAllocator>
base_type;
-
+
public:
explicit ptr_map( const Compare& comp = Compare(),
- const Allocator& a = Allocator() )
+ const Allocator& a = Allocator() )
: base_type( comp, a ) { }
template< class InputIterator >
- ptr_map( InputIterator first, InputIterator last,
+ ptr_map( InputIterator first, InputIterator last,
const Compare& comp = Compare(),
const Allocator& a = Allocator() )
- : base_type( first, last, comp, a )
+ : base_type( first, last, comp, a )
{ }
-
-#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
- BOOST_PTR_CONTAINER_DEFINE_RELEASE_AND_CLONE( ptr_map<Key,T,Compare,CloneAllocator,Allocator>,
+
+#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
+ typedef ptr_map<Key,T,Compare,CloneAllocator,Allocator> this_type;
+ BOOST_PTR_CONTAINER_DEFINE_RELEASE_AND_CLONE( this_type,
base_type );
-#else
+#else
BOOST_PTR_CONTAINER_DEFINE_RELEASE_AND_CLONE( ptr_map, base_type );
-#endif
+#endif
};
-
+
template
- <
- class Key,
- class T,
- class Compare = std::less<Key>,
+ <
+ class Key,
+ class T,
+ class Compare = std::less<Key>,
class CloneAllocator = heap_clone_allocator,
class Allocator = std::allocator< std::pair<const Key,void*> >
>
- class ptr_multimap :
+ class ptr_multimap :
public ptr_multimap_adapter<T,std::multimap<Key,void*,Compare,Allocator>,CloneAllocator>
{
typedef ptr_multimap_adapter<T,std::multimap<Key,void*,Compare,Allocator>,CloneAllocator>
base_type;
-
+
public:
explicit ptr_multimap( const Compare& comp = Compare(),
- const Allocator& a = Allocator() )
+ const Allocator& a = Allocator() )
: base_type( comp, a ) { }
-
+
template< class InputIterator >
ptr_multimap( InputIterator first, InputIterator last,
const Compare& comp = Compare(),
const Allocator& a = Allocator() )
- : base_type( first, last, comp, a )
+ : base_type( first, last, comp, a )
{ }
-#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
- BOOST_PTR_CONTAINER_DEFINE_RELEASE_AND_CLONE( ptr_multimap<Key,T,Compare,CloneAllocator,Allocator>,
+#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
+ typedef ptr_multimap<Key,T,Compare,CloneAllocator,Allocator> this_type;
+ BOOST_PTR_CONTAINER_DEFINE_RELEASE_AND_CLONE( this_type,
base_type );
-#else
+#else
- BOOST_PTR_CONTAINER_DEFINE_RELEASE_AND_CLONE( ptr_multimap,
+ BOOST_PTR_CONTAINER_DEFINE_RELEASE_AND_CLONE( ptr_multimap,
base_type );
#endif
};
Index: boost/ptr_container/ptr_map_adapter.hpp
===================================================================
RCS file: /cvsroot/boost/boost/boost/ptr_container/ptr_map_adapter.hpp,v
retrieving revision 1.9
diff -u -r1.9 ptr_map_adapter.hpp
--- boost/ptr_container/ptr_map_adapter.hpp 10 May 2005 21:22:22 -0000 1.9
+++ boost/ptr_container/ptr_map_adapter.hpp 11 May 2005 08:36:11 -0000
@@ -27,7 +27,7 @@
{
template
- <
+ <
class T,
class VoidPtrMap
>
@@ -35,32 +35,32 @@
{
typedef BOOST_DEDUCED_TYPENAME remove_nullable<T>::type
U;
- typedef VoidPtrMap
+ typedef VoidPtrMap
void_container_type;
-
+
typedef BOOST_DEDUCED_TYPENAME VoidPtrMap::allocator_type
allocator_type;
-
+
typedef BOOST_DEDUCED_TYPENAME VoidPtrMap::key_compare
key_compare;
-
+
typedef BOOST_DEDUCED_TYPENAME VoidPtrMap::value_compare
value_compare;
-
+
typedef BOOST_DEDUCED_TYPENAME VoidPtrMap::key_type
key_type;
-
+
typedef U value_type;
- typedef ptr_map_iterator<
+ typedef ptr_map_iterator<
BOOST_DEDUCED_TYPENAME VoidPtrMap::iterator,
BOOST_DEDUCED_TYPENAME VoidPtrMap::key_type, value_type>
iterator;
-
+
typedef
ptr_map_iterator<
BOOST_DEDUCED_TYPENAME VoidPtrMap::const_iterator,
- BOOST_DEDUCED_TYPENAME VoidPtrMap::key_type,
+ BOOST_DEDUCED_TYPENAME VoidPtrMap::key_type,
const value_type>
const_iterator;
@@ -73,7 +73,7 @@
typedef
ptr_map_iterator<
BOOST_DEDUCED_TYPENAME VoidPtrMap::const_reverse_iterator,
- BOOST_DEDUCED_TYPENAME VoidPtrMap::key_type,
+ BOOST_DEDUCED_TYPENAME VoidPtrMap::key_type,
const value_type>
const_reverse_iterator;
@@ -94,23 +94,23 @@
BOOST_STATIC_CONSTANT( bool, allow_null = boost::is_nullable<T>::value );
};
-
-
+
+
template
- <
+ <
class T,
- class VoidPtrMap,
+ class VoidPtrMap,
class CloneAllocator
>
- class ptr_map_adapter_base :
+ class ptr_map_adapter_base :
public ptr_container_detail::associative_ptr_container< map_config<T,VoidPtrMap>,
CloneAllocator >
{
typedef ptr_container_detail::associative_ptr_container< map_config<T,VoidPtrMap>,
- CloneAllocator >
+ CloneAllocator >
base_type;
-
+
public:
typedef BOOST_DEDUCED_TYPENAME base_type::const_iterator
@@ -131,7 +131,7 @@
->find( key );
if( i != const_cast<ptr_map_adapter_base*>(this)->end() )
return *i;
- else
+ else
throw bad_ptr_container_operation( "'ptr_map/multimap::at()' could"
" not find key" );
}
@@ -144,16 +144,16 @@
VoidPtrMap* m_;
const key_type& key_;
- eraser( VoidPtrMap* m, const key_type& key )
+ eraser( VoidPtrMap* m, const key_type& key )
: released_(false), m_(m), key_(key)
{}
-
- ~eraser()
+
+ ~eraser()
{
if( !released_ )
m_->erase(key_);
}
-
+
void release() { released_ = true; }
};
@@ -166,106 +166,107 @@
else
{
eraser e(&this->c_private(),key); // nothrow
- value_type res = new T(); // strong
+ value_type res = new T(); // strong
ref = res; // nothrow
e.release(); // nothrow
return *res;
}
}
-
+
public:
-#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
- BOOST_PTR_CONTAINER_DEFINE_CONSTRUCTORS( ptr_map_adapter_base<T,VoidPtrMap,CloneAllocator>,
+#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
+ typedef ptr_map_adapter_base<T,VoidPtrMap,CloneAllocator> this_type;
+ BOOST_PTR_CONTAINER_DEFINE_CONSTRUCTORS( this_type,
base_type );
-#else
- BOOST_PTR_CONTAINER_DEFINE_CONSTRUCTORS( ptr_map_adapter_base,
+#else
+ BOOST_PTR_CONTAINER_DEFINE_CONSTRUCTORS( ptr_map_adapter_base,
base_type );
#endif
template< class Compare, class Allocator >
explicit ptr_map_adapter_base( const Compare& comp,
- const Allocator& a )
- : base_type( comp, a )
+ const Allocator& a )
+ : base_type( comp, a )
{ }
template< class PtrContainer >
- ptr_map_adapter_base( std::auto_ptr<PtrContainer> clone )
+ ptr_map_adapter_base( std::auto_ptr<PtrContainer> clone )
: base_type( clone )
{ }
-
+
template< typename PtrContainer >
- void operator=( std::auto_ptr<PtrContainer> clone )
+ void operator=( std::auto_ptr<PtrContainer> clone )
{
base_type::operator=( clone );
- }
+ }
+
+ iterator find( const key_type& x )
+ {
+ return iterator( this->c_private().find( x ) );
+ }
+
+ const_iterator find( const key_type& x ) const
+ {
+ return const_iterator( this->c_private().find( x ) );
+ }
+
+ size_type count( const key_type& x ) const
+ {
+ return this->c_private().count( x );
+ }
+
+ iterator lower_bound( const key_type& x )
+ {
+ return iterator( this->c_private().lower_bound( x ) );
+ }
+
+ const_iterator lower_bound( const key_type& x ) const
+ {
+ return const_iterator( this->c_private().lower_bound( x ) );
+ }
+
+ iterator upper_bound( const key_type& x )
+ {
+ return iterator( this->c_private().upper_bound( x ) );
+ }
- iterator find( const key_type& x )
- {
- return iterator( this->c_private().find( x ) );
- }
-
- const_iterator find( const key_type& x ) const
- {
- return const_iterator( this->c_private().find( x ) );
- }
-
- size_type count( const key_type& x ) const
- {
- return this->c_private().count( x );
- }
-
- iterator lower_bound( const key_type& x )
- {
- return iterator( this->c_private().lower_bound( x ) );
- }
-
- const_iterator lower_bound( const key_type& x ) const
- {
- return const_iterator( this->c_private().lower_bound( x ) );
- }
-
- iterator upper_bound( const key_type& x )
- {
- return iterator( this->c_private().upper_bound( x ) );
- }
-
- const_iterator upper_bound( const key_type& x ) const
- {
- return const_iterator( this->c_private().upper_bound( x ) );
- }
-
- iterator_range<iterator> equal_range( const key_type& x )
- {
+ const_iterator upper_bound( const key_type& x ) const
+ {
+ return const_iterator( this->c_private().upper_bound( x ) );
+ }
+
+ iterator_range<iterator> equal_range( const key_type& x )
+ {
std::pair<BOOST_DEDUCED_TYPENAME base_type::ptr_iterator,
BOOST_DEDUCED_TYPENAME base_type::ptr_iterator>
- p = this->c_private().equal_range( x );
- return make_iterator_range( iterator( p.first ), iterator( p.second ) );
- }
-
- iterator_range<const_iterator> equal_range( const key_type& x ) const
- {
+ p = this->c_private().equal_range( x );
+ return make_iterator_range( iterator( p.first ), iterator( p.second ) );
+ }
+
+ iterator_range<const_iterator> equal_range( const key_type& x ) const
+ {
std::pair<BOOST_DEDUCED_TYPENAME base_type::ptr_const_iterator,
- BOOST_DEDUCED_TYPENAME base_type::ptr_const_iterator>
- p = this->c_private().equal_range( x );
- return make_iterator_range( const_iterator( p.first ), const_iterator( p.second ) );
- }
-
- reference at( const key_type& key )
- {
- return lookup( key );
- }
-
- const_reference at( const key_type& key ) const
- {
+ BOOST_DEDUCED_TYPENAME base_type::ptr_const_iterator>
+ p = this->c_private().equal_range( x );
+ return make_iterator_range( const_iterator( p.first ), const_iterator( p.second ) );
+ }
+
+ reference at( const key_type& key )
+ {
return lookup( key );
}
- reference operator[]( const key_type& key )
- {
+ const_reference at( const key_type& key ) const
+ {
+ return lookup( key );
+ }
+
+ reference operator[]( const key_type& key )
+ {
return insert_lookup( key );
- }
+ }
- auto_type replace( iterator where, value_type x ) // strong
- {
+ auto_type replace( iterator where, value_type x ) // strong
+ {
BOOST_ASSERT( where != this->end() );
this->enforce_null_policy( x, "Null pointer in 'replace()'" );
@@ -279,30 +280,30 @@
where.base()->second = ptr.release(); // nothrow, commit
return move( old );
}
-
+
};
-
+
} // ptr_container_detail
/////////////////////////////////////////////////////////////////////////
// ptr_map_adapter
/////////////////////////////////////////////////////////////////////////
-
+
template
- <
+ <
class T,
- class VoidPtrMap,
+ class VoidPtrMap,
class CloneAllocator = heap_clone_allocator
>
- class ptr_map_adapter :
+ class ptr_map_adapter :
public ptr_container_detail::ptr_map_adapter_base<T,VoidPtrMap,CloneAllocator>
{
- typedef ptr_container_detail::ptr_map_adapter_base<T,VoidPtrMap,CloneAllocator>
+ typedef ptr_container_detail::ptr_map_adapter_base<T,VoidPtrMap,CloneAllocator>
base_type;
-
- public:
- typedef BOOST_DEDUCED_TYPENAME base_type::iterator
- iterator;
+
+ public:
+ typedef BOOST_DEDUCED_TYPENAME base_type::iterator
+ iterator;
typedef BOOST_DEDUCED_TYPENAME base_type::const_iterator
const_iterator;
typedef BOOST_DEDUCED_TYPENAME base_type::object_type
@@ -315,9 +316,9 @@
const_reference;
typedef BOOST_DEDUCED_TYPENAME base_type::auto_type
auto_type;
- typedef BOOST_DEDUCED_TYPENAME VoidPtrMap::key_compare
+ typedef BOOST_DEDUCED_TYPENAME VoidPtrMap::key_compare
key_compare;
- typedef BOOST_DEDUCED_TYPENAME VoidPtrMap::allocator_type
+ typedef BOOST_DEDUCED_TYPENAME VoidPtrMap::allocator_type
allocator_type;
typedef BOOST_DEDUCED_TYPENAME base_type::value_type
value_type;
@@ -326,41 +327,41 @@
void safe_insert( const key_type& key, auto_type ptr ) // strong
{
std::pair<BOOST_DEDUCED_TYPENAME base_type::ptr_iterator,bool>
- res =
- this->c_private().insert( std::make_pair( key, ptr.get() ) ); // strong, commit
- if( res.second ) // nothrow
+ res =
+ this->c_private().insert( std::make_pair( key, ptr.get() ) ); // strong, commit
+ if( res.second ) // nothrow
ptr.release(); // nothrow
}
-
- template< class II >
- void map_basic_clone_and_insert( II first, II last )
- {
- while( first != last )
- {
+
+ template< class II >
+ void map_basic_clone_and_insert( II first, II last )
+ {
+ while( first != last )
+ {
if( this->find( first.key() ) == this->end() )
{
- const object_type& p = *first.base(); // nothrow
+ const object_type& p = *first.base(); // nothrow
auto_type ptr( this->null_policy_allocate_clone(
- static_cast<value_type>(p.second) ) );
- // strong
+ static_cast<value_type>(p.second) ) );
+ // strong
this->safe_insert( p.first, ptr_container_detail::
move( ptr ) );// strong, commit
}
- ++first;
- }
+ ++first;
+ }
}
-
+
public:
explicit ptr_map_adapter( const key_compare& comp = key_compare(),
- const allocator_type& a = allocator_type() )
+ const allocator_type& a = allocator_type() )
: base_type( comp, a ) { }
-
+
template< class InputIterator >
- ptr_map_adapter( InputIterator first, InputIterator last,
+ ptr_map_adapter( InputIterator first, InputIterator last,
const key_compare& comp = key_compare(),
const allocator_type& a = allocator_type() )
- : base_type( comp, a )
+ : base_type( comp, a )
{
map_basic_clone_and_insert( first, last );
}
@@ -371,7 +372,7 @@
template< class U >
void operator=( std::auto_ptr<U> r )
- {
+ {
base_type::operator=( r );
}
@@ -393,29 +394,29 @@
{
this->enforce_null_policy( x, "Null pointer in ptr_map_adapter::insert()" );
auto_type ptr( x ); // nothrow
-
+
std::pair<BOOST_DEDUCED_TYPENAME base_type::ptr_iterator,bool>
- res = this->c_private().insert( std::make_pair( key, x ) ); // strong, commit
- if( res.second ) // nothrow
+ res = this->c_private().insert( std::make_pair( key, x ) ); // strong, commit
+ if( res.second ) // nothrow
ptr.release(); // nothrow
- return std::make_pair( iterator( res.first ), res.second ); // nothrow
+ return std::make_pair( iterator( res.first ), res.second ); // nothrow
}
- bool transfer( iterator object,
+ bool transfer( iterator object,
ptr_map_adapter& from ) // strong
{
return this->single_transfer( object, from );
}
- size_type transfer( iterator first,
- iterator last,
+ size_type transfer( iterator first,
+ iterator last,
ptr_map_adapter& from ) // basic
{
return this->single_transfer( first, last, from );
}
#ifdef BOOST_NO_SFINAE
-#else
+#else
template< class Range >
BOOST_DEDUCED_TYPENAME boost::disable_if< boost::is_same< Range,
@@ -425,39 +426,39 @@
{
return transfer( this->adl_begin(r), this->adl_end(r), from );
}
-
+
#endif
size_type transfer( ptr_map_adapter& from ) // basic
{
return transfer( from.begin(), from.end(), from );
}
-
+
};
-
+
/////////////////////////////////////////////////////////////////////////
// ptr_multimap_adapter
/////////////////////////////////////////////////////////////////////////
template
- <
+ <
class T,
- class VoidPtrMultiMap,
+ class VoidPtrMultiMap,
class CloneAllocator = heap_clone_allocator
>
- class ptr_multimap_adapter :
+ class ptr_multimap_adapter :
public ptr_container_detail::ptr_map_adapter_base<T,VoidPtrMultiMap,CloneAllocator>
{
typedef ptr_container_detail::ptr_map_adapter_base<T,VoidPtrMultiMap,CloneAllocator>
base_type;
-
+
public: // typedefs
- typedef BOOST_DEDUCED_TYPENAME base_type::iterator
- iterator;
- typedef BOOST_DEDUCED_TYPENAME base_type::const_iterator
- const_iterator;
+ typedef BOOST_DEDUCED_TYPENAME base_type::iterator
+ iterator;
+ typedef BOOST_DEDUCED_TYPENAME base_type::const_iterator
+ const_iterator;
typedef BOOST_DEDUCED_TYPENAME base_type::object_type
- object_type;
+ object_type;
typedef BOOST_DEDUCED_TYPENAME base_type::size_type
size_type;
typedef BOOST_DEDUCED_TYPENAME base_type::key_type
@@ -467,41 +468,41 @@
typedef BOOST_DEDUCED_TYPENAME base_type::value_type
value_type;
typedef BOOST_DEDUCED_TYPENAME base_type::auto_type
- auto_type;
- typedef BOOST_DEDUCED_TYPENAME VoidPtrMultiMap::key_compare
+ auto_type;
+ typedef BOOST_DEDUCED_TYPENAME VoidPtrMultiMap::key_compare
key_compare;
- typedef BOOST_DEDUCED_TYPENAME VoidPtrMultiMap::allocator_type
+ typedef BOOST_DEDUCED_TYPENAME VoidPtrMultiMap::allocator_type
allocator_type;
private:
void safe_insert( const key_type& key, auto_type ptr ) // strong
{
- this->c_private().insert(
- std::make_pair( key, ptr.get() ) ); // strong, commit
+ this->c_private().insert(
+ std::make_pair( key, ptr.get() ) ); // strong, commit
ptr.release(); // nothrow
}
-
- template< typename II >
- void map_basic_clone_and_insert( II first, II last )
- {
- while( first != last )
- {
- const object_type& pair = *first.base(); // nothrow
+
+ template< typename II >
+ void map_basic_clone_and_insert( II first, II last )
+ {
+ while( first != last )
+ {
+ const object_type& pair = *first.base(); // nothrow
auto_type ptr( this->null_policy_allocate_clone(
- static_cast<value_type>( pair.second ) ) );
+ static_cast<value_type>( pair.second ) ) );
// strong
safe_insert( pair.first, ptr_container_detail::
move( ptr ) ); // strong, commit
- ++first;
- }
+ ++first;
+ }
}
-
+
public:
-
+
explicit ptr_multimap_adapter( const key_compare& comp = key_compare(),
const allocator_type& a = allocator_type() )
: base_type( comp, a ) { }
-
+
template< class InputIterator >
ptr_multimap_adapter( InputIterator first, InputIterator last,
const key_compare& comp = key_compare(),
@@ -517,12 +518,12 @@
template< class U >
void operator=( std::auto_ptr<U> r )
- {
+ {
base_type::operator=( r );
}
using base_type::release;
-
+
template< typename InputIterator >
void insert( InputIterator first, InputIterator last ) // basic
{
@@ -542,27 +543,27 @@
auto_type ptr( x ); // nothrow
BOOST_DEDUCED_TYPENAME base_type::ptr_iterator
res = this->c_private().insert( std::make_pair( key, x ) );
- // strong, commit
+ // strong, commit
ptr.release(); // notrow
- return iterator( res );
+ return iterator( res );
}
-
- void transfer( iterator object,
+
+ void transfer( iterator object,
ptr_multimap_adapter& from ) // strong
{
this->multi_transfer( object, from );
}
- size_type transfer( iterator first,
- iterator last,
+ size_type transfer( iterator first,
+ iterator last,
ptr_multimap_adapter& from ) // basic
{
return this->multi_transfer( first, last, from );
}
#ifdef BOOST_NO_SFINAE
-#else
+#else
template< class Range >
BOOST_DEDUCED_TYPENAME boost::disable_if< boost::is_same< Range,
@@ -573,7 +574,7 @@
return transfer( this->adl_begin(r), this->adl_end(r), from );
}
-#endif
+#endif
void transfer( ptr_multimap_adapter& from ) // basic
{
@@ -587,7 +588,7 @@
{
return i.base()->second == 0;
}
-
-} // namespace 'boost'
+
+} // namespace 'boost'
#endif
Index: boost/ptr_container/ptr_sequence_adapter.hpp
===================================================================
RCS file: /cvsroot/boost/boost/boost/ptr_container/ptr_sequence_adapter.hpp,v
retrieving revision 1.16
diff -u -r1.16 ptr_sequence_adapter.hpp
--- boost/ptr_container/ptr_sequence_adapter.hpp 10 May 2005 21:22:22 -0000 1.16
+++ boost/ptr_container/ptr_sequence_adapter.hpp 11 May 2005 09:06:12 -0000
@@ -29,13 +29,13 @@
#include <iostream>
namespace boost
-{
+{
namespace ptr_container_detail
{
-
+
template
- <
- class T,
+ <
+ class T,
class VoidPtrSeq
>
struct sequence_config
@@ -47,26 +47,26 @@
typedef BOOST_DEDUCED_TYPENAME VoidPtrSeq::allocator_type
allocator_type;
-
+
typedef U value_type;
typedef void_ptr_iterator<
- BOOST_DEDUCED_TYPENAME VoidPtrSeq::iterator, U >
+ BOOST_DEDUCED_TYPENAME VoidPtrSeq::iterator, U >
iterator;
-
+
typedef void_ptr_iterator<
BOOST_DEDUCED_TYPENAME VoidPtrSeq::const_iterator, const U >
const_iterator;
-
+
typedef void_ptr_iterator<
BOOST_DEDUCED_TYPENAME VoidPtrSeq::reverse_iterator, U >
reverse_iterator;
-
+
typedef void_ptr_iterator<
BOOST_DEDUCED_TYPENAME VoidPtrSeq::const_reverse_iterator, const U >
const_reverse_iterator;
-
- typedef value_type
+
+ typedef value_type
object_type;
#ifdef BOOST_NO_SFINAE
@@ -76,7 +76,7 @@
{
return static_cast<U*>( *i.base() );
}
-
+
#else
template< class Iter >
static U* get_pointer( void_ptr_iterator<Iter,U> i )
@@ -89,7 +89,7 @@
{
return &*i;
}
-#endif
+#endif
#ifdef BOOST_NO_SFINAE
@@ -98,7 +98,7 @@
{
return static_cast<const U*>( *i.base() );
}
-
+
#else // BOOST_NO_SFINAE
#if BOOST_WORKAROUND(__MWERKS__, <= 0x3003)
@@ -107,7 +107,7 @@
{
return static_cast<const U*>( *i.base() );
}
-#else
+#else
template< class Iter >
static const U* get_const_pointer( void_ptr_iterator<Iter,const U> i )
{
@@ -124,7 +124,7 @@
BOOST_STATIC_CONSTANT(bool, allow_null = boost::is_nullable<T>::value );
};
-
+
} // ptr_container_detail
@@ -135,43 +135,44 @@
}
-
+
template
- <
+ <
class T,
- class VoidPtrSeq,
+ class VoidPtrSeq,
class CloneAllocator = heap_clone_allocator
>
- class ptr_sequence_adapter : public
- ptr_container_detail::reversible_ptr_container< ptr_container_detail::sequence_config<T,VoidPtrSeq>,
+ class ptr_sequence_adapter : public
+ ptr_container_detail::reversible_ptr_container< ptr_container_detail::sequence_config<T,VoidPtrSeq>,
CloneAllocator >
{
typedef ptr_container_detail::reversible_ptr_container< ptr_container_detail::sequence_config<T,VoidPtrSeq>,
CloneAllocator >
base_type;
-
+
typedef BOOST_DEDUCED_TYPENAME base_type::scoped_deleter scoped_deleter;
-
+
public:
- typedef BOOST_DEDUCED_TYPENAME base_type::value_type value_type;
- typedef BOOST_DEDUCED_TYPENAME base_type::reference reference;
- typedef BOOST_DEDUCED_TYPENAME base_type::auto_type auto_type;
-
-#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
- BOOST_PTR_CONTAINER_DEFINE_CONSTRUCTORS( ptr_sequence_adapter<T,VoidPtrSeq,CloneAllocator>,
+ typedef BOOST_DEDUCED_TYPENAME base_type::value_type value_type;
+ typedef BOOST_DEDUCED_TYPENAME base_type::reference reference;
+ typedef BOOST_DEDUCED_TYPENAME base_type::auto_type auto_type;
+
+#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
+ typedef ptr_sequence_adapter<T,VoidPtrSeq,CloneAllocator> this_type;
+ BOOST_PTR_CONTAINER_DEFINE_CONSTRUCTORS( this_type,
base_type )
#else
- BOOST_PTR_CONTAINER_DEFINE_CONSTRUCTORS( ptr_sequence_adapter,
+ BOOST_PTR_CONTAINER_DEFINE_CONSTRUCTORS( ptr_sequence_adapter,
base_type )
-#endif
-
+#endif
+
template< class PtrContainer >
ptr_sequence_adapter( std::auto_ptr<PtrContainer> clone )
: base_type( clone )
{ }
template< class PtrContainer >
- void operator=( std::auto_ptr<PtrContainer> clone )
+ void operator=( std::auto_ptr<PtrContainer> clone )
{
base_type::operator=( clone );
}
@@ -180,7 +181,7 @@
// modifiers
/////////////////////////////////////////////////////////////
- void push_back( value_type x ) // strong
+ void push_back( value_type x ) // strong
{
this->enforce_null_policy( x, "Null pointer in 'push_back()'" );
@@ -189,21 +190,21 @@
ptr.release(); // nothrow
}
- void push_front( value_type x )
+ void push_front( value_type x )
{
this->enforce_null_policy( x, "Null pointer in 'push_front()'" );
auto_type ptr( x ); // nothrow
this->c_private().push_front( x ); // strong, commit
ptr.release(); // nothrow
- }
+ }
auto_type pop_back()
{
- if( this->empty() )
+ if( this->empty() )
throw bad_ptr_container_operation( "'pop_back()' "
" on empty container" );
- auto_type ptr( static_cast<value_type>(
+ auto_type ptr( static_cast<value_type>(
this->c_private().back() ) ); // nothrow
this->c_private().pop_back(); // nothrow
return ptr_container_detail::move( ptr ); // nothrow
@@ -211,28 +212,28 @@
auto_type pop_front()
{
- if( this->empty() )
- throw bad_ptr_container_operation( "'pop_front()' on"
- " empty container" );
- auto_type ptr( this->c_private().front() ); // nothrow
+ if( this->empty() )
+ throw bad_ptr_container_operation( "'pop_front()' on"
+ " empty container" );
+ auto_type ptr( this->c_private().front() ); // nothrow
this->c_private().pop_front(); // nothrow
- return ptr_container_detail::move( ptr );
+ return ptr_container_detail::move( ptr );
}
-
- reference front()
- {
+
+ reference front()
+ {
BOOST_ASSERT( !::boost::is_null( this->begin() ) );
if( this->empty() )
throw bad_ptr_container_operation( "accessing 'front()' on empty container" );
- return *this->begin();
+ return *this->begin();
}
- const_reference front() const
+ const_reference front() const
{
BOOST_ASSERT( !::boost::is_null( this->begin() ) );
if( this->empty() )
throw bad_ptr_container_operation( "accessing 'front()' on empty container" );
- return *this->begin();
+ return *this->begin();
}
reference back()
@@ -240,7 +241,7 @@
BOOST_ASSERT( !::boost::is_null( --this->end() ) );
if( this->empty() )
throw bad_ptr_container_operation( "accessing 'back()' on empty container" );
- return *--this->end();
+ return *--this->end();
}
const_reference back() const
@@ -248,25 +249,25 @@
BOOST_ASSERT( !::boost::is_null( --this->end() ) );
if( this->empty() )
throw bad_ptr_container_operation( "accessing 'back()' on empty container" );
- return *--this->end();
+ return *--this->end();
}
public: // deque/vector inerface
-
- reference operator[]( size_type n ) // nothrow
+
+ reference operator[]( size_type n ) // nothrow
{
BOOST_ASSERT( n < this->size() );
BOOST_ASSERT( !this->is_null( n ) );
- return *static_cast<value_type>( this->c_private()[n] );
+ return *static_cast<value_type>( this->c_private()[n] );
}
-
- const_reference operator[]( size_type n ) const // nothrow
- {
- BOOST_ASSERT( n < this->size() );
+
+ const_reference operator[]( size_type n ) const // nothrow
+ {
+ BOOST_ASSERT( n < this->size() );
BOOST_ASSERT( !this->is_null( n ) );
return *static_cast<value_type>( this->c_private()[n] );
}
-
+
reference at( size_type n )
{
if( n >= this->size() )
@@ -274,30 +275,30 @@
BOOST_ASSERT( !this->is_null( n ) );
return (*this)[n];
}
-
+
const_reference at( size_type n ) const
{
if( n >= this->size() )
throw bad_index( "'at()' out of bounds" );
BOOST_ASSERT( !this->is_null( n ) );
- return (*this)[n];
+ return (*this)[n];
}
-
+
public: // vector interface
-
+
size_type capacity() const
{
return this->c_private().capacity();
}
-
+
void reserve( size_type n )
{
- this->c_private().reserve( n );
+ this->c_private().reserve( n );
}
void reverse()
{
- this->c_private().reverse();
+ this->c_private().reverse();
}
public: // assign, insert, transfer
@@ -305,7 +306,7 @@
// overhead: 1 heap allocation (very cheap compared to cloning)
template< class InputIterator >
void assign( InputIterator first, InputIterator last ) // strong
- {
+ {
base_type temp( first, last );
this->swap( temp );
}
@@ -327,22 +328,27 @@
template< class I >
void insert_impl( iterator before, I first, I last, std::forward_iterator_tag ) // strong
{
- if( first == last )
+ if( first == last )
return;
scoped_deleter sd( first, last ); // strong
- this->insert_clones_and_release( sd, before ); // strong, commit
+ this->insert_clones_and_release( sd, before ); // strong, commit
}
public:
using base_type::insert;
-
+
template< class InputIterator >
void insert( iterator before, InputIterator first, InputIterator last ) // strong
{
+#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
+ insert_impl( before, first, last,
+ iterator_category<InputIterator>::type() );
+#else
insert_impl( before, first, last, BOOST_DEDUCED_TYPENAME
iterator_category<InputIterator>::type() );
- }
+#endif
+ }
#ifdef BOOST_NO_SFINAE
#else
@@ -356,23 +362,23 @@
#endif
- void transfer( iterator before,
- iterator first,
- iterator last,
+ void transfer( iterator before,
+ iterator first,
+ iterator last,
ptr_sequence_adapter& from ) // strong
{
BOOST_ASSERT( &from != this );
if( from.empty() )
return;
this->c_private().
- insert( before.base(),
+ insert( before.base(),
first.base(), last.base() ); // strong
from.c_private().erase( first.base(),
last.base() ); // nothrow
}
- void transfer( iterator before,
- iterator object,
+ void transfer( iterator before,
+ iterator object,
ptr_sequence_adapter& from ) // strong
{
BOOST_ASSERT( &from != this );
@@ -386,7 +392,7 @@
#ifdef BOOST_NO_SFINAE
#else
-
+
template< class Range >
BOOST_DEDUCED_TYPENAME boost::disable_if< boost::is_same< Range,
iterator > >::type
@@ -396,7 +402,7 @@
}
#endif
-
+
void transfer( iterator before, ptr_sequence_adapter& from ) // strong
{
BOOST_ASSERT( &from != this );
@@ -409,7 +415,7 @@
}
public: // null functions
-
+
bool is_null( size_type idx ) const
{
BOOST_ASSERT( idx < this->size() );
@@ -422,7 +428,7 @@
{
sort( first, last, std::less<T>() );
}
-
+
void sort()
{
sort( this->begin(), this->end() );
@@ -433,23 +439,23 @@
{
BOOST_ASSERT( first <= last && "out of range sort()" );
BOOST_ASSERT( this->begin() <= first && "out of range sort()" );
- BOOST_ASSERT( last <= this->end() && "out of range sort()" );
+ BOOST_ASSERT( last <= this->end() && "out of range sort()" );
// some static assert on the arguments of the comparison
- std::sort( first.base(), last.base(),
+ std::sort( first.base(), last.base(),
void_ptr_indirect_fun<Compare,T>(comp) );
}
-
+
template< class Compare >
void sort( Compare comp )
{
sort( this->begin(), this->end(), comp );
}
-
+
void unique( iterator first, iterator last )
{
unique( first, last, std::equal_to<T>() );
}
-
+
void unique()
{
unique( this->begin(), this->end() );
@@ -467,26 +473,26 @@
void compact_and_erase_nulls( iterator first, iterator last ) // nothrow
{
-
- typename base_type::ptr_iterator p = std::stable_partition(
- first.base(),
- last.base(),
+
+ typename base_type::ptr_iterator p = std::stable_partition(
+ first.base(),
+ last.base(),
is_not_zero_ptr() );
this->c_private().erase( p, this->end().base() );
-
+
}
-
+
public:
-
+
template< class Compare >
void unique( iterator first, iterator last, Compare comp )
{
BOOST_ASSERT( first <= last && "out of range unique()" );
BOOST_ASSERT( this->begin() <= first && "out of range unique()" );
- BOOST_ASSERT( last <= this->end() && "out of range unique()" );
+ BOOST_ASSERT( last <= this->end() && "out of range unique()" );
iterator prev = first;
- iterator next = first + 1;
+ iterator next = first + 1;
for( ; next != last; ++next )
{
if( comp( *prev, *next ) )
@@ -503,7 +509,7 @@
compact_and_erase_nulls( first, last );
}
-
+
template< class Compare >
void unique( Compare comp )
{
@@ -515,22 +521,22 @@
{
BOOST_ASSERT( first <= last && "out of range unique()" );
BOOST_ASSERT( this->begin() <= first && "out of range unique()" );
- BOOST_ASSERT( last <= this->end() && "out of range unique()" );
+ BOOST_ASSERT( last <= this->end() && "out of range unique()" );
- iterator next = first;
+ iterator next = first;
for( ; next != last; ++next )
{
if( pred( *next ) )
{
this->remove( next ); // delete object
*next.base() = 0; // mark pointer as deleted
- std::cout << " deleting ";
+ std::cout << " deleting ";
}
}
compact_and_erase_nulls( first, last );
}
-
+
template< class Pred >
void erase_if( Pred pred )
{
@@ -538,43 +544,43 @@
}
- void merge( iterator first, iterator last,
+ void merge( iterator first, iterator last,
ptr_sequence_adapter& from )
{
merge( first, last, from, std::less<T>() );
}
-
+
template< class BinPred >
- void merge( iterator first, iterator last,
+ void merge( iterator first, iterator last,
ptr_sequence_adapter& from, BinPred pred )
{
void_ptr_indirect_fun<BinPred,T> bin_pred(pred);
- size_type current_size = this->size();
+ size_type current_size = this->size();
this->transfer( this->end(), first, last, from );
typename base_type::ptr_iterator middle = this->begin().base();
- std::advance(middle,current_size);
+ std::advance(middle,current_size);
std::inplace_merge( this->begin().base(),
middle,
this->end().base(),
bin_pred );
}
-
+
void merge( ptr_sequence_adapter& r )
{
merge( r, std::less<T>() );
BOOST_ASSERT( r.empty() );
}
-
+
template< class BinPred >
void merge( ptr_sequence_adapter& r, BinPred pred )
{
merge( r.begin(), r.end(), r, pred );
- BOOST_ASSERT( r.empty() );
+ BOOST_ASSERT( r.empty() );
}
};
-} // namespace 'boost'
+} // namespace 'boost'
#endif
Index: boost/ptr_container/ptr_set.hpp
===================================================================
RCS file: /cvsroot/boost/boost/boost/ptr_container/ptr_set.hpp,v
retrieving revision 1.3
diff -u -r1.3 ptr_set.hpp
--- boost/ptr_container/ptr_set.hpp 10 May 2005 21:22:23 -0000 1.3
+++ boost/ptr_container/ptr_set.hpp 11 May 2005 08:39:22 -0000
@@ -24,53 +24,54 @@
{
template
- <
- class Key,
+ <
+ class Key,
class Compare = std::less<Key>,
class CloneAllocator = heap_clone_allocator,
class Allocator = std::allocator<void*>
>
- class ptr_set :
- public ptr_set_adapter< Key,
+ class ptr_set :
+ public ptr_set_adapter< Key,
std::set<void*,void_ptr_indirect_fun<Compare,Key>,Allocator>,
CloneAllocator >
{
typedef ptr_set_adapter< Key, std::set<void*,void_ptr_indirect_fun<Compare,Key>,Allocator>,
CloneAllocator >
base_type;
-
+
public:
explicit ptr_set( const Compare& comp = Compare(),
- const Allocator& a = Allocator() )
- : base_type( comp, a )
+ const Allocator& a = Allocator() )
+ : base_type( comp, a )
{ }
-
+
template< typename InputIterator >
- ptr_set( InputIterator first, InputIterator last,
+ ptr_set( InputIterator first, InputIterator last,
const Compare& comp = Compare(),
- const Allocator& a = Allocator() )
+ const Allocator& a = Allocator() )
: base_type( first, last, comp, a )
{ }
-#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
- BOOST_PTR_CONTAINER_DEFINE_RELEASE_AND_CLONE( ptr_set<Key,Compare,CloneAllocator,Allocator>,
+#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
+ typedef ptr_set<Key,Compare,CloneAllocator,Allocator> this_type;
+ BOOST_PTR_CONTAINER_DEFINE_RELEASE_AND_CLONE( this_type,
base_type );
#else
- BOOST_PTR_CONTAINER_DEFINE_RELEASE_AND_CLONE( ptr_set,
+ BOOST_PTR_CONTAINER_DEFINE_RELEASE_AND_CLONE( ptr_set,
base_type );
-#endif
+#endif
};
-
-
-
+
+
+
template
- <
- class Key,
+ <
+ class Key,
class Compare = std::less<Key>,
class CloneAllocator = heap_clone_allocator,
class Allocator = std::allocator<void*>
>
- class ptr_multiset :
+ class ptr_multiset :
public ptr_multiset_adapter< Key,
std::multiset<void*,void_ptr_indirect_fun<Compare,Key>,Allocator>,
CloneAllocator >
@@ -82,25 +83,26 @@
public:
explicit ptr_multiset( const Compare& comp = Compare(),
const Allocator& a = Allocator() )
- : base_type( comp, a )
+ : base_type( comp, a )
{ }
-
+
template< typename InputIterator >
ptr_multiset( InputIterator first, InputIterator last,
const Compare& comp = Compare(),
const Allocator& a = Allocator() )
- : base_type( first, last, comp, a )
+ : base_type( first, last, comp, a )
{ }
-#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
- BOOST_PTR_CONTAINER_DEFINE_RELEASE_AND_CLONE( ptr_multiset<Key,Compare,CloneAllocator,Allocator>,
+#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
+ typedef ptr_multiset<Key,Compare,CloneAllocator,Allocator> this_type;
+ BOOST_PTR_CONTAINER_DEFINE_RELEASE_AND_CLONE( this_type,
base_type );
#else
- BOOST_PTR_CONTAINER_DEFINE_RELEASE_AND_CLONE( ptr_multiset,
+ BOOST_PTR_CONTAINER_DEFINE_RELEASE_AND_CLONE( ptr_multiset,
base_type );
-#endif
-
+#endif
+
};
/////////////////////////////////////////////////////////////////////////
@@ -117,7 +119,7 @@
{
return r.clone().release();
}
-
+
/////////////////////////////////////////////////////////////////////////
// swap
Index: boost/ptr_container/ptr_vector.hpp
===================================================================
RCS file: /cvsroot/boost/boost/boost/ptr_container/ptr_vector.hpp,v
retrieving revision 1.3
diff -u -r1.3 ptr_vector.hpp
--- boost/ptr_container/ptr_vector.hpp 10 May 2005 21:22:23 -0000 1.3
+++ boost/ptr_container/ptr_vector.hpp 11 May 2005 09:03:56 -0000
@@ -23,29 +23,32 @@
{
template
- <
- class T,
+ <
+ class T,
class CloneAllocator = heap_clone_allocator,
class Allocator = std::allocator<void*>
>
- class ptr_vector : public
- ptr_sequence_adapter< T,
- std::vector<void*,Allocator>,
+ class ptr_vector : public
+ ptr_sequence_adapter< T,
+ std::vector<void*,Allocator>,
CloneAllocator >
- {
- typedef ptr_sequence_adapter< T,
- std::vector<void*,Allocator>,
- CloneAllocator >
+ {
+ typedef ptr_sequence_adapter< T,
+ std::vector<void*,Allocator>,
+ CloneAllocator >
base_class;
public:
-#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
- BOOST_PTR_CONTAINER_DEFINE_NON_INHERITED_MEMBERS( ptr_vector<T,CloneAllocator,Allocator>,
+ typedef BOOST_DEDUCED_TYPENAME base_class::auto_type auto_type;
+
+#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
+ typedef ptr_vector<T,CloneAllocator,Allocator> this_type;
+ BOOST_PTR_CONTAINER_DEFINE_NON_INHERITED_MEMBERS( this_type,
base_class );
-#else
- BOOST_PTR_CONTAINER_DEFINE_NON_INHERITED_MEMBERS( ptr_vector,
+#else
+ BOOST_PTR_CONTAINER_DEFINE_NON_INHERITED_MEMBERS( ptr_vector,
base_class );
-#endif
+#endif
ptr_vector( BOOST_DEDUCED_TYPENAME base_class::size_type n,
const allocator_type& alloc = allocator_type() )
@@ -74,7 +77,7 @@
{
l.swap(r);
}
-
+
}
#endif
boost-test(RUN) "ptr_container/indirect_fun" : "libs\ptr_container\test\indirect_fun.cpp"
boost-test(RUN) "ptr_container/tut1" : "libs\ptr_container\test\tut1.cpp"
boost-test(RUN) "ptr_container/iterator_test" : "libs\ptr_container\test\iterator_test.cpp"
boost-test(RUN) "ptr_container/view_example" : "libs\ptr_container\test\view_example.cpp"
boost-test(RUN) "ptr_container/incomplete_type_test" : "libs\ptr_container\test\incomplete_type_test.cpp"
boost-test(RUN) "ptr_container/tree_test" : "libs\ptr_container\test\tree_test.cpp"
boost-test(RUN) "ptr_container/ptr_array" : "libs\ptr_container\test\ptr_array.cpp"
boost-test(RUN) "ptr_container/ptr_map" : "libs\ptr_container\test\ptr_map.cpp"
boost-test(RUN) "ptr_container/ptr_set" : "libs\ptr_container\test\ptr_set.cpp"
boost-test(RUN) "ptr_container/ptr_deque" : "libs\ptr_container\test\ptr_deque.cpp"
boost-test(RUN) "ptr_container/ptr_list" : "libs\ptr_container\test\ptr_list.cpp"
boost-test(RUN) "ptr_container/ptr_vector" : "libs\ptr_container\test\ptr_vector.cpp"
...found 1088 targets...
...updating 60 targets...
borland-C++-action ..\..\..\bin\boost\libs\ptr_container\test\indirect_fun.test\borland\debug\indirect_fun.obj
indirect_fun.cpp:
Warning W8057 indirect_fun.cpp 76: Parameter 'argc' is never used in function init_unit_test_suite(int,char * *)
Warning W8057 indirect_fun.cpp 76: Parameter 'argv' is never used in function init_unit_test_suite(int,char * *)
borland-Link-action ..\..\..\bin\boost\libs\ptr_container\test\indirect_fun.test\borland\debug\indirect_fun.exe
execute-test ..\..\..\bin\boost\libs\ptr_container\test\indirect_fun.test\borland\debug\indirect_fun.run
1 file(s) copied.
**passed** ..\..\..\bin\boost\libs\ptr_container\test\indirect_fun.test\borland\debug\indirect_fun.test
borland-C++-action ..\..\..\bin\boost\libs\ptr_container\test\tut1.test\borland\debug\tut1.obj
tut1.cpp:
Error E2034 c:\Users\russell\Projects\boost-cvs\boost\boost/ptr_container/ptr_deque.hpp 48: Cannot convert 'ptr_container_detail::static_move_ptr<animal,ptr_container_detail::clone_deleter<ptr_container_detail::reversible_ptr_container<Config,CloneAllocator>::null_clone_allocator<&allow_null> > >' to 'ptr_container_detail::static_move_ptr<animal,ptr_container_detail::clone_deleter<ptr_container_detail::reversible_ptr_container<ptr_container_detail::sequence_config<animal,_STL::deque<void *,_STL::allocator<void *> > >,heap_clone_allocator>::null_clone_allocator<0> > >' in function ptr_deque<animal,heap_clone_allocator,_STL::allocator<void *> >::release(void_ptr_iterator<_STL::_Deque_iterator<void *,_STL::_Nonconst_traits<void *> >,animal>)
Error E2034 c:\Users\russell\Projects\boost-cvs\boost\boost/ptr_container/detail/reversible_ptr_container.hpp 487: Cannot convert 'move_ptrs::move_source<static_move_ptr<animal,clone_deleter<reversible_ptr_container<sequence_config<animal,_STL::deque<void *,_STL::allocator<void *> > >,heap_clone_allocator>::null_clone_allocator<0> > > >' to 'static_move_ptr<animal,clone_deleter<reversible_ptr_container<Config,CloneAllocator>::null_clone_allocator<&allow_null> > >' in function reversible_ptr_container<sequence_config<animal,_STL::deque<void *,_STL::allocator<void *> > >,heap_clone_allocator>::release(void_ptr_iterator<_STL::_Deque_iterator<void *,_STL::_Nonconst_traits<void *> >,animal>)
Error E2451 c:\Users\russell\Projects\boost-cvs\boost\boost/ptr_container/detail/reversible_ptr_container.hpp 53: Undefined symbol 'deallocate_clone' in function operator void () <animal>(const animal *) const
*** 3 errors in Compile ***
"bcc32" -j5 -g255 -q -c -P -w -Ve -Vx -a8 -b- -v -Od -vi- -tWC -tWR -tWC -WM- -w-8001 -I"..\..\..\bin\boost\libs\ptr_container\test" -I"c:\Users\russell\Projects\boost-cvs\boost" -o"..\..\..\bin\boost\libs\ptr_container\test\tut1.test\borland\debug\tut1.obj" "tut1.cpp"
...failed borland-C++-action ..\..\..\bin\boost\libs\ptr_container\test\tut1.test\borland\debug\tut1.obj...
...skipped <@boost!libs!ptr_container!test\tut1.test\borland\debug>tut1.CMD for lack of <@boost!libs!ptr_container!test\tut1.test\borland\debug>tut1.obj...
...skipped <@boost!libs!ptr_container!test\tut1.test\borland\debug>tut1.exe for lack of <@boost!libs!ptr_container!test\tut1.test\borland\debug>tut1.CMD...
...skipped <@boost!libs!ptr_container!test\tut1.test\borland\debug>tut1.run for lack of <@boost!libs!ptr_container!test\tut1.test\borland\debug>tut1.exe...
borland-C++-action ..\..\..\bin\boost\libs\ptr_container\test\iterator_test.test\borland\debug\iterator_test.obj
iterator_test.cpp:
Warning W8057 iterator_test.cpp 36: Parameter 'argc' is never used in function init_unit_test_suite(int,char * *)
Warning W8057 iterator_test.cpp 36: Parameter 'argv' is never used in function init_unit_test_suite(int,char * *)
borland-Link-action ..\..\..\bin\boost\libs\ptr_container\test\iterator_test.test\borland\debug\iterator_test.exe
execute-test ..\..\..\bin\boost\libs\ptr_container\test\iterator_test.test\borland\debug\iterator_test.run
1 file(s) copied.
**passed** ..\..\..\bin\boost\libs\ptr_container\test\iterator_test.test\borland\debug\iterator_test.test
borland-C++-action ..\..\..\bin\boost\libs\ptr_container\test\view_example.test\borland\debug\view_example.obj
view_example.cpp:
Warning W8091 view_example.cpp 157: template argument _RandomAccessIter passed to 'sort' is a output iterator: random iterator required in function main()
Warning W8092 view_example.cpp 163: template argument Compare passed to 'sort' is not an iterator: random iterator required in function main()
Warning W8092 view_example.cpp 165: template argument Compare passed to 'sort' is not an iterator: random iterator required in function main()
Error E2294 c:\Users\russell\Projects\boost-cvs\boost\boost/ptr_container/ptr_sequence_adapter.hpp 99: Structure required on left side of . or .* in function const photon * get_const_pointer<photon *>(photon *)
*** 1 errors in Compile ***
"bcc32" -j5 -g255 -q -c -P -w -Ve -Vx -a8 -b- -v -Od -vi- -tWC -tWR -tWC -WM- -w-8001 -I"..\..\..\bin\boost\libs\ptr_container\test" -I"c:\Users\russell\Projects\boost-cvs\boost" -o"..\..\..\bin\boost\libs\ptr_container\test\view_example.test\borland\debug\view_example.obj" "view_example.cpp"
...failed borland-C++-action ..\..\..\bin\boost\libs\ptr_container\test\view_example.test\borland\debug\view_example.obj...
...skipped <@boost!libs!ptr_container!test\view_example.test\borland\debug>view_example.CMD for lack of <@boost!libs!ptr_container!test\view_example.test\borland\debug>view_example.obj...
...skipped <@boost!libs!ptr_container!test\view_example.test\borland\debug>view_example.exe for lack of <@boost!libs!ptr_container!test\view_example.test\borland\debug>view_example.CMD...
...skipped <@boost!libs!ptr_container!test\view_example.test\borland\debug>view_example.run for lack of <@boost!libs!ptr_container!test\view_example.test\borland\debug>view_example.exe...
borland-C++-action ..\..\..\bin\boost\libs\ptr_container\test\incomplete_type_test.test\borland\debug\incomplete_type_test.obj
incomplete_type_test.cpp:
Warning W8057 incomplete_type_test.cpp 181: Parameter 'argc' is never used in function init_unit_test_suite(int,char * *)
Warning W8057 incomplete_type_test.cpp 181: Parameter 'argv' is never used in function init_unit_test_suite(int,char * *)
Error E2247 c:\Users\russell\Projects\boost-cvs\boost\boost/ptr_container/clone_allocator.hpp 26: 'Composite::Composite(const Composite &)' is not accessible in function Composite * new_clone<Composite>(const Composite &)
*** 1 errors in Compile ***
"bcc32" -j5 -g255 -q -c -P -w -Ve -Vx -a8 -b- -v -Od -vi- -tWC -tWR -tWC -WM- -w-8001 -I"..\..\..\bin\boost\libs\ptr_container\test" -I"c:\Users\russell\Projects\boost-cvs\boost" -o"..\..\..\bin\boost\libs\ptr_container\test\incomplete_type_test.test\borland\debug\incomplete_type_test.obj" "incomplete_type_test.cpp"
...failed borland-C++-action ..\..\..\bin\boost\libs\ptr_container\test\incomplete_type_test.test\borland\debug\incomplete_type_test.obj...
...skipped <@boost!libs!ptr_container!test\incomplete_type_test.test\borland\debug>incomplete_type_test.CMD for lack of <@boost!libs!ptr_container!test\incomplete_type_test.test\borland\debug>incomplete_type_test.obj...
...skipped <@boost!libs!ptr_container!test\incomplete_type_test.test\borland\debug>incomplete_type_test.exe for lack of <@boost!libs!ptr_container!test\incomplete_type_test.test\borland\debug>incomplete_type_test.CMD...
...skipped <@boost!libs!ptr_container!test\incomplete_type_test.test\borland\debug>incomplete_type_test.run for lack of <@boost!libs!ptr_container!test\incomplete_type_test.test\borland\debug>incomplete_type_test.exe...
borland-C++-action ..\..\..\bin\boost\libs\ptr_container\test\tree_test.test\borland\debug\tree_test.obj
tree_test.cpp:
Warning W8057 tree_test.cpp 278: Parameter 'argc' is never used in function init_unit_test_suite(int,char * *)
Warning W8057 tree_test.cpp 278: Parameter 'argv' is never used in function init_unit_test_suite(int,char * *)
borland-Link-action ..\..\..\bin\boost\libs\ptr_container\test\tree_test.test\borland\debug\tree_test.exe
execute-test ..\..\..\bin\boost\libs\ptr_container\test\tree_test.test\borland\debug\tree_test.run
1 file(s) copied.
**passed** ..\..\..\bin\boost\libs\ptr_container\test\tree_test.test\borland\debug\tree_test.test
borland-C++-action ..\..\..\bin\boost\libs\ptr_container\test\ptr_array.test\borland\debug\ptr_array.obj
ptr_array.cpp:
Error E2285 ptr_array.cpp 89: Could not find a match for 'ptr_array<int,10,heap_clone_allocator>::at<idx>(int)' in function test_array()
Error E2451 ptr_array.cpp 89: Undefined symbol 'ex' in function test_array()
Error E2285 ptr_array.cpp 90: Could not find a match for 'unit_test::ut_detail::ignore_unused_variable_warning<T>(undefined)' in function test_array()
Error E2285 ptr_array.cpp 91: Could not find a match for 'unit_test::ut_detail::ignore_unused_variable_warning<T>(undefined)' in function test_array()
Warning W8057 ptr_array.cpp 157: Parameter 'argc' is never used in function init_unit_test_suite(int,char * *)
Warning W8057 ptr_array.cpp 157: Parameter 'argv' is never used in function init_unit_test_suite(int,char * *)
*** 4 errors in Compile ***
"bcc32" -j5 -g255 -q -c -P -w -Ve -Vx -a8 -b- -v -Od -vi- -tWC -tWR -tWC -WM- -w-8001 -I"..\..\..\bin\boost\libs\ptr_container\test" -I"c:\Users\russell\Projects\boost-cvs\boost" -o"..\..\..\bin\boost\libs\ptr_container\test\ptr_array.test\borland\debug\ptr_array.obj" "ptr_array.cpp"
...failed borland-C++-action ..\..\..\bin\boost\libs\ptr_container\test\ptr_array.test\borland\debug\ptr_array.obj...
...skipped <@boost!libs!ptr_container!test\ptr_array.test\borland\debug>ptr_array.CMD for lack of <@boost!libs!ptr_container!test\ptr_array.test\borland\debug>ptr_array.obj...
..skipped <@boost!libs!ptr_container!test\ptr_array.test\borland\debug>ptr_array.exe for lack of <@boost!libs!ptr_container!test\ptr_array.test\borland\debug>ptr_array.CMD...
...skipped <@boost!libs!ptr_container!test\ptr_array.test\borland\debug>ptr_array.run for lack of <@boost!libs!ptr_container!test\ptr_array.test\borland\debug>ptr_array.exe...
borland-C++-action ..\..\..\bin\boost\libs\ptr_container\test\ptr_map.test\borland\debug\ptr_map.obj
ptr_map.cpp:
Error E2303 c:\Users\russell\Projects\boost-cvs\boost\boost/ptr_container/ptr_map.hpp 54: Type name expected
Error E2139 c:\Users\russell\Projects\boost-cvs\boost\boost/ptr_container/ptr_map.hpp 54: Declaration missing ;
Error E2303 c:\Users\russell\Projects\boost-cvs\boost\boost/ptr_container/ptr_map.hpp 91: Type name expected
Error E2139 c:\Users\russell\Projects\boost-cvs\boost\boost/ptr_container/ptr_map.hpp 91: Declaration missing ;
Error E2451 ptr_map.cpp 206: Undefined symbol 'ex' in function test_map()
Error E2228 ptr_map.cpp 206: Too many error or warning messages in function test_map()
*** 6 errors in Compile ***
"bcc32" -j5 -g255 -q -c -P -w -Ve -Vx -a8 -b- -v -Od -vi- -tWC -tWR -tWC -WM- -w-8001 -I"..\..\..\bin\boost\libs\ptr_container\test" -I"c:\Users\russell\Projects\boost-cvs\boost" -o"..\..\..\bin\boost\libs\ptr_container\test\ptr_map.test\borland\debug\ptr_map.obj" "ptr_map.cpp"
...failed borland-C++-action ..\..\..\bin\boost\libs\ptr_container\test\ptr_map.test\borland\debug\ptr_map.obj...
...skipped <@boost!libs!ptr_container!test\ptr_map.test\borland\debug>ptr_map.CMD for lack of <@boost!libs!ptr_container!test\ptr_map.test\borland\debug>ptr_map.obj...
...skipped <@boost!libs!ptr_container!test\ptr_map.test\borland\debug>ptr_map.exe for lack of <@boost!libs!ptr_container!test\ptr_map.test\borland\debug>ptr_map.CMD...
...skipped <@boost!libs!ptr_container!test\ptr_map.test\borland\debug>ptr_map.run for lack of <@boost!libs!ptr_container!test\ptr_map.test\borland\debug>ptr_map.exe...
borland-C++-action ..\..\..\bin\boost\libs\ptr_container\test\ptr_set.test\borland\debug\ptr_set.obj
ptr_set.cpp:
Error E2303 c:\Users\russell\Projects\boost-cvs\boost\boost/ptr_container/ptr_set.hpp 58: Type name expected
Error E2139 c:\Users\russell\Projects\boost-cvs\boost\boost/ptr_container/ptr_set.hpp 58: Declaration missing ;
Error E2303 c:\Users\russell\Projects\boost-cvs\boost\boost/ptr_container/ptr_set.hpp 99: Type name expected
Error E2139 c:\Users\russell\Projects\boost-cvs\boost\boost/ptr_container/ptr_set.hpp 99: Declaration missing ;
Error E2451 ptr_set.cpp 26: Undefined symbol 'ex' in function test_set()
Error E2228 ptr_set.cpp 26: Too many error or warning messages in function test_set()
*** 6 errors in Compile ***
"bcc32" -j5 -g255 -q -c -P -w -Ve -Vx -a8 -b- -v -Od -vi- -tWC -tWR -tWC -WM- -w-8001 -I"..\..\..\bin\boost\libs\ptr_container\test" -I"c:\Users\russell\Projects\boost-cvs\boost" -o"..\..\..\bin\boost\libs\ptr_container\test\ptr_set.test\borland\debug\ptr_set.obj" "ptr_set.cpp"
...failed borland-C++-action ..\..\..\bin\boost\libs\ptr_container\test\ptr_set.test\borland\debug\ptr_set.obj...
...skipped <@boost!libs!ptr_container!test\ptr_set.test\borland\debug>ptr_set.CMD for lack of <@boost!libs!ptr_container!test\ptr_set.test\borland\debug>ptr_set.obj...
...skipped <@boost!libs!ptr_container!test\ptr_set.test\borland\debug>ptr_set.exe for lack of <@boost!libs!ptr_container!test\ptr_set.test\borland\debug>ptr_set.CMD...
...skipped <@boost!libs!ptr_container!test\ptr_set.test\borland\debug>ptr_set.run for lack of <@boost!libs!ptr_container!test\ptr_set.test\borland\debug>ptr_set.exe...
borland-C++-action ..\..\..\bin\boost\libs\ptr_container\test\ptr_deque.test\borland\debug\ptr_deque.obj
ptr_deque.cpp:
Error E2285 sequence_test_data.hpp 81: Could not find a match for 'ptr_sequence_adapter<Base,deque<void *,allocator<void *> >,heap_clone_allocator>::insert<InputIterator>(void_ptr_iterator<_Deque_iterator<void *,_Nonconst_traits<void *> >,Base>,Derived_class *)' in function void reversible_container_test<ptr_deque<Base,heap_clone_allocator,allocator<void *> >,Base,Derived_class>()
Error E2034 sequence_test_data.hpp 113: Cannot convert 'ptr_container_detail::static_move_ptr<Base,ptr_container_detail::clone_deleter<ptr_container_detail::reversible_ptr_container<Config,CloneAllocator>::null_clone_allocator<&allow_null> > >' to 'ptr_container_detail::static_move_ptr<Base,ptr_container_detail::clone_deleter<ptr_container_detail::reversible_ptr_container<ptr_container_detail::sequence_config<Base,deque<void *,allocator<void *> > >,heap_clone_allocator>::null_clone_allocator<0> > >' in function void reversible_container_test<ptr_deque<Base,heap_clone_allocator,allocator<void *> >,Base,Derived_class>()
Warning W8004 sequence_test_data.hpp 132: 'ptr2' is assigned a value that is never used in function void reversible_container_test<ptr_deque<Base,heap_clone_allocator,allocator<void *> >,Base,Derived_class>()
Warning W8057 test_data.hpp 215: Parameter 'r' is never used in function void hide_warning<allocator<void *> >(allocator<void *> &)
Warning W8057 test_data.hpp 215: Parameter 'r' is never used in function void hide_warning<unsigned int>(unsigned int &)
Warning W8057 test_data.hpp 215: Parameter 'r' is never used in function void hide_warning<Base>(Base &)
Warning W8057 test_data.hpp 215: Parameter 'r' is never used in function void hide_warning<const Base>(const Base &)
Error E2285 sequence_test_data.hpp 81: Could not find a match for 'ptr_sequence_adapter<Value,deque<void *,allocator<void *> >,heap_clone_allocator>::insert<InputIterator>(void_ptr_iterator<_Deque_iterator<void *,_Nonconst_traits<void *> >,Value>,Value *)' in function void reversible_container_test<ptr_deque<Value,heap_clone_allocator,allocator<void *> >,Value,Value>()
Error E2034 sequence_test_data.hpp 113: Cannot convert 'ptr_container_detail::static_move_ptr<Value,ptr_container_detail::clone_deleter<ptr_container_detail::reversible_ptr_container<Config,CloneAllocator>::null_clone_allocator<&allow_null> > >' to 'ptr_container_detail::static_move_ptr<Value,ptr_container_detail::clone_deleter<ptr_container_detail::reversible_ptr_container<ptr_container_detail::sequence_config<Value,deque<void *,allocator<void *> > >,heap_clone_allocator>::null_clone_allocator<0> > >' in function void reversible_container_test<ptr_deque<Value,heap_clone_allocator,allocator<void *> >,Value,Value>()
Warning W8004 sequence_test_data.hpp 132: 'ptr2' is assigned a value that is never used in function void reversible_container_test<ptr_deque<Value,heap_clone_allocator,allocator<void *> >,Value,Value>()
Warning W8057 test_data.hpp 215: Parameter 'r' is never used in function void hide_warning<Value>(Value &)
Warning W8057 test_data.hpp 215: Parameter 'r' is never used in function void hide_warning<const Value>(const Value &)
Error E2285 sequence_test_data.hpp 81: Could not find a match for 'ptr_sequence_adapter<nullable<Base>,deque<void *,allocator<void *> >,heap_clone_allocator>::insert<InputIterator>(void_ptr_iterator<_Deque_iterator<void *,_Nonconst_traits<void *> >,Base>,Derived_class *)' in function void reversible_container_test<ptr_deque<nullable<Base>,heap_clone_allocator,allocator<void *> >,Base,Derived_class>()
Error E2228 sequence_test_data.hpp 81: Too many error or warning messages in function void reversible_container_test<ptr_deque<nullable<Base>,heap_clone_allocator,allocator<void *> >,Base,Derived_class>()
*** 6 errors in Compile ***
"bcc32" -j5 -g255 -q -c -P -w -Ve -Vx -a8 -b- -v -Od -vi- -tWC -tWR -tWC -WM- -w-8001 -I"..\..\..\bin\boost\libs\ptr_container\test" -I"c:\Users\russell\Projects\boost-cvs\boost" -o"..\..\..\bin\boost\libs\ptr_container\test\ptr_deque.test\borland\debug\ptr_deque.obj" "ptr_deque.cpp"
...failed borland-C++-action ..\..\..\bin\boost\libs\ptr_container\test\ptr_deque.test\borland\debug\ptr_deque.obj...
...skipped <@boost!libs!ptr_container!test\ptr_deque.test\borland\debug>ptr_deque.CMD for lack of <@boost!libs!ptr_container!test\ptr_deque.test\borland\debug>ptr_deque.obj...
...skipped <@boost!libs!ptr_container!test\ptr_deque.test\borland\debug>ptr_deque.exe for lack of <@boost!libs!ptr_container!test\ptr_deque.test\borland\debug>ptr_deque.CMD...
...skipped <@boost!libs!ptr_container!test\ptr_deque.test\borland\debug>ptr_deque.run for lack of <@boost!libs!ptr_container!test\ptr_deque.test\borland\debug>ptr_deque.exe...
borland-C++-action ..\..\..\bin\boost\libs\ptr_container\test\ptr_list.test\borland\debug\ptr_list.obj
ptr_list.cpp:
Error E2303 c:\Users\russell\Projects\boost-cvs\boost\boost/ptr_container/ptr_list.hpp 45: Type name expected
Error E2139 c:\Users\russell\Projects\boost-cvs\boost\boost/ptr_container/ptr_list.hpp 45: Declaration missing ;
Error E2316 sequence_test_data.hpp 34: 'clone' is not a member of 'ptr_list<Base,heap_clone_allocator,allocator<void *> >' in function void reversible_container_test<ptr_list<Base,heap_clone_allocator,allocator<void *> >,Base,Derived_class>()
Error E2285 sequence_test_data.hpp 81: Could not find a match for 'ptr_sequence_adapter<Base,list<void *,allocator<void *> >,heap_clone_allocator>::insert<InputIterator>(void_ptr_iterator<_List_iterator<void *,_Nonconst_traits<void *> >,Base>,Derived_class *)' in function void reversible_container_test<ptr_list<Base,heap_clone_allocator,allocator<void *> >,Base,Derived_class>()
Error E2089 sequence_test_data.hpp 104: Identifier 'auto_type' cannot have a type qualifier in function void reversible_container_test<ptr_list<Base,heap_clone_allocator,allocator<void *> >,Base,Derived_class>()
Error E2228 sequence_test_data.hpp 104: Too many error or warning messages in function void reversible_container_test<ptr_list<Base,heap_clone_allocator,allocator<void *> >,Base,Derived_class>()
*** 6 errors in Compile ***
"bcc32" -j5 -g255 -q -c -P -w -Ve -Vx -a8 -b- -v -Od -vi- -tWC -tWR -tWC -WM- -w-8001 -I"..\..\..\bin\boost\libs\ptr_container\test" -I"c:\Users\russell\Projects\boost-cvs\boost" -o"..\..\..\bin\boost\libs\ptr_container\test\ptr_list.test\borland\debug\ptr_list.obj" "ptr_list.cpp"
...failed borland-C++-action ..\..\..\bin\boost\libs\ptr_container\test\ptr_list.test\borland\debug\ptr_list.obj...
...skipped <@boost!libs!ptr_container!test\ptr_list.test\borland\debug>ptr_list.CMD for lack of <@boost!libs!ptr_container!test\ptr_list.test\borland\debug>ptr_list.obj...
...skipped <@boost!libs!ptr_container!test\ptr_list.test\borland\debug>ptr_list.exe for lack of <@boost!libs!ptr_container!test\ptr_list.test\borland\debug>ptr_list.CMD...
...skipped <@boost!libs!ptr_container!test\ptr_list.test\borland\debug>ptr_list.run for lack of <@boost!libs!ptr_container!test\ptr_list.test\borland\debug>ptr_list.exe...
borland-C++-action ..\..\..\bin\boost\libs\ptr_container\test\ptr_vector.test\borland\debug\ptr_vector.obj
ptr_vector.cpp:
Error E2285 ptr_vector.cpp 33: Could not find a match for 'ptr_sequence_adapter<int,vector<void *,allocator<void *> >,heap_clone_allocator>::insert<InputIterator>(void_ptr_iterator<void * *,int>,int)' in function test_ptr_vector()
Error E2451 ptr_vector.cpp 33: Undefined symbol 'ex' in function test_ptr_vector()
Error E2285 ptr_vector.cpp 34: Could not find a match for 'unit_test::ut_detail::ignore_unused_variable_warning<T>(undefined)' in function test_ptr_vector()
Error E2285 ptr_vector.cpp 36: Could not find a match for 'unit_test::ut_detail::ignore_unused_variable_warning<T>(undefined)' in function test_ptr_vector()
Error E2285 ptr_vector.cpp 37: Could not find a match for 'unit_test::ut_detail::ignore_unused_variable_warning<T>(undefined)' in function test_ptr_vector()
Error E2228 ptr_vector.cpp 37: Too many error or warning messages in function test_ptr_vector()
*** 6 errors in Compile ***
"bcc32" -j5 -g255 -q -c -P -w -Ve -Vx -a8 -b- -v -Od -vi- -tWC -tWR -tWC -WM- -w-8001 -I"..\..\..\bin\boost\libs\ptr_container\test" -I"c:\Users\russell\Projects\boost-cvs\boost" -o"..\..\..\bin\boost\libs\ptr_container\test\ptr_vector.test\borland\debug\ptr_vector.obj" "ptr_vector.cpp"
...failed borland-C++-action ..\..\..\bin\boost\libs\ptr_container\test\ptr_vector.test\borland\debug\ptr_vector.obj...
...skipped <@boost!libs!ptr_container!test\ptr_vector.test\borland\debug>ptr_vector.CMD for lack of <@boost!libs!ptr_container!test\ptr_vector.test\borland\debug>ptr_vector.obj...
...skipped <@boost!libs!ptr_container!test\ptr_vector.test\borland\debug>ptr_vector.exe for lack of <@boost!libs!ptr_container!test\ptr_vector.test\borland\debug>ptr_vector.CMD...
...skipped <@boost!libs!ptr_container!test\ptr_vector.test\borland\debug>ptr_vector.run for lack of <@boost!libs!ptr_container!test\ptr_vector.test\borland\debug>ptr_vector.exe...
...failed updating 9 targets...
...skipped 36 targets...
...updated 15 targets...
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk