summaryrefslogtreecommitdiff
path: root/subversion/bindings/cxxhl/include/svncxxhl/_compat.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'subversion/bindings/cxxhl/include/svncxxhl/_compat.hpp')
-rw-r--r--subversion/bindings/cxxhl/include/svncxxhl/_compat.hpp85
1 files changed, 69 insertions, 16 deletions
diff --git a/subversion/bindings/cxxhl/include/svncxxhl/_compat.hpp b/subversion/bindings/cxxhl/include/svncxxhl/_compat.hpp
index 264e533..28c99f1 100644
--- a/subversion/bindings/cxxhl/include/svncxxhl/_compat.hpp
+++ b/subversion/bindings/cxxhl/include/svncxxhl/_compat.hpp
@@ -28,64 +28,117 @@
#ifndef SVN_CXXHL_COMPAT_HPP
#define SVN_CXXHL_COMPAT_HPP
-// Configuration test: std::shared_ptr<>
+// Configuration test: std::shared_ptr<> and friends
// Currently detects: clang++, g++, msvc-2010+
-#ifndef SVN_CXXHL_HAVE_STD_SHARED_PTR
+#ifndef SVN_CXXHL_HAVE_STD_SMART_PTRS
# if (defined(__clang__) && __cplusplus >= 201103L) \
|| (defined(__GNUC__) && defined(__GXX_EXPERIMENTAL_CXX0X__)) \
|| (defined(_MSC_VER) && _MSC_VER >= 1600)
-# define SVN_CXXHL_HAVE_STD_SHARED_PTR
+# define SVN_CXXHL_HAVE_STD_SMART_PTRS
# endif // config test: std::shared_ptr<>
-#endif // SVN_CXXHL_HAVE_STD_SHARED_PTR
+#endif // SVN_CXXHL_HAVE_STD_SMART_PTRS
-// Configuration test: std::tr1::shared_ptr<>
+// Configuration test: std::tr1::shared_ptr<> and friends
// Currently detects: clang++, g++
-#ifndef SVN_CXXHL_HAVE_STD_SHARED_PTR
-# ifndef SVN_CXXHL_HAVE_STD_TR1_SHARED_PTR
+#ifndef SVN_CXXHL_HAVE_STD_SMART_PTRS
+# ifndef SVN_CXXHL_HAVE_STD_TR1_SMART_PTRS
# if defined(__GNUC__) \
&& (__GNUC__ > 4 || __GNUC__ == 4 && __GNUC_MINOR__ >= 1)
-# define SVN_CXXHL_HAVE_STD_TR1_SHARED_PTR
+# define SVN_CXXHL_HAVE_STD_TR1_SMART_PTRS
# endif // config test: std::tr1::shared_ptr<>
-# endif // SVN_CXXHL_HAVE_STD_TR1_SHARED_PTR
-#endif // SVN_CXXHL_HAVE_STD_SHARED_PTR
+# endif // SVN_CXXHL_HAVE_STD_TR1_SMART_PTRS
+#endif // SVN_CXXHL_HAVE_STD_SMART_PTRS
-#if defined(SVN_CXXHL_HAVE_STD_SHARED_PTR)
+#if defined(SVN_CXXHL_HAVE_STD_SMART_PTRS)
#include <memory>
+namespace apache {
namespace subversion {
namespace cxxhl {
namespace compat {
+using std::weak_ptr;
using std::shared_ptr;
+using std::enable_shared_from_this;
} // namespace compat
} // namespace cxxhl
} // namespace subversion
+} // namespace apache
-#elif defined(SVN_CXXHL_HAVE_STD_TR1_SHARED_PTR)
+#elif defined(SVN_CXXHL_HAVE_STD_TR1_SMART_PTRS)
#include <tr1/memory>
+namespace apache {
namespace subversion {
namespace cxxhl {
namespace compat {
+using std::tr1::weak_ptr;
using std::tr1::shared_ptr;
+using std::tr1::enable_shared_from_this;
} // namespace compat
} // namespace cxxhl
} // namespace subversion
+} // namespace apache
#else
-// We need shared_ptr<> from somewhere. If we cannot find it in ::std
-// given known compiler characteristics, then try boost as a last
-// resort.
+// We need smart pointers from somewhere. If we cannot find them in
+// ::std given known compiler characteristics, then try Boost as a
+// last resort.
+#define SVN_CXXHL_USING_BOOST
#include <boost/shared_ptr.hpp>
+namespace apache {
namespace subversion {
namespace cxxhl {
namespace compat {
+using boost::weak_ptr;
using boost::shared_ptr;
+using boost::enable_shared_from_this;
} // namespace compat
} // namespace cxxhl
} // namespace subversion
+} // namespace apache
-#endif // SVN_CXXHL_HAVE_STD_SHARED_PTR
+#endif // SVN_CXXHL_HAVE_STD_SMART_PTRS
+
+// Configuration test: noncopyable mixin.
+#ifdef SVN_CXXHL_USING_BOOST
+
+#include <boost/noncopyable.hpp>
+namespace apache {
+namespace subversion {
+namespace cxxhl {
+namespace compat {
+using boost::noncopyable;
+} // namespace compat
+} // namespace cxxhl
+} // namespace subversion
+} // namespace apache
+
+#else // !SVN_CXXHL_USING_BOOST
+
+namespace apache {
+namespace subversion {
+namespace cxxhl {
+namespace compat {
+namespace noncopyable_
+{
+class noncopyable
+{
+protected:
+ noncopyable() {}
+ ~noncopyable() {}
+private:
+ noncopyable(const noncopyable&);
+ noncopyable& operator=(const noncopyable&);
+};
+} // namespace noncopyable_
+typedef noncopyable_::noncopyable noncopyable;
+} // namespace compat
+} // namespace cxxhl
+} // namespace subversion
+} // namespace apache
+
+#endif // SVN_CXXHL_USING_BOOST
#endif // SVN_CXXHL_COMPAT_HPP