|
Boost-Commit : |
Subject: [Boost-commit] svn:boost r71611 - in sandbox/block_ptr: boost boost/detail libs/smart_ptr/example
From: phil_at_[hidden]
Date: 2011-04-29 17:41:46
Author: pbouchard
Date: 2011-04-29 17:41:45 EDT (Fri, 29 Apr 2011)
New Revision: 71611
URL: http://svn.boost.org/trac/boost/changeset/71611
Log:
* Added factory support and made pointee * assignments private
Text files modified:
sandbox/block_ptr/boost/block_ptr.hpp | 94 ++++++++++++++++++++++++---------------
sandbox/block_ptr/boost/detail/block_base.hpp | 4
sandbox/block_ptr/libs/smart_ptr/example/t100.h | 10 ++--
sandbox/block_ptr/libs/smart_ptr/example/t100_test1.cpp | 6 +-
4 files changed, 67 insertions(+), 47 deletions(-)
Modified: sandbox/block_ptr/boost/block_ptr.hpp
==============================================================================
--- sandbox/block_ptr/boost/block_ptr.hpp (original)
+++ sandbox/block_ptr/boost/block_ptr.hpp 2011-04-29 17:41:45 EDT (Fri, 29 Apr 2011)
@@ -222,6 +222,22 @@
fast_pool_allocator<block_header> block_header::pool_;
+#define TEMPLATE_DECL(z, n, text) BOOST_PP_COMMA_IF(n) typename T ## n
+#define ARGUMENT_DECL(z, n, text) BOOST_PP_COMMA_IF(n) T ## n const & t ## n
+#define PARAMETER_DECL(z, n, text) BOOST_PP_COMMA_IF(n) t ## n
+
+#define CONSTRUCT_MAKE_BLOCK(z, n, text) \
+ template <typename V, BOOST_PP_REPEAT(n, TEMPLATE_DECL, 0)> \
+ block_ptr<V> text(BOOST_PP_REPEAT(n, ARGUMENT_DECL, 0)) \
+ { \
+ return block_ptr<V>(new block<V>(BOOST_PP_REPEAT(n, PARAMETER_DECL, 0))); \
+ }
+
+#define BEFRIEND_MAKE_BLOCK(z, n, text) \
+ template <typename V, BOOST_PP_REPEAT(n, TEMPLATE_DECL, 0)> \
+ friend block_ptr<V> text(BOOST_PP_REPEAT(n, ARGUMENT_DECL, 0));
+
+
/**
Deterministic memory manager of constant complexity.
@@ -244,24 +260,6 @@
intrusive_stack::node pn_; /**< Tag used for enlisting a pointer on the heap to later share the @c block_header it belongs to. */
};
- public:
- typedef T value_type;
- typedef block<value_type> element_type;
-
-
- /**
- Initialization of a pointer living on the stack or proper enlistment if living on the heap.
- */
-
- block_ptr() : ps_(0)
- {
- if (! block_base::pool_.is_from(this))
- ps_ = new block_header();
- else
- block_base::pool_.top(this)->ptrs_.push(& pn_);
- }
-
-
/**
Initialization of a pointer living on the stack or proper enlistment if living on the heap.
@@ -286,6 +284,44 @@
/**
+ Assignment & union of 2 sets if the pointee resides a different @c block_header.
+
+ @param p New pointee object to manage.
+ */
+
+ template <typename V>
+ block_ptr & operator = (block<V> * p)
+ {
+ release(false);
+
+ init(p);
+
+ base::operator = (p);
+
+ return * this;
+ }
+
+ BOOST_PP_REPEAT_FROM_TO(1, 10, BEFRIEND_MAKE_BLOCK, make_block)
+
+ public:
+ typedef T value_type;
+ typedef block<value_type> element_type;
+
+
+ /**
+ Initialization of a pointer living on the stack or proper enlistment if living on the heap.
+ */
+
+ block_ptr() : ps_(0)
+ {
+ if (! block_base::pool_.is_from(this))
+ ps_ = new block_header();
+ else
+ block_base::pool_.top(this)->ptrs_.push(& pn_);
+ }
+
+
+ /**
Initialization of a pointer living on the stack or proper enlistment if living on the heap.
@param p New pointer to manage.
@@ -323,25 +359,6 @@
/**
Assignment & union of 2 sets if the pointee resides a different @c block_header.
- @param p New pointee object to manage.
- */
-
- template <typename V>
- block_ptr & operator = (block<V> * p)
- {
- release(false);
-
- init(p);
-
- base::operator = (p);
-
- return * this;
- }
-
-
- /**
- Assignment & union of 2 sets if the pointee resides a different @c block_header.
-
@param p New pointer to manage.
*/
@@ -435,12 +452,15 @@
};
+BOOST_PP_REPEAT_FROM_TO(1, 10, CONSTRUCT_MAKE_BLOCK, make_block)
+
} // namespace sh
} // namespace detail
using detail::sh::block_ptr;
using detail::sh::block;
+using detail::sh::make_block;
} // namespace boost
Modified: sandbox/block_ptr/boost/detail/block_base.hpp
==============================================================================
--- sandbox/block_ptr/boost/detail/block_base.hpp (original)
+++ sandbox/block_ptr/boost/detail/block_base.hpp 2011-04-29 17:41:45 EDT (Fri, 29 Apr 2011)
@@ -181,7 +181,7 @@
#define ARGUMENT_DECL(z, n, text) BOOST_PP_COMMA_IF(n) T ## n const & t ## n
#define PARAMETER_DECL(z, n, text) BOOST_PP_COMMA_IF(n) t ## n
-#define CONSTRUCT_OWNED(z, n, text) \
+#define CONSTRUCT_BLOCK(z, n, text) \
template <BOOST_PP_REPEAT(n, TEMPLATE_DECL, 0)> \
text(BOOST_PP_REPEAT(n, ARGUMENT_DECL, 0)) : elem_(BOOST_PP_REPEAT(n, PARAMETER_DECL, 0)) {}
@@ -204,7 +204,7 @@
{
}
- BOOST_PP_REPEAT_FROM_TO(1, 10, CONSTRUCT_OWNED, block)
+ BOOST_PP_REPEAT_FROM_TO(1, 10, CONSTRUCT_BLOCK, block)
/**
Modified: sandbox/block_ptr/libs/smart_ptr/example/t100.h
==============================================================================
--- sandbox/block_ptr/libs/smart_ptr/example/t100.h (original)
+++ sandbox/block_ptr/libs/smart_ptr/example/t100.h 2011-04-29 17:41:45 EDT (Fri, 29 Apr 2011)
@@ -82,14 +82,14 @@
static map_sn_t search_;
- neuron(std::string const & s, pointee * p1 = 0, pointee * p2 = 0, pointee * p3 = 0) : neuron_base(s)
+ neuron(std::string const & s) : neuron_base(s)
{
/// FIXME
//search_[s] = (pointee *) (typename pointee::roofof) static_cast<neuron *>(rootof<is_polymorphic<neuron>::value>::get(this));
-
- if (p1) sub_[0].second = p1;
- if (p2) sub_[1].second = p2;
- if (p3) sub_[2].second = p3;
+
+ //if (p1) sub_[0].second = p1;
+ //if (p2) sub_[1].second = p2;
+ //if (p3) sub_[2].second = p3;
}
double operator () (std::string const & input)
Modified: sandbox/block_ptr/libs/smart_ptr/example/t100_test1.cpp
==============================================================================
--- sandbox/block_ptr/libs/smart_ptr/example/t100_test1.cpp (original)
+++ sandbox/block_ptr/libs/smart_ptr/example/t100_test1.cpp 2011-04-29 17:41:45 EDT (Fri, 29 Apr 2011)
@@ -18,9 +18,9 @@
int main(int argv, char * argc[])
{
- block_ptr<neuron_sight> t100 = new block<neuron_sight>("I eat ([a-z]+) then drink ([a-z]+)");
- t100->sub_[0].second = new block<neuron_sight>("beef|chicken");
- t100->sub_[1].second = new block<neuron_sight>("vodka|water");
+ block_ptr<neuron_sight> t100 = make_block<neuron_sight>("I eat ([a-z]+) then drink ([a-z]+)");
+ t100->sub_[0].second = make_block<neuron_sight>("beef|chicken");
+ t100->sub_[1].second = make_block<neuron_sight>("vodka|water");
cout << (* t100)("I eat beef then drink wine") << endl;
cout << (* t100)("I eat beef then drink wine") << endl;
Boost-Commit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk