]> git.lyx.org Git - features.git/blobdiff - boost/boost/smart_ptr/shared_array.hpp
boost: add eol property
[features.git] / boost / boost / smart_ptr / shared_array.hpp
index 86418897652c42a35bfca922481e46a8dd797050..1f50403a3825b3fe5a60b89b7cdd0e85f4669b93 100644 (file)
-#ifndef BOOST_SMART_PTR_SHARED_ARRAY_HPP_INCLUDED\r
-#define BOOST_SMART_PTR_SHARED_ARRAY_HPP_INCLUDED\r
-\r
-//\r
-//  shared_array.hpp\r
-//\r
-//  (C) Copyright Greg Colvin and Beman Dawes 1998, 1999.\r
-//  Copyright (c) 2001, 2002 Peter Dimov\r
-//\r
-//  Distributed under the Boost Software License, Version 1.0. (See\r
-//  accompanying file LICENSE_1_0.txt or copy at\r
-//  http://www.boost.org/LICENSE_1_0.txt)\r
-//\r
-//  See http://www.boost.org/libs/smart_ptr/shared_array.htm for documentation.\r
-//\r
-\r
-#include <boost/config.hpp>   // for broken compiler workarounds\r
-\r
-#if defined(BOOST_NO_MEMBER_TEMPLATES) && !defined(BOOST_MSVC6_MEMBER_TEMPLATES)\r
-#include <boost/smart_ptr/detail/shared_array_nmt.hpp>\r
-#else\r
-\r
-#include <memory>             // TR1 cyclic inclusion fix\r
-\r
-#include <boost/assert.hpp>\r
-#include <boost/checked_delete.hpp>\r
-\r
-#include <boost/smart_ptr/detail/shared_count.hpp>\r
-#include <boost/detail/workaround.hpp>\r
-\r
-#include <cstddef>            // for std::ptrdiff_t\r
-#include <algorithm>          // for std::swap\r
-#include <functional>         // for std::less\r
-\r
-namespace boost\r
-{\r
-\r
-//\r
-//  shared_array\r
-//\r
-//  shared_array extends shared_ptr to arrays.\r
-//  The array pointed to is deleted when the last shared_array pointing to it\r
-//  is destroyed or reset.\r
-//\r
-\r
-template<class T> class shared_array\r
-{\r
-private:\r
-\r
-    // Borland 5.5.1 specific workarounds\r
-    typedef checked_array_deleter<T> deleter;\r
-    typedef shared_array<T> this_type;\r
-\r
-public:\r
-\r
-    typedef T element_type;\r
-\r
-    explicit shared_array(T * p = 0): px(p), pn(p, deleter())\r
-    {\r
-    }\r
-\r
-    //\r
-    // Requirements: D's copy constructor must not throw\r
-    //\r
-    // shared_array will release p by calling d(p)\r
-    //\r
-\r
-    template<class D> shared_array(T * p, D d): px(p), pn(p, d)\r
-    {\r
-    }\r
-\r
-//  generated copy constructor, assignment, destructor are fine\r
-\r
-    void reset(T * p = 0)\r
-    {\r
-        BOOST_ASSERT(p == 0 || p != px);\r
-        this_type(p).swap(*this);\r
-    }\r
-\r
-    template <class D> void reset(T * p, D d)\r
-    {\r
-        this_type(p, d).swap(*this);\r
-    }\r
-\r
-    T & operator[] (std::ptrdiff_t i) const // never throws\r
-    {\r
-        BOOST_ASSERT(px != 0);\r
-        BOOST_ASSERT(i >= 0);\r
-        return px[i];\r
-    }\r
-    \r
-    T * get() const // never throws\r
-    {\r
-        return px;\r
-    }\r
-\r
-// implicit conversion to "bool"\r
-#include <boost/smart_ptr/detail/operator_bool.hpp>\r
-\r
-    bool unique() const // never throws\r
-    {\r
-        return pn.unique();\r
-    }\r
-\r
-    long use_count() const // never throws\r
-    {\r
-        return pn.use_count();\r
-    }\r
-\r
-    void swap(shared_array<T> & other) // never throws\r
-    {\r
-        std::swap(px, other.px);\r
-        pn.swap(other.pn);\r
-    }\r
-\r
-private:\r
-\r
-    T * px;                     // contained pointer\r
-    detail::shared_count pn;    // reference counter\r
-\r
-};  // shared_array\r
-\r
-template<class T> inline bool operator==(shared_array<T> const & a, shared_array<T> const & b) // never throws\r
-{\r
-    return a.get() == b.get();\r
-}\r
-\r
-template<class T> inline bool operator!=(shared_array<T> const & a, shared_array<T> const & b) // never throws\r
-{\r
-    return a.get() != b.get();\r
-}\r
-\r
-template<class T> inline bool operator<(shared_array<T> const & a, shared_array<T> const & b) // never throws\r
-{\r
-    return std::less<T*>()(a.get(), b.get());\r
-}\r
-\r
-template<class T> void swap(shared_array<T> & a, shared_array<T> & b) // never throws\r
-{\r
-    a.swap(b);\r
-}\r
-\r
-} // namespace boost\r
-\r
-#endif  // #if defined(BOOST_NO_MEMBER_TEMPLATES) && !defined(BOOST_MSVC6_MEMBER_TEMPLATES)\r
-\r
-#endif  // #ifndef BOOST_SMART_PTR_SHARED_ARRAY_HPP_INCLUDED\r
+#ifndef BOOST_SMART_PTR_SHARED_ARRAY_HPP_INCLUDED
+#define BOOST_SMART_PTR_SHARED_ARRAY_HPP_INCLUDED
+
+//
+//  shared_array.hpp
+//
+//  (C) Copyright Greg Colvin and Beman Dawes 1998, 1999.
+//  Copyright (c) 2001, 2002 Peter Dimov
+//
+//  Distributed under the Boost Software License, Version 1.0. (See
+//  accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+//  See http://www.boost.org/libs/smart_ptr/shared_array.htm for documentation.
+//
+
+#include <boost/config.hpp>   // for broken compiler workarounds
+
+#if defined(BOOST_NO_MEMBER_TEMPLATES) && !defined(BOOST_MSVC6_MEMBER_TEMPLATES)
+#include <boost/smart_ptr/detail/shared_array_nmt.hpp>
+#else
+
+#include <memory>             // TR1 cyclic inclusion fix
+
+#include <boost/assert.hpp>
+#include <boost/checked_delete.hpp>
+
+#include <boost/smart_ptr/detail/shared_count.hpp>
+#include <boost/detail/workaround.hpp>
+
+#include <cstddef>            // for std::ptrdiff_t
+#include <algorithm>          // for std::swap
+#include <functional>         // for std::less
+
+namespace boost
+{
+
+//
+//  shared_array
+//
+//  shared_array extends shared_ptr to arrays.
+//  The array pointed to is deleted when the last shared_array pointing to it
+//  is destroyed or reset.
+//
+
+template<class T> class shared_array
+{
+private:
+
+    // Borland 5.5.1 specific workarounds
+    typedef checked_array_deleter<T> deleter;
+    typedef shared_array<T> this_type;
+
+public:
+
+    typedef T element_type;
+
+    explicit shared_array(T * p = 0): px(p), pn(p, deleter())
+    {
+    }
+
+    //
+    // Requirements: D's copy constructor must not throw
+    //
+    // shared_array will release p by calling d(p)
+    //
+
+    template<class D> shared_array(T * p, D d): px(p), pn(p, d)
+    {
+    }
+
+//  generated copy constructor, assignment, destructor are fine
+
+    void reset(T * p = 0)
+    {
+        BOOST_ASSERT(p == 0 || p != px);
+        this_type(p).swap(*this);
+    }
+
+    template <class D> void reset(T * p, D d)
+    {
+        this_type(p, d).swap(*this);
+    }
+
+    T & operator[] (std::ptrdiff_t i) const // never throws
+    {
+        BOOST_ASSERT(px != 0);
+        BOOST_ASSERT(i >= 0);
+        return px[i];
+    }
+    
+    T * get() const // never throws
+    {
+        return px;
+    }
+
+// implicit conversion to "bool"
+#include <boost/smart_ptr/detail/operator_bool.hpp>
+
+    bool unique() const // never throws
+    {
+        return pn.unique();
+    }
+
+    long use_count() const // never throws
+    {
+        return pn.use_count();
+    }
+
+    void swap(shared_array<T> & other) // never throws
+    {
+        std::swap(px, other.px);
+        pn.swap(other.pn);
+    }
+
+private:
+
+    T * px;                     // contained pointer
+    detail::shared_count pn;    // reference counter
+
+};  // shared_array
+
+template<class T> inline bool operator==(shared_array<T> const & a, shared_array<T> const & b) // never throws
+{
+    return a.get() == b.get();
+}
+
+template<class T> inline bool operator!=(shared_array<T> const & a, shared_array<T> const & b) // never throws
+{
+    return a.get() != b.get();
+}
+
+template<class T> inline bool operator<(shared_array<T> const & a, shared_array<T> const & b) // never throws
+{
+    return std::less<T*>()(a.get(), b.get());
+}
+
+template<class T> void swap(shared_array<T> & a, shared_array<T> & b) // never throws
+{
+    a.swap(b);
+}
+
+} // namespace boost
+
+#endif  // #if defined(BOOST_NO_MEMBER_TEMPLATES) && !defined(BOOST_MSVC6_MEMBER_TEMPLATES)
+
+#endif  // #ifndef BOOST_SMART_PTR_SHARED_ARRAY_HPP_INCLUDED