Update of /cvsroot/boost/boost/boost/interprocess/detail
In directory sc8-pr-cvs3.sourceforge.net:/tmp/cvs-serv29744/detail
Modified Files:
creation_tags.hpp file_wrapper.hpp in_place_interface.hpp
iterators.hpp managed_memory_impl.hpp
managed_open_or_create_impl.hpp
Log Message:
no message
Index: creation_tags.hpp
===================================================================
RCS file: /cvsroot/boost/boost/boost/interprocess/detail/creation_tags.hpp,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -d -r1.3 -r1.4
--- creation_tags.hpp 12 May 2007 12:51:19 -0000 1.3
+++ creation_tags.hpp 23 Jun 2007 12:52:18 -0000 1.4
@@ -26,6 +26,9 @@
static const detail::open_or_create_t open_or_create =
detail::open_or_create_t();
static const detail::open_only_t open_only = detail::open_only_t();
+enum create_enum_t
+{ DoCreate, DoOpen, DoCreateOrOpen };
+
}} //namespace boost { namespace interprocess {
#include <boost/interprocess/detail/config_end.hpp>
Index: file_wrapper.hpp
===================================================================
RCS file: /cvsroot/boost/boost/boost/interprocess/detail/file_wrapper.hpp,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -d -r1.4 -r1.5
--- file_wrapper.hpp 12 Jun 2007 17:07:07 -0000 1.4
+++ file_wrapper.hpp 23 Jun 2007 12:52:18 -0000 1.5
@@ -14,6 +14,7 @@
#include <boost/interprocess/detail/config_begin.hpp>
#include <boost/interprocess/detail/workaround.hpp>
#include <boost/interprocess/detail/os_file_functions.hpp>
+#include <boost/interprocess/detail/creation_tags.hpp>
#include <boost/interprocess/detail/move.hpp>
#include <boost/interprocess/detail/creation_tags.hpp>
Index: in_place_interface.hpp
===================================================================
RCS file:
/cvsroot/boost/boost/boost/interprocess/detail/in_place_interface.hpp,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -d -r1.1 -r1.2
--- in_place_interface.hpp 12 Jun 2007 17:07:07 -0000 1.1
+++ in_place_interface.hpp 23 Jun 2007 12:52:18 -0000 1.2
@@ -17,7 +17,7 @@
#include <boost/interprocess/detail/config_begin.hpp>
#include <boost/interprocess/detail/workaround.hpp>
-#include <boost/type_traits/alignment_of.hpp>
+#include <boost/interprocess/detail/type_traits.hpp>
#include <typeinfo> //typeid
/*!\file
@@ -49,7 +49,7 @@
struct placement_destroy : public in_place_interface
{
placement_destroy()
- : in_place_interface(boost::alignment_of<T>::value, sizeof(T),
typeid(T).name())
+ : in_place_interface(detail::alignment_of<T>::value, sizeof(T),
typeid(T).name())
{}
virtual void destroy(void *mem)
Index: iterators.hpp
===================================================================
RCS file: /cvsroot/boost/boost/boost/interprocess/detail/iterators.hpp,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -d -r1.1 -r1.2
--- iterators.hpp 12 Jun 2007 17:07:08 -0000 1.1
+++ iterators.hpp 23 Jun 2007 12:52:18 -0000 1.2
@@ -22,30 +22,18 @@
#include <boost/interprocess/detail/workaround.hpp>
#include <boost/interprocess/interprocess_fwd.hpp>
-#include <boost/iterator/iterator_facade.hpp>
+
+#include <iterator>
namespace boost {
namespace interprocess {
template <class T, class Difference = std::ptrdiff_t>
class constant_iterator
- : public boost::iterator_facade
- < constant_iterator<T, Difference>
- , T
- , boost::random_access_traversal_tag
- , const T &
- , Difference>
+ : public std::iterator
+ <std::random_access_iterator_tag, T, Difference, const T*, const T &>
{
- typedef boost::iterator_facade
- < constant_iterator<T, Difference>
- , T
- , boost::random_access_traversal_tag
- , const T &
- , Difference> super_t;
-
typedef constant_iterator<T, Difference> this_type;
- //Give access to private core functions
- friend class boost::iterator_core_access;
public:
explicit constant_iterator(const T &ref, Difference range_size)
@@ -55,8 +43,65 @@
constant_iterator()
: m_ptr(0), m_num(0){}
+ constant_iterator& operator++()
+ { increment(); return *this; }
+
+ constant_iterator operator++(int)
+ {
+ constant_iterator result (*this);
+ increment();
+ return result;
+ }
+
+ friend bool operator== (const constant_iterator& i, const
constant_iterator& i2)
+ { return i.equal(i2); }
+
+ friend bool operator!= (const constant_iterator& i, const
constant_iterator& i2)
+ { return !(i == i2); }
+
+ friend bool operator< (const constant_iterator& i, const constant_iterator&
i2)
+ { return i.less(i2); }
+
+ friend bool operator> (const constant_iterator& i, const constant_iterator&
i2)
+ { return i2 < i; }
+
+ friend bool operator<= (const constant_iterator& i, const
constant_iterator& i2)
+ { return !(i > i2); }
+
+ friend bool operator>= (const constant_iterator& i, const
constant_iterator& i2)
+ { return !(i < i2); }
+
+ friend Difference operator- (const constant_iterator& i, const
constant_iterator& i2)
+ { return i2.distance_to(i); }
+
+ //Arithmetic
+ constant_iterator& operator+=(Difference off)
+ { this->advance(off); return *this; }
+
+ constant_iterator operator+(Difference off) const
+ {
+ constant_iterator other(*this);
+ other.advance(off);
+ return other;
+ }
+
+ friend constant_iterator operator+(Difference off, const constant_iterator&
right)
+ { return right + off; }
+
+ constant_iterator& operator-=(Difference off)
+ { this->advance(-off); return *this; }
+
+ constant_iterator operator-(Difference off) const
+ { return *this + (-off); }
+
+ const T& operator*() const
+ { return dereference(); }
+
+ const T* operator->() const
+ { return &(dereference()); }
+
private:
- const T * m_ptr;
+ const T * m_ptr;
Difference m_num;
void increment()
@@ -68,6 +113,9 @@
bool equal(const this_type &other) const
{ return m_num == other.m_num; }
+ bool less(const this_type &other) const
+ { return other.m_num < m_num; }
+
const T & dereference() const
{ return *m_ptr; }
@@ -80,24 +128,10 @@
template <class T, class Difference = std::ptrdiff_t>
class repeat_iterator
- : public boost::iterator_facade
- < repeat_iterator<T, Difference>
- , T
- , boost::random_access_traversal_tag
- , T &
- , Difference>
+ : public std::iterator
+ <std::random_access_iterator_tag, T, Difference>
{
- typedef boost::iterator_facade
- < repeat_iterator<T, Difference>
- , T
- , boost::random_access_traversal_tag
- , T &
- , Difference> super_t;
-
- typedef repeat_iterator<T, Difference> this_type;
- //Give access to private core functions
- friend class boost::iterator_core_access;
-
+ typedef repeat_iterator this_type;
public:
explicit repeat_iterator(T &ref, Difference range_size)
: m_ptr(&ref), m_num(range_size){}
@@ -106,6 +140,63 @@
repeat_iterator()
: m_ptr(0), m_num(0){}
+ repeat_iterator& operator++()
+ { increment(); return *this; }
+
+ repeat_iterator operator++(int)
+ {
+ repeat_iterator result (*this);
+ increment();
+ return result;
+ }
+
+ friend bool operator== (const repeat_iterator& i, const repeat_iterator& i2)
+ { return i.equal(i2); }
+
+ friend bool operator!= (const repeat_iterator& i, const repeat_iterator& i2)
+ { return !(i == i2); }
+
+ friend bool operator< (const repeat_iterator& i, const repeat_iterator& i2)
+ { return i.less(i2); }
+
+ friend bool operator> (const repeat_iterator& i, const repeat_iterator& i2)
+ { return i2 < i; }
+
+ friend bool operator<= (const repeat_iterator& i, const repeat_iterator& i2)
+ { return !(i > i2); }
+
+ friend bool operator>= (const repeat_iterator& i, const repeat_iterator& i2)
+ { return !(i < i2); }
+
+ friend Difference operator- (const repeat_iterator& i, const
repeat_iterator& i2)
+ { return i2.distance_to(i); }
+
+ //Arithmetic
+ repeat_iterator& operator+=(Difference off)
+ { this->advance(off); return *this; }
+
+ repeat_iterator operator+(Difference off) const
+ {
+ repeat_iterator other(*this);
+ other.advance(off);
+ return other;
+ }
+
+ friend repeat_iterator operator+(Difference off, const repeat_iterator&
right)
+ { return right + off; }
+
+ repeat_iterator& operator-=(Difference off)
+ { this->advance(-off); return *this; }
+
+ repeat_iterator operator-(Difference off) const
+ { return *this + (-off); }
+
+ T& operator*() const
+ { return dereference(); }
+
+ T *operator->() const
+ { return &(dereference()); }
+
private:
T * m_ptr;
Difference m_num;
@@ -119,6 +210,9 @@
bool equal(const this_type &other) const
{ return m_num == other.m_num; }
+ bool less(const this_type &other) const
+ { return other.m_num < m_num; }
+
T & dereference() const
{ return *m_ptr; }
@@ -129,6 +223,125 @@
{ return m_num - other.m_num; }
};
+template <class PseudoReference>
+struct operator_arrow_proxy
+{
+ operator_arrow_proxy(const PseudoReference &px)
+ : m_value(px)
+ {}
+
+ PseudoReference* operator->() const { return &m_value; }
+ // This function is needed for MWCW and BCC, which won't call operator->
+ // again automatically per 13.3.1.2 para 8
+// operator T*() const { return &m_value; }
+ mutable PseudoReference m_value;
+};
+
+
+template <class Iterator, class UnaryFunction>
+class transform_iterator
+ : public UnaryFunction
+ , public std::iterator
+ < typename Iterator::iterator_category
+ , typename Iterator::value_type
+ , typename Iterator::difference_type
+ , typename Iterator::pointer
+ , typename UnaryFunction::result_type>
+{
+ public:
+ explicit transform_iterator(const Iterator &it, const UnaryFunction &f)
+ : UnaryFunction(f), m_it(it)
+ {}
+
+ //Constructors
+ transform_iterator& operator++()
+ { increment(); return *this; }
+
+ transform_iterator operator++(int)
+ {
+ transform_iterator result (*this);
+ increment();
+ return result;
+ }
+
+ friend bool operator== (const transform_iterator& i, const
transform_iterator& i2)
+ { return i.equal(i2); }
+
+ friend bool operator!= (const transform_iterator& i, const
transform_iterator& i2)
+ { return !(i == i2); }
+
+/*
+ friend bool operator> (const transform_iterator& i, const
transform_iterator& i2)
+ { return i2 < i; }
+
+ friend bool operator<= (const transform_iterator& i, const
transform_iterator& i2)
+ { return !(i > i2); }
+
+ friend bool operator>= (const transform_iterator& i, const
transform_iterator& i2)
+ { return !(i < i2); }
+*/
+ friend typename Iterator::difference_type operator- (const
transform_iterator& i, const transform_iterator& i2)
+ { return i2.distance_to(i); }
+
+ //Arithmetic
+ transform_iterator& operator+=(typename Iterator::difference_type off)
+ { this->advance(off); return *this; }
+
+ transform_iterator operator+(typename Iterator::difference_type off) const
+ {
+ transform_iterator other(*this);
+ other.advance(off);
+ return other;
+ }
+
+ friend transform_iterator operator+(typename Iterator::difference_type off,
const transform_iterator& right)
+ { return right + off; }
+
+ transform_iterator& operator-=(typename Iterator::difference_type off)
+ { this->advance(-off); return *this; }
+
+ transform_iterator operator-(typename Iterator::difference_type off) const
+ { return *this + (-off); }
+
+ typename UnaryFunction::result_type operator*() const
+ { return dereference(); }
+
+ operator_arrow_proxy<typename UnaryFunction::result_type>
+ operator->() const
+ { return operator_arrow_proxy<typename
UnaryFunction::result_type>(dereference()); }
+
+ private:
+ Iterator m_it;
+
+ void increment()
+ { ++m_it; }
+
+ void decrement()
+ { --m_it; }
+
+ bool equal(const transform_iterator &other) const
+ { return m_it == other.m_it; }
+
+ bool less(const transform_iterator &other) const
+ { return other.m_it < m_it; }
+
+ typename UnaryFunction::result_type dereference() const
+ { return UnaryFunction::operator()(*m_it); }
+
+ void advance(typename Iterator::difference_type n)
+ { std::advance(m_it, n); }
+
+ typename Iterator::difference_type distance_to(const transform_iterator
&other)const
+ { return std::distance(other.m_it, m_it); }
+};
+
+template <class Iterator, class UnaryFunc>
+transform_iterator<Iterator, UnaryFunc>
+make_transform_iterator(Iterator it, UnaryFunc fun)
+{
+ return transform_iterator<Iterator, UnaryFunc>(it, fun);
+}
+
} //namespace interprocess {
} //namespace boost {
Index: managed_memory_impl.hpp
===================================================================
RCS file:
/cvsroot/boost/boost/boost/interprocess/detail/managed_memory_impl.hpp,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -d -r1.6 -r1.7
--- managed_memory_impl.hpp 12 Jun 2007 17:07:08 -0000 1.6
+++ managed_memory_impl.hpp 23 Jun 2007 12:52:18 -0000 1.7
@@ -23,13 +23,13 @@
#include <boost/interprocess/mem_algo/rbtree_best_fit.hpp>
#include <boost/interprocess/sync/mutex_family.hpp>
#include <boost/interprocess/detail/utilities.hpp>
+#include <boost/interprocess/detail/creation_tags.hpp>
#include <boost/interprocess/sync/interprocess_mutex.hpp>
#include <boost/interprocess/exceptions.hpp>
#include <boost/interprocess/offset_ptr.hpp>
#include <boost/interprocess/segment_manager.hpp>
#include <boost/interprocess/sync/scoped_lock.hpp>
//
-#include <boost/ref.hpp>
#include <boost/detail/no_exceptions_support.hpp>
//
#include <utility>
@@ -624,7 +624,6 @@
class create_open_func
{
public:
-
create_open_func(BasicManagedMemoryImpl * const frontend, create_enum_t
type)
: m_frontend(frontend), m_type(type){}
Index: managed_open_or_create_impl.hpp
===================================================================
RCS file:
/cvsroot/boost/boost/boost/interprocess/detail/managed_open_or_create_impl.hpp,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -d -r1.7 -r1.8
--- managed_open_or_create_impl.hpp 12 Jun 2007 17:07:08 -0000 1.7
+++ managed_open_or_create_impl.hpp 23 Jun 2007 12:52:18 -0000 1.8
@@ -13,10 +13,10 @@
#include <boost/interprocess/detail/os_thread_functions.hpp>
#include <boost/interprocess/detail/os_file_functions.hpp>
+#include <boost/interprocess/detail/creation_tags.hpp>
#include <boost/interprocess/mapped_region.hpp>
#include <boost/interprocess/detail/utilities.hpp>
-#include <boost/type_traits/alignment_of.hpp>
-#include <boost/type_traits/type_with_alignment.hpp>
+#include <boost/interprocess/detail/type_traits.hpp>
#include <boost/interprocess/detail/atomic.hpp>
#include <boost/interprocess/detail/creation_tags.hpp>
#include <boost/interprocess/detail/mpl.hpp>
@@ -49,7 +49,7 @@
ManagedOpenOrCreateUserOffset =
detail::ct_rounded_size
< sizeof(boost::uint32_t)
- , boost::alignment_of<boost::detail::max_align>::value>::value
+ , detail::alignment_of<detail::max_align>::value>::value
};
managed_open_or_create_impl(detail::create_only_t,
@@ -200,11 +200,11 @@
//These are templatized to allow explicit instantiations
template<bool dummy>
- static void write_whole_device(DeviceAbstraction &, std::size_t, false_)
+ static void write_whole_device(DeviceAbstraction &, std::size_t,
detail::false_)
{} //Empty
template<bool dummy>
- static void write_whole_device(DeviceAbstraction &dev, std::size_t size,
true_)
+ static void write_whole_device(DeviceAbstraction &dev, std::size_t size,
detail::true_)
{
file_handle_t hnd =
detail::file_handle_from_mapping_handle(dev.get_mapping_handle());
@@ -234,23 +234,23 @@
//These are templatized to allow explicit instantiations
template<bool dummy>
- static void truncate_device(DeviceAbstraction &, std::size_t, false_)
+ static void truncate_device(DeviceAbstraction &, std::size_t,
detail::false_)
{} //Empty
template<bool dummy>
- static void truncate_device(DeviceAbstraction &dev, std::size_t size, true_)
+ static void truncate_device(DeviceAbstraction &dev, std::size_t size,
detail::true_)
{ dev.truncate(size); }
//These are templatized to allow explicit instantiations
template<bool dummy>
- static void create_device(DeviceAbstraction &dev, const char *name,
std::size_t size, false_)
+ static void create_device(DeviceAbstraction &dev, const char *name,
std::size_t size, detail::false_)
{
DeviceAbstraction tmp(create_only, name, read_write, size);
tmp.swap(dev);
}
template<bool dummy>
- static void create_device(DeviceAbstraction &dev, const char *name,
std::size_t, true_)
+ static void create_device(DeviceAbstraction &dev, const char *name,
std::size_t, detail::true_)
{
DeviceAbstraction tmp(create_only, name, read_write);
tmp.swap(dev);
@@ -262,7 +262,7 @@
mode_t mode, const void *addr,
ConstructFunc construct_func)
{
- typedef bool_<FileBased> file_like_t;
+ typedef detail::bool_<FileBased> file_like_t;
(void)mode;
error_info err;
bool created = false;
-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
_______________________________________________
Boost-cvs mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/boost-cvs