From 03f77589ce707ad921a184fc6e0752de1c6278fd Mon Sep 17 00:00:00 2001
From: John Maddock
Date: Tue, 2 Jan 2001 12:40:29 +0000
Subject: [PATCH] This commit was generated by cvs2svn to compensate for
changes in r889, which included commits to RCS files with non-trunk default
branches.
[SVN r8506]
---
development/alignment_test.cpp | 43 +
development/arithmetic_traits_test.cpp | 197 ++++
development/composite_traits_test.cpp | 111 +++
development/copy_example.cpp | 240 +++++
development/cs-win32.html | 118 +++
development/cv_traits_test.cpp | 50 +
development/fill_example.cpp | 191 ++++
development/include/boost/call_traits.hpp | 23 +
development/include/boost/config.hpp | 427 +++++++++
.../include/boost/detail/call_traits.hpp | 138 +++
.../include/boost/detail/ob_call_traits.hpp | 125 +++
development/include/boost/smart_ptr.hpp | 379 ++++++++
development/include/boost/timer.hpp | 57 ++
development/include/boost/type_traits.hpp | 42 +
.../boost/type_traits/alignment_traits.hpp | 66 ++
.../boost/type_traits/arithmetic_traits.hpp | 262 ++++++
.../boost/type_traits/composite_traits.hpp | 357 +++++++
.../boost/type_traits/conversion_traits.hpp | 220 +++++
.../include/boost/type_traits/cv_traits.hpp | 214 +++++
development/include/boost/type_traits/fwd.hpp | 138 +++
development/include/boost/type_traits/ice.hpp | 75 ++
.../boost/type_traits/object_traits.hpp | 313 +++++++
.../include/boost/type_traits/same_traits.hpp | 89 ++
.../boost/type_traits/transform_traits.hpp | 152 +++
.../boost/type_traits/type_traits_test.hpp | 324 +++++++
development/include/boost/utility.hpp | 96 ++
development/is_convertible_test.cpp | 72 ++
development/is_same_test.cpp | 34 +
development/iter_swap_example.cpp | 110 +++
development/object_type_traits_test.cpp | 184 ++++
development/regress.cfg | 14 +
development/regression.out.txt | 879 ++++++++++++++++++
development/transform_traits_test.cpp | 78 ++
development/trivial_destructor_example.cpp | 165 ++++
34 files changed, 5983 insertions(+)
create mode 100644 development/alignment_test.cpp
create mode 100644 development/arithmetic_traits_test.cpp
create mode 100644 development/composite_traits_test.cpp
create mode 100644 development/copy_example.cpp
create mode 100644 development/cs-win32.html
create mode 100644 development/cv_traits_test.cpp
create mode 100644 development/fill_example.cpp
create mode 100644 development/include/boost/call_traits.hpp
create mode 100644 development/include/boost/config.hpp
create mode 100644 development/include/boost/detail/call_traits.hpp
create mode 100644 development/include/boost/detail/ob_call_traits.hpp
create mode 100644 development/include/boost/smart_ptr.hpp
create mode 100644 development/include/boost/timer.hpp
create mode 100644 development/include/boost/type_traits.hpp
create mode 100644 development/include/boost/type_traits/alignment_traits.hpp
create mode 100644 development/include/boost/type_traits/arithmetic_traits.hpp
create mode 100644 development/include/boost/type_traits/composite_traits.hpp
create mode 100644 development/include/boost/type_traits/conversion_traits.hpp
create mode 100644 development/include/boost/type_traits/cv_traits.hpp
create mode 100644 development/include/boost/type_traits/fwd.hpp
create mode 100644 development/include/boost/type_traits/ice.hpp
create mode 100644 development/include/boost/type_traits/object_traits.hpp
create mode 100644 development/include/boost/type_traits/same_traits.hpp
create mode 100644 development/include/boost/type_traits/transform_traits.hpp
create mode 100644 development/include/boost/type_traits/type_traits_test.hpp
create mode 100644 development/include/boost/utility.hpp
create mode 100644 development/is_convertible_test.cpp
create mode 100644 development/is_same_test.cpp
create mode 100644 development/iter_swap_example.cpp
create mode 100644 development/object_type_traits_test.cpp
create mode 100644 development/regress.cfg
create mode 100644 development/regression.out.txt
create mode 100644 development/transform_traits_test.cpp
create mode 100644 development/trivial_destructor_example.cpp
diff --git a/development/alignment_test.cpp b/development/alignment_test.cpp
new file mode 100644
index 0000000..44f50ce
--- /dev/null
+++ b/development/alignment_test.cpp
@@ -0,0 +1,43 @@
+
+// (C) Copyright John Maddock 2000. Permission to copy, use, modify, sell and
+// distribute this software is granted provided this copyright notice appears
+// in all copies. This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+
+#include
+#include
+
+#ifdef __BORLANDC__
+#pragma hrdstop
+#endif
+#include "boost/type_traits/type_traits_test.hpp"
+
+NESTED_DECL(alignment_of)
+
+int main(int argc, char* argv[])
+{
+ NESTED_TEST(alignment_of, int)
+ NESTED_TEST(alignment_of, int_constructible)
+
+ align_test(int);
+ align_test(char);
+ align_test(double);
+ align_test(int[4]);
+ align_test(int(*)(int));
+#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+ align_test(char&);
+ align_test(char (&)(int));
+ align_test(char(&)[4]);
+#endif
+ align_test(int*);
+ //align_test(const int);
+ align_test(VB);
+ align_test(VD);
+
+ return check_result(argc, argv);
+}
+
+//
+// define the number of failures expected for given compilers:
+unsigned int expected_failures = 0;
+
diff --git a/development/arithmetic_traits_test.cpp b/development/arithmetic_traits_test.cpp
new file mode 100644
index 0000000..87d2d31
--- /dev/null
+++ b/development/arithmetic_traits_test.cpp
@@ -0,0 +1,197 @@
+
+// (C) Copyright John Maddock 2000. Permission to copy, use, modify, sell and
+// distribute this software is granted provided this copyright notice appears
+// in all copies. This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+
+#include
+#include
+
+#ifdef __BORLANDC__
+#pragma hrdstop
+#endif
+#include "boost/type_traits/type_traits_test.hpp"
+
+NESTED_DECL(is_void)
+NESTED_DECL(is_integral)
+NESTED_DECL(is_float)
+NESTED_DECL(is_arithmetic)
+NESTED_DECL(is_fundamental)
+
+int main(int argc, char* argv[])
+{
+ NESTED_TEST(is_void, void)
+ NESTED_TEST(is_void, int)
+ NESTED_TEST(is_integral, int)
+ NESTED_TEST(is_integral, float)
+ NESTED_TEST(is_float, void)
+ NESTED_TEST(is_float, double)
+ NESTED_TEST(is_arithmetic, void)
+ NESTED_TEST(is_arithmetic, int)
+ NESTED_TEST(is_fundamental, UDT)
+ NESTED_TEST(is_fundamental, int)
+
+ value_test(true, boost::is_void::value)
+ value_test(true, boost::is_void::value)
+ value_test(true, boost::is_void::value)
+ value_test(true, boost::is_void::value)
+ value_test(false, boost::is_void::value)
+
+ value_test(false, boost::is_integral::value)
+ value_test(false, boost::is_integral::value)
+ value_test(true, boost::is_integral::value)
+ value_test(true, boost::is_integral::value)
+ value_test(true, boost::is_integral::value)
+ value_test(true, boost::is_integral::value)
+ value_test(true, boost::is_integral::value)
+ value_test(true, boost::is_integral::value)
+ value_test(true, boost::is_integral::value)
+ value_test(true, boost::is_integral::value)
+ value_test(true, boost::is_integral::value)
+ value_test(true, boost::is_integral::value)
+ value_test(true, boost::is_integral::value)
+ value_test(false, boost::is_integral::value)
+ value_test(false, boost::is_integral::value)
+ value_test(false, boost::is_integral::value)
+ #ifdef ULLONG_MAX
+ value_test(true, boost::is_integral::value)
+ value_test(true, boost::is_integral::value)
+ #endif
+ #if defined(__BORLANDC__) || defined(_MSC_VER)
+ value_test(true, boost::is_integral<__int64>::value)
+ value_test(true, boost::is_integral::value)
+ #endif
+ //const qualified ints:
+ value_test(true, boost::is_integral::value)
+ value_test(true, boost::is_integral::value)
+ value_test(true, boost::is_integral::value)
+ value_test(true, boost::is_integral::value)
+ value_test(true, boost::is_integral::value)
+ value_test(true, boost::is_integral::value)
+ value_test(true, boost::is_integral::value)
+ value_test(true, boost::is_integral::value)
+ value_test(true, boost::is_integral::value)
+ value_test(true, boost::is_integral::value)
+ value_test(true, boost::is_integral::value)
+ #ifdef ULLONG_MAX
+ value_test(true, boost::is_integral::value)
+ value_test(true, boost::is_integral::value)
+ #endif
+ #if defined(__BORLANDC__) || defined(_MSC_VER)
+ value_test(true, boost::is_integral::value)
+ value_test(true, boost::is_integral::value)
+ #endif
+ // volatile qualified ints:
+ value_test(true, boost::is_integral::value)
+ value_test(true, boost::is_integral::value)
+ value_test(true, boost::is_integral::value)
+ value_test(true, boost::is_integral::value)
+ value_test(true, boost::is_integral::value)
+ value_test(true, boost::is_integral::value)
+ value_test(true, boost::is_integral::value)
+ value_test(true, boost::is_integral::value)
+ value_test(true, boost::is_integral::value)
+ value_test(true, boost::is_integral::value)
+ value_test(true, boost::is_integral::value)
+ #ifdef ULLONG_MAX
+ value_test(true, boost::is_integral::value)
+ value_test(true, boost::is_integral::value)
+ #endif
+ #if defined(__BORLANDC__) || defined(_MSC_VER)
+ value_test(true, boost::is_integral::value)
+ value_test(true, boost::is_integral::value)
+ #endif
+ //const qualified ints:
+ value_test(true, boost::is_integral::value)
+ value_test(true, boost::is_integral::value)
+ value_test(true, boost::is_integral::value)
+ value_test(true, boost::is_integral::value)
+ value_test(true, boost::is_integral::value)
+ value_test(true, boost::is_integral::value)
+ value_test(true, boost::is_integral::value)
+ value_test(true, boost::is_integral::value)
+ value_test(true, boost::is_integral::value)
+ value_test(true, boost::is_integral::value)
+ value_test(true, boost::is_integral::value)
+ #ifdef ULLONG_MAX
+ value_test(true, boost::is_integral::value)
+ value_test(true, boost::is_integral::value)
+ #endif
+ #if defined(__BORLANDC__) || defined(_MSC_VER)
+ value_test(true, boost::is_integral::value)
+ value_test(true, boost::is_integral::value)
+ #endif
+ value_test(true, boost::is_float::value)
+ value_test(true, boost::is_float::value)
+ value_test(true, boost::is_float::value)
+ value_test(true, boost::is_float::value)
+ value_test(true, boost::is_float::value)
+ value_test(true, boost::is_float::value)
+ value_test(true, boost::is_float::value)
+ value_test(true, boost::is_float::value)
+ value_test(true, boost::is_float::value)
+ value_test(true, boost::is_float::value)
+ value_test(true, boost::is_float::value)
+ value_test(true, boost::is_float::value)
+ value_test(false, boost::is_float::value)
+ value_test(false, boost::is_float::value)
+ value_test(false, boost::is_float::value)
+
+
+ value_test(false, boost::is_arithmetic::value)
+ value_test(false, boost::is_arithmetic::value)
+ value_test(true, boost::is_arithmetic::value)
+ value_test(true, boost::is_arithmetic::value)
+ value_test(true, boost::is_arithmetic::value)
+ value_test(true, boost::is_arithmetic::value)
+ value_test(true, boost::is_arithmetic::value)
+ value_test(true, boost::is_arithmetic::value)
+ value_test(true, boost::is_arithmetic::value)
+ value_test(true, boost::is_arithmetic::value)
+ value_test(true, boost::is_arithmetic::value)
+ value_test(true, boost::is_arithmetic::value)
+ value_test(true, boost::is_arithmetic::value)
+ value_test(true, boost::is_arithmetic::value)
+ value_test(true, boost::is_arithmetic::value)
+ value_test(true, boost::is_arithmetic::value)
+ #ifdef ULLONG_MAX
+ value_test(true, boost::is_arithmetic::value)
+ value_test(true, boost::is_arithmetic::value)
+ #endif
+ #if defined(__BORLANDC__) || defined(_MSC_VER)
+ value_test(true, boost::is_arithmetic<__int64>::value)
+ value_test(true, boost::is_arithmetic::value)
+ #endif
+
+ value_test(false, boost::is_fundamental::value)
+ value_test(true, boost::is_fundamental::value)
+ value_test(true, boost::is_fundamental::value)
+ value_test(true, boost::is_fundamental::value)
+ value_test(true, boost::is_fundamental::value)
+ value_test(true, boost::is_fundamental::value)
+ value_test(true, boost::is_fundamental::value)
+ value_test(true, boost::is_fundamental::value)
+ value_test(true, boost::is_fundamental::value)
+ value_test(true, boost::is_fundamental::value)
+ value_test(true, boost::is_fundamental::value)
+ value_test(true, boost::is_fundamental::value)
+ value_test(true, boost::is_fundamental::value)
+ value_test(true, boost::is_fundamental::value)
+ value_test(true, boost::is_fundamental::value)
+ value_test(true, boost::is_fundamental::value)
+ #ifdef ULLONG_MAX
+ value_test(true, boost::is_fundamental::value)
+ value_test(true, boost::is_fundamental::value)
+ #endif
+ #if defined(__BORLANDC__) || defined(_MSC_VER)
+ value_test(true, boost::is_fundamental<__int64>::value)
+ value_test(true, boost::is_fundamental::value)
+ #endif
+
+ return check_result(argc, argv);
+}
+
+//
+// define the number of failures expected for given compilers:
+unsigned int expected_failures = 0;
+
diff --git a/development/composite_traits_test.cpp b/development/composite_traits_test.cpp
new file mode 100644
index 0000000..7b496a5
--- /dev/null
+++ b/development/composite_traits_test.cpp
@@ -0,0 +1,111 @@
+
+// (C) Copyright John Maddock 2000. Permission to copy, use, modify, sell and
+// distribute this software is granted provided this copyright notice appears
+// in all copies. This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+
+#include
+#include
+
+#ifdef __BORLANDC__
+#pragma hrdstop
+#endif
+#include "boost/type_traits/type_traits_test.hpp"
+
+NESTED_DECL(is_array)
+NESTED_DECL(is_pointer)
+NESTED_DECL(is_reference)
+
+int main(int argc, char* argv[])
+{
+ NESTED_TEST(is_array, int)
+ NESTED_TEST(is_array, int[2])
+ NESTED_TEST(is_array, int[3][4])
+ NESTED_TEST(is_array, int const [5])
+ NESTED_TEST(is_array, int(&)[2])
+ NESTED_TEST(is_array, int (*)(double))
+ NESTED_TEST(is_pointer, int)
+ NESTED_TEST(is_pointer, int*)
+ NESTED_TEST(is_reference, int)
+ NESTED_TEST(is_reference, int&)
+
+ value_test(false, boost::is_array::value)
+ value_test(false, boost::is_array::value)
+ value_test(false, boost::is_array::value)
+ value_test(false, boost::is_array::value)
+ value_test(false, boost::is_array::value)
+ value_test(false, boost::is_array::value)
+ value_test(false, boost::is_array::value)
+ value_test(true, boost::is_array::value)
+ value_test(true, boost::is_array::value)
+ value_test(true, boost::is_array::value)
+ value_test(true, boost::is_array::value)
+ value_test(true, boost::is_array::value)
+ value_test(false, boost::is_array::value)
+ value_test(false, boost::is_array::value)
+
+ value_test(false, boost::is_pointer::value)
+ value_test(false, boost::is_pointer::value)
+ value_test(true, boost::is_pointer::value)
+ value_test(true, boost::is_pointer::value)
+ value_test(true, boost::is_pointer::value)
+ value_test(true, boost::is_pointer::value)
+ // these were false in previous versions (JM 20 Dec 2000):
+ value_test(true, boost::is_pointer::value)
+ value_test(true, boost::is_pointer::value)
+ value_test(true, boost::is_pointer::value)
+ // JM 02 Oct 2000:
+ value_test(false, boost::is_pointer::value)
+ value_test(false, boost::is_pointer::value)
+ value_test(false, boost::is_pointer::value)
+ value_test(false, boost::is_pointer::value)
+ value_test(false, boost::is_pointer::value)
+
+ value_test(true, boost::is_pointer::value)
+ value_test(true, boost::is_pointer::value)
+ value_test(true, boost::is_pointer::value)
+ // Steve: was 'true', should be 'false', via 3.9.2p3
+ value_test(false, boost::is_pointer::value)
+ value_test(false, boost::is_pointer::value)
+ value_test(false, boost::is_pointer::value)
+ value_test(false, boost::is_pointer::value)
+
+ value_test(false, boost::is_reference::value)
+ value_test(true, boost::is_reference::value)
+ value_test(true, boost::is_reference::value)
+ value_test(true, boost::is_reference::value)
+ value_test(true, boost::is_reference::value)
+ value_test(true, boost::is_reference::value)
+ value_test(true, boost::is_reference::value)
+ value_test(true, boost::is_reference::value)
+
+ value_test(false, boost::is_member_pointer::value)
+ value_test(false, boost::is_member_pointer::value)
+ value_test(false, boost::is_member_pointer::value)
+ value_test(false, boost::is_member_pointer::value)
+ value_test(true, boost::is_member_pointer::value)
+ value_test(true, boost::is_member_pointer::value)
+ value_test(true, boost::is_member_pointer::value)
+ value_test(true, boost::is_member_pointer::value)
+
+ value_test(false, boost::is_enum::value)
+ value_test(true, boost::is_enum::value)
+ value_test(false, boost::is_enum::value)
+ value_test(false, boost::is_enum::value)
+
+ return check_result(argc, argv);
+}
+
+//
+// define the number of failures expected for given compilers:
+#ifdef __BORLANDC__
+unsigned int expected_failures = 2;
+#elif defined(__GNUC__)
+unsigned int expected_failures = 1; // can't handle cv-qualified references
+#elif defined(BOOST_MSVC)
+unsigned int expected_failures = 1;
+#else
+unsigned int expected_failures = 0;
+#endif
+
+
diff --git a/development/copy_example.cpp b/development/copy_example.cpp
new file mode 100644
index 0000000..c20e27a
--- /dev/null
+++ b/development/copy_example.cpp
@@ -0,0 +1,240 @@
+
+/*
+ *
+ * Copyright (c) 1999
+ * Dr John Maddock
+ *
+ * Permission to use, copy, modify, distribute and sell this software
+ * and its documentation for any purpose is hereby granted without fee,
+ * provided that the above copyright notice appear in all copies and
+ * that both that copyright notice and this permission notice appear
+ * in supporting documentation. Dr John Maddock makes no representations
+ * about the suitability of this software for any purpose.
+ * It is provided "as is" without express or implied warranty.
+ *
+ * This file provides some example of type_traits usage -
+ * by "optimising" various algorithms:
+ *
+ * opt::copy - optimised for trivial copy (cf std::copy)
+ *
+ */
+
+#include
+#include
+#include
+#include
+#include
+
+#include
+#include
+
+using std::cout;
+using std::endl;
+using std::cin;
+
+namespace opt{
+
+//
+// opt::copy
+// same semantics as std::copy
+// calls memcpy where appropiate.
+//
+
+namespace detail{
+
+template
+I2 copy_imp(I1 first, I1 last, I2 out)
+{
+ while(first != last)
+ {
+ *out = *first;
+ ++out;
+ ++first;
+ }
+ return out;
+}
+
+template
+struct copier
+{
+ template
+ static I2 do_copy(I1 first, I1 last, I2 out)
+ { return copy_imp(first, last, out); }
+};
+
+template <>
+struct copier
+{
+ template
+ static I2* do_copy(I1* first, I1* last, I2* out)
+ {
+ memcpy(out, first, (last-first)*sizeof(I2));
+ return out+(last-first);
+ }
+};
+
+
+}
+
+#ifndef BOOST_NO_STD_ITERATOR_TRAITS
+
+template
+inline I2 copy(I1 first, I1 last, I2 out)
+{
+ typedef typename boost::remove_cv::value_type>::type v1_t;
+ typedef typename boost::remove_cv::value_type>::type v2_t;
+ return detail::copier<
+ ::boost::type_traits::ice_and<
+ ::boost::is_same::value,
+ ::boost::is_pointer::value,
+ ::boost::is_pointer::value,
+ ::boost::has_trivial_assign::value
+ >::value>::do_copy(first, last, out);
+}
+
+#else // BOOST_NO_STD_ITERATOR_TRAITS
+
+//
+// If there is no standard iterator_traits then we have to
+// use overloading rather than iterator_traits to detect
+// when we have T*'s to copy. Note that we cannot overload
+// copy directly as that will cause some standard conforming
+// code to fail to build:
+
+namespace detail{
+
+template
+inline I2 copy_(const I1& first, const I1& last, const I2& out)
+{
+ return detail::copier::do_copy(first, last, out);
+}
+
+template
+inline T* copy_(const T* first, const T* last, T* out)
+{
+ return detail::copier<
+ ::boost::has_trivial_assign::value
+ >::do_copy(first, last, out);
+}
+
+} // namespace detail
+
+template
+inline I2 copy(I1 first, I1 last, I2 out)
+{
+ return detail::copy_(first, last, out);
+}
+
+#endif // BOOST_NO_STD_ITERATOR_TRAITS
+
+}; // namespace opt
+
+//
+// define some global data:
+//
+const int array_size = 1000;
+int i_array_[array_size] = {0,};
+const int ci_array_[array_size] = {0,};
+char c_array_[array_size] = {0,};
+const char cc_array_[array_size] = { 0,};
+//
+// since arrays aren't iterators we define a set of pointer
+// aliases into the arrays (otherwise the compiler is entitled
+// to deduce the type passed to the template functions as
+// T (&)[N] rather than T*).
+int* i_array = i_array_;
+const int* ci_array = ci_array_;
+char* c_array = c_array_;
+const char* cc_array = cc_array_;
+
+const int iter_count = 1000000;
+
+int main()
+{
+ boost::timer t;
+ double result;
+ int i;
+ cout << "Measuring times in micro-seconds per 1000 elements processed" << endl << endl;
+ cout << "testing copy...\n"
+ "[Some standard library versions may already perform this optimisation.]" << endl;
+
+ // cache load:
+ opt::copy(ci_array, ci_array + array_size, i_array);
+
+ // time optimised version:
+ t.restart();
+ for(i = 0; i < iter_count; ++i)
+ {
+ opt::copy(ci_array, ci_array + array_size, i_array);
+ }
+ result = t.elapsed();
+ cout << "opt::copy: " << result << endl;
+
+ // cache load:
+ std::copy(ci_array, ci_array + array_size, i_array);
+
+ // time standard version:
+ t.restart();
+ for(i = 0; i < iter_count; ++i)
+ {
+ std::copy(ci_array, ci_array + array_size, i_array);
+ }
+ result = t.elapsed();
+ cout << "std::copy: " << result << endl;
+
+ // cache load:
+ opt::detail::copier::do_copy(ci_array, ci_array + array_size, i_array);
+
+ // time unoptimised version:
+ t.restart();
+ for(i = 0; i < iter_count; ++i)
+ {
+ opt::detail::copier::do_copy(ci_array, ci_array + array_size, i_array);
+ }
+ result = t.elapsed();
+ cout << "standard \"unoptimised\" copy: " << result << endl << endl;
+
+ // cache load:
+ opt::copy(cc_array, cc_array + array_size, c_array);
+
+ // time optimised version:
+ t.restart();
+ for(i = 0; i < iter_count; ++i)
+ {
+ opt::copy(cc_array, cc_array + array_size, c_array);
+ }
+ result = t.elapsed();
+ cout << "opt::copy: " << result << endl;
+
+ // cache load:
+ std::copy(cc_array, cc_array + array_size, c_array);
+
+ // time standard version:
+ t.restart();
+ for(i = 0; i < iter_count; ++i)
+ {
+ std::copy(cc_array, cc_array + array_size, c_array);
+ }
+ result = t.elapsed();
+ cout << "std::copy: " << result << endl;
+
+ // cache load:
+ opt::detail::copier::do_copy(cc_array, cc_array + array_size, c_array);
+
+ // time unoptimised version:
+ t.restart();
+ for(i = 0; i < iter_count; ++i)
+ {
+ opt::detail::copier::do_copy(cc_array, cc_array + array_size, c_array);
+ }
+ result = t.elapsed();
+ cout << "standard \"unoptimised\" copy: " << result << endl << endl;
+
+ return 0;
+}
+
+
+
+
+
+
diff --git a/development/cs-win32.html b/development/cs-win32.html
new file mode 100644
index 0000000..991837f
--- /dev/null
+++ b/development/cs-win32.html
@@ -0,0 +1,118 @@
+
+
+
+Compiler Status: win32
+
+
+
+
+Compiler Status: win32
+
+Run Date: 01 Jan 2001 12:44 GMT
+
+
diff --git a/development/cv_traits_test.cpp b/development/cv_traits_test.cpp
new file mode 100644
index 0000000..41d8c6a
--- /dev/null
+++ b/development/cv_traits_test.cpp
@@ -0,0 +1,50 @@
+
+// (C) Copyright John Maddock 2000. Permission to copy, use, modify, sell and
+// distribute this software is granted provided this copyright notice appears
+// in all copies. This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+
+#include
+#include
+
+#ifdef __BORLANDC__
+#pragma hrdstop
+#endif
+#include "boost/type_traits/type_traits_test.hpp"
+
+NESTED_DECL(is_const)
+NESTED_DECL(is_volatile)
+
+int main(int argc, char* argv[])
+{
+ NESTED_TEST(is_const, int)
+ NESTED_TEST(is_const, const int)
+ NESTED_TEST(is_const, volatile int)
+ NESTED_TEST(is_volatile, int)
+ NESTED_TEST(is_volatile, const int)
+ NESTED_TEST(is_volatile, volatile int)
+
+ value_test(false, boost::is_const::value)
+ value_test(true, boost::is_const::value)
+ value_test(false, boost::is_const::value)
+ value_test(true, boost::is_const::value)
+ value_test(true, boost::is_const::value)
+ value_test(true, boost::is_const::value)
+ value_test(false, boost::is_volatile::value)
+ value_test(true, boost::is_volatile::value)
+ value_test(false, boost::is_volatile::value)
+ value_test(true, boost::is_volatile::value)
+ value_test(true, boost::is_volatile::value)
+ value_test(true, boost::is_volatile::value)
+
+ return check_result(argc, argv);
+}
+
+//
+// define the number of failures expected for given compilers:
+#ifdef BOOST_MSVC
+unsigned int expected_failures = 2;
+#else
+unsigned int expected_failures = 0;
+#endif
+
diff --git a/development/fill_example.cpp b/development/fill_example.cpp
new file mode 100644
index 0000000..ce5f03e
--- /dev/null
+++ b/development/fill_example.cpp
@@ -0,0 +1,191 @@
+
+/*
+ *
+ * Copyright (c) 1999
+ * Dr John Maddock
+ *
+ * Permission to use, copy, modify, distribute and sell this software
+ * and its documentation for any purpose is hereby granted without fee,
+ * provided that the above copyright notice appear in all copies and
+ * that both that copyright notice and this permission notice appear
+ * in supporting documentation. Dr John Maddock makes no representations
+ * about the suitability of this software for any purpose.
+ * It is provided "as is" without express or implied warranty.
+ *
+ * This file provides some example of type_traits usage -
+ * by "optimising" various algorithms:
+ *
+ * opt::fill - optimised for trivial copy/small types (cf std::fill)
+ *
+ */
+
+#include
+#include
+#include
+#include
+#include
+
+#include
+#include
+#include
+
+#if defined(BOOST_NO_STDC_NAMESPACE) || (defined(std) && defined(__SGI_STL_PORT))
+namespace std{ using :: memset; }
+#endif
+
+using std::cout;
+using std::endl;
+using std::cin;
+
+namespace opt{
+//
+// fill
+// same as std::fill, uses memset where appropriate, along with call_traits
+// to "optimise" parameter passing.
+//
+namespace detail{
+
+template
+void do_fill_(I first, I last, typename boost::call_traits::param_type val)
+{
+ while(first != last)
+ {
+ *first = val;
+ ++first;
+ }
+}
+
+template
+struct filler
+{
+ template
+ struct rebind
+ {
+ static void do_fill(I first, I last, typename boost::call_traits::param_type val)
+ { do_fill_(first, last, val); }
+ };
+};
+
+template <>
+struct filler
+{
+ template
+ struct rebind
+ {
+ static void do_fill(I first, I last, T val)
+ {
+ std::memset(first, val, last-first);
+ }
+ };
+};
+
+}
+
+template
+inline void fill(I first, I last, const T& val)
+{
+ typedef detail::filler<
+ ::boost::type_traits::ice_and<
+ ::boost::is_pointer::value,
+ ::boost::is_arithmetic::value,
+ (sizeof(T) == 1)
+ >::value> filler_t;
+ typedef typename filler_t:: template rebind binder;
+ binder::do_fill(first, last, val);
+}
+
+}; // namespace opt
+
+//
+// define some global data:
+//
+const int array_size = 1000;
+int i_array_[array_size] = {0,};
+const int ci_array_[array_size] = {0,};
+char c_array_[array_size] = {0,};
+const char cc_array_[array_size] = { 0,};
+//
+// since arrays aren't iterators we define a set of pointer
+// aliases into the arrays (otherwise the compiler is entitled
+// to deduce the type passed to the template functions as
+// T (&)[N] rather than T*).
+int* i_array = i_array_;
+const int* ci_array = ci_array_;
+char* c_array = c_array_;
+const char* cc_array = cc_array_;
+
+const int iter_count = 1000000;
+
+int main()
+{
+ boost::timer t;
+ double result;
+ int i;
+ //
+ // test destroy_array,
+ // compare destruction time of an array of ints
+ // with unoptimised form.
+ //
+ cout << "Measuring times in micro-seconds per 1000 elements processed" << endl << endl;
+
+ cout << "testing fill(char)...\n"
+ "[Some standard library versions may already perform this optimisation.]" << endl;
+
+ // cache load:
+ opt::fill(c_array, c_array + array_size, (char)3);
+
+ // time optimised version:
+ t.restart();
+ for(i = 0; i < iter_count; ++i)
+ {
+ opt::fill(c_array, c_array + array_size, (char)3);
+ }
+ result = t.elapsed();
+ cout << "opt::fill: " << result << endl;
+
+ // cache load:
+ std::fill(c_array, c_array + array_size, (char)3);
+
+ // time standard version:
+ t.restart();
+ for(i = 0; i < iter_count; ++i)
+ {
+ std::fill(c_array, c_array + array_size, (char)3);
+ }
+ result = t.elapsed();
+ cout << "std::fill: " << result << endl << endl;
+
+ cout << "testing fill(int)...\n"
+ "[Tests the effect of call_traits pass-by-value optimisation -\nthe value of this optimisation may depend upon hardware characteristics.]" << endl;
+
+ // cache load:
+ opt::fill(i_array, i_array + array_size, 3);
+
+ // timer optimised version:
+ t.restart();
+ for(i = 0; i < iter_count; ++i)
+ {
+ opt::fill(i_array, i_array + array_size, 3);
+ }
+ result = t.elapsed();
+ cout << "opt::fill: " << result << endl;
+
+ // cache load:
+ std::fill(i_array, i_array + array_size, 3);
+
+ // time standard version:
+ t.restart();
+ for(i = 0; i < iter_count; ++i)
+ {
+ std::fill(i_array, i_array + array_size, 3);
+ }
+ result = t.elapsed();
+ cout << "std::fill: " << result << endl << endl;
+
+ return 0;
+}
+
+
+
+
+
diff --git a/development/include/boost/call_traits.hpp b/development/include/boost/call_traits.hpp
new file mode 100644
index 0000000..345a440
--- /dev/null
+++ b/development/include/boost/call_traits.hpp
@@ -0,0 +1,23 @@
+// (C) Copyright Boost.org 2000. Permission to copy, use, modify, sell and
+// distribute this software is granted provided this copyright notice appears
+// in all copies. This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+
+// See http://www.boost.org for most recent version including documentation.
+// See boost/detail/call_traits.hpp and boost/detail/ob_call_traits.hpp
+// for full copyright notices.
+
+#ifndef BOOST_CALL_TRAITS_HPP
+#define BOOST_CALL_TRAITS_HPP
+
+#ifndef BOOST_CONFIG_HPP
+#include
+#endif
+
+#ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+#include
+#else
+#include
+#endif
+
+#endif // BOOST_CALL_TRAITS_HPP
diff --git a/development/include/boost/config.hpp b/development/include/boost/config.hpp
new file mode 100644
index 0000000..3e01dca
--- /dev/null
+++ b/development/include/boost/config.hpp
@@ -0,0 +1,427 @@
+// Boost config.hpp configuration header file ------------------------------//
+
+// (C) Copyright Boost.org 1999. Permission to copy, use, modify, sell and
+// distribute this software is granted provided this copyright notice appears
+// in all copies. This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+
+// See http://www.boost.org for most recent version.
+
+// Boost config.hpp policy and rationale documentation has been moved to
+// http://www.boost.org/libs/config
+
+// Revision History (excluding minor changes for specific compilers)
+// 31 Dec 00 BOOST_NO_CV_SPECIALIZATIONS
+// BOOST_NO_CV_VOID_SPECIALIZATIONS (John Maddock)
+// 17 Nov 00 BOOST_NO_AUTO_PTR (John Maddock)
+// 4 Oct 00 BOOST_NO_STD_MIN_MAX (Jeremy Siek)
+// 29 Sep 00 BOOST_NO_INTEGRAL_INT64_T (Jens Maurer)
+// 25 Sep 00 BOOST_NO_STD_ALLOCATOR (Jeremy Siek)
+// 18 SEP 00 BOOST_NO_SLIST, BOOST_NO_HASH,
+// BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS
+// BOOST_NO_LIMITS (Jeremy Siek)
+// 1 Sep 00 BOOST_NO_PRIVATE_IN_AGGREGATE added. (Mark Rodgers)
+// 23 Jul 00 Fixed spelling of BOOST_NO_INCLASS_MEMBER_INITIALIZATION in
+// comment (Dave Abrahams).
+// 10 Jul 00 BOOST_NO_POINTER_TO_MEMBER_CONST added (Mark Rodgers)
+// 26 Jun 00 BOOST_NO_STD_ITERATOR, BOOST_MSVC_STD_ITERATOR,
+// BOOST_NO_STD_ITERATOR_TRAITS, BOOST_NO_USING_TEMPLATE,
+// added (Jeremy Siek)
+// 20 Jun 00 BOOST_MSVC added (Aleksey Gurtovoy)
+// 14 Jun 00 BOOST_NO_DEPENDENT_TYPES_IN_TEMPLATE_VALUE_PARAMETERS (Jens M.)
+// 22 Mar 00 BOOST_MSVC6_MEMBER_TEMPLATES added (Dave Abrahams)
+// 18 Feb 00 BOOST_NO_INCLASS_MEMBER_INITIALIZATION added (Jens Maurer)
+// 26 Jan 00 Borland compiler support added (John Maddock)
+// 26 Jan 00 Sun compiler support added (Jörg Schaible)
+// 30 Dec 99 BOOST_NMEMBER_TEMPLATES compatibility moved here from
+// smart_ptr.hpp. (Dave Abrahams)
+// 15 Nov 99 BOOST_NO_OPERATORS_IN_NAMESPACE,
+// BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION added (Beman Dawes)
+// 11 Oct 99 BOOST_NO_STDC_NAMESPACE refined; supplied
+// 29 Sep 99 BOOST_NO_STDC_NAMESPACE added (Ed Brey)
+// 24 Sep 99 BOOST_DECL added (Ed Brey)
+// 10 Aug 99 Endedness flags added, GNU CC support added
+// 22 Jul 99 Initial version
+
+
+#ifndef BOOST_CONFIG_HPP
+#define BOOST_CONFIG_HPP
+
+// Conformance Flag Macros -------------------------------------------------//
+//
+// Conformance flag macros should identify the absence of C++ Standard
+// conformance rather than its presence. This ensures that standard conforming
+// compilers do not require a lot of configuration flag macros. It places the
+// burden where it should be, on non-conforming compilers. In the future,
+// hopefully, less rather than more conformance flags will have to be defined.
+
+// BOOST_NO_CV_SPECIALIZATIONS: if template specialisations for cv-qualified types
+// conflict with a specialistaion for unqualififed type.
+
+// BOOST_NO_CV_VOID_SPECIALIZATIONS: if template specialisations for cv-void types
+// conflict with a specialistaion for void.
+
+// BOOST_NO_DEPENDENT_TYPES_IN_TEMPLATE_VALUE_PARAMETERS: Template value
+// parameters cannot have a dependent type, for example
+// "template class X { ... };"
+
+// BOOST_NO_INCLASS_MEMBER_INITIALIZATION: Compiler violates std::9.4.2/4.
+
+// BOOST_NO_INT64_T: does not support 64-bit integer
+// types. (Set by rather than ).
+
+// BOOST_NO_INTEGRAL_INT64_T: int64_t as defined by is
+// not an integral type.
+
+// BOOST_NO_MEMBER_TEMPLATES: Member template functions not fully supported.
+// Also see BOOST_MSVC6_MEMBER_TEMPLATES in the Compiler Control section below.
+
+// BOOST_NO_MEMBER_TEMPLATE_FRIENDS: Member template friend syntax
+// ("template friend class frd;") described in the C++ Standard,
+// 14.5.3, not supported.
+
+// BOOST_NO_OPERATORS_IN_NAMESPACE: Compiler requires inherited operator
+// friend functions to be defined at namespace scope, then using'ed to boost.
+// Probably GCC specific. See boost/operators.hpp for example.
+
+// BOOST_NO_POINTER_TO_MEMBER_CONST: The compiler does not correctly handle
+// pointers to const member functions, preventing use of these in overloaded
+// function templates. See boost/functional.hpp for example.
+
+// BOOST_NO_PRIVATE_IN_AGGREGATE: The compiler misreads 8.5.1, treating classes
+// as non-aggregate if they contain private or protected member functions.
+
+// BOOST_NO_STD_ITERATOR: The C++ implementation fails to provide the
+// std::iterator class.
+
+// BOOST_NO_STD_ITERATOR_TRAITS: The compiler does not provide a standard
+// compliant implementation of std::iterator_traits. Note that
+// the compiler may still have a non-standard implementation.
+
+// BOOST_NO_STDC_NAMESPACE: The contents of C++ standard headers for C library
+// functions (the headers) have not been placed in namespace std.
+// Because the use of std::size_t is so common, a specific workaround for
+// (and thus std::size_t) is provided in this header (see below).
+// For other headers, a workaround must be provided in the boost header:
+//
+// #include // for abs
+// #ifdef BOOST_NO_STDC_NAMESPACE
+// namespace std { using ::abs; }
+// #endif
+
+// BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION. Class template partial
+// specialization (14.5.4 [temp.class.spec]) not supported.
+
+// BOOST_NO_USING_TEMPLATE: The compiler will not accept a using declaration
+// that imports a template from the global namespace into a named namespace.
+// Probably Borland specific.
+
+// BOOST_NO_AUTO_PTR: If the compiler / library supplies non-standard or broken
+// std::auto_ptr.
+
+// Compiler Control or Information Macros ----------------------------------//
+//
+// Compilers often supply features outside of the C++ Standard which need to be
+// controlled or detected. As usual, reasonable default behavior should occur
+// if any of these macros are not defined.
+
+// BOOST_DECL: Certain compilers for Microsoft operating systems require
+// non-standard class and function decoration if dynamic load library linking
+// is desired. BOOST_DECL supplies that decoration, defaulting to a nul string
+// so that it is harmless when not required. Boost does not encourage the use
+// of BOOST_DECL - it is non-standard and to be avoided if practical to do so.
+
+// BOOST_DECL_EXPORTS: User defined, BOOST_DECL_EXPORTS causes BOOST_DECL to
+// be defined as __declspec(dllexport) rather than __declspec(dllimport).
+
+// BOOST_MSVC6_MEMBER_TEMPLATES: Microsoft Visual C++ 6.0 has enough member
+// template idiosyncrasies (being polite) that BOOST_NO_MEMBER_TEMPLATES is
+// defined for this compiler. BOOST_MSVC6_MEMBER_TEMPLATES is defined to allow
+// compiler specific workarounds.
+
+// BOOST_MSVC: defined as _MSC_VER for the Microsoft compiler only. In general,
+// boost headers should test for a specific conformance flag macro (for
+// example, BOOST_NO_MEMBER_TEMPLATE_FRIENDS) rather than a specific compiler.
+// VC++ is a special case, however, since many libraries try to support it yet
+// it has so many conformance issues that sometimes it is just easier to test
+// for it directly. On the other hand, the obvious way to do this doesn't work,
+// as many non-Microsoft compilers define _MSC_VER. Thus BOOST_MSVC.
+
+// BOOST_MSVC_STD_ITERATOR: Microsoft's broken version of std::iterator
+// is being used.
+
+// BOOST_SYSTEM_HAS_STDINT_H: There are no 1998 C++ Standard headers
+// or , although the 1999 C Standard does include .
+// If is present, can make good use of it,
+// so a flag is supplied (signalling presence; thus the default is not
+// present, conforming to the current C++ standard).
+
+// BOOST_NO_SLIST: The C++ implementation does not provide the slist class.
+
+// BOOST_NO_HASH: The C++ implementation does not provide the hash_set
+// or hash_map classes.
+
+// BOOST_STD_EXTENSION_NAMESPACE: The name of the namespace in which the slist,
+// hash_set and/or hash_map templates are defined in this implementation (if any).
+
+// BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS: The standard library does not provide
+// templated iterator constructors for its containers.
+
+// BOOST_NO_LIMITS: The C++ implementation does not provide the header.
+
+// BOOST_NO_INTRINSIC_WCHAR_T: The C++ implementation does not provide wchar_t,
+// or it is really a synonym for another integral type. Use this symbol to
+// decide whether it is appropriate to explicitly specialize a template on
+// wchar_t if there is already a specialization for other integer types.
+
+// BOOST_NO_STD_ALLOCATOR: The C++ standard library does not provide
+// a standards conforming std::allocator.
+
+// BOOST_NO_STD_MIN_MAX: The C++ standard library does not provide
+// the min() and max() template functions that should be in .
+
+// Compilers are listed in alphabetic order (except VC++ last - see below)---//
+
+// GNU CC (also known as GCC and G++) --------------------------------------//
+
+# if defined __GNUC__
+# if __GNUC__ == 2 && __GNUC_MINOR__ == 91
+ // egcs 1.1 won't parse smart_ptr.hpp without this:
+# define BOOST_NO_AUTO_PTR
+# endif
+# if __GNUC__ == 2 && __GNUC_MINOR__ <= 95
+# include // not sure this is the right way to do this -JGS
+# if !defined(_CXXRT_STD) && !defined(__SGI_STL) // need to ask Dietmar about this -JGS
+# define BOOST_NO_STD_ITERATOR
+# define BOOST_NO_LIMITS
+# endif
+# define BOOST_NO_MEMBER_TEMPLATE_FRIENDS
+# define BOOST_NO_OPERATORS_IN_NAMESPACE
+# endif
+# if __GNUC__ == 2 && __GNUC_MINOR__ <= 8
+# define BOOST_NO_MEMBER_TEMPLATES
+# endif
+
+// Kai C++ ------------------------------------------------------------------//
+
+#elif defined __KCC
+# define BOOST_NO_SLIST
+# define BOOST_NO_HASH
+
+// Greenhills C++ -----------------------------------------------------------//
+
+#elif defined __ghs
+# define BOOST_NO_SLIST
+# define BOOST_NO_HASH
+
+// Borland ------------------------------------------------------------------//
+
+#elif defined __BORLANDC__
+# define BOOST_NO_SLIST
+# define BOOST_NO_HASH
+# if __BORLANDC__ <= 0x0551
+# define BOOST_NO_INTEGRAL_INT64_T
+# define BOOST_NO_PRIVATE_IN_AGGREGATE
+# endif
+# if __BORLANDC__ <= 0x0550
+// Borland C++ Builder 4 and 5:
+# define BOOST_NO_MEMBER_TEMPLATE_FRIENDS
+# define BOOST_NO_USING_TEMPLATE
+# if __BORLANDC__ == 0x0550
+// Borland C++ Builder 5, command-line compiler 5.5:
+# define BOOST_NO_OPERATORS_IN_NAMESPACE
+# endif
+# endif
+# if defined BOOST_DECL_EXPORTS
+# define BOOST_DECL __declspec(dllexport)
+# else
+# define BOOST_DECL __declspec(dllimport)
+# endif
+# define BOOST_NO_CV_SPECIALIZATIONS
+# define BOOST_NO_CV_VOID_SPECIALIZATIONS
+
+// Intel -------------------------------------------------------------------//
+
+# elif defined __ICL
+# include // not sure this is the right way to do this -JGS
+# if __SGI_STL_PORT >= 0x400 || __SGI_STL_PORT >= 0x321 && defined(__STL_USE_NAMESPACES)
+ // a perfectly good implementation of std::iterator is supplied
+# elif defined(__SGI_STL_ITERATOR)
+# define BOOST_NO_STD_ITERATOR // No std::iterator in this case
+# else // assume using dinkumware's STL that comes with VC++ 6.0
+# define BOOST_MSVC_STD_ITERATOR
+# define BOOST_NO_STD_ITERATOR_TRAITS
+# define BOOST_NO_STDC_NAMESPACE
+# define BOOST_NO_SLIST
+# define BOOST_NO_HASH
+# define BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS
+# define BOOST_NO_STD_ALLOCATOR
+# define BOOST_NO_STD_MIN_MAX
+# endif
+
+
+// Metrowerks CodeWarrior --------------------------------------------------//
+
+# elif defined __MWERKS__
+# if __MWERKS__ <= 0x4000
+# define BOOST_NO_MEMBER_TEMPLATE_FRIENDS
+# endif
+# if __MWERKS__ <= 0x2301
+# define BOOST_NO_POINTER_TO_MEMBER_CONST
+# endif
+# if __MWERKS__ >= 0x2300
+# define BOOST_SYSTEM_HAS_STDINT_H
+# endif
+# if defined BOOST_DECL_EXPORTS
+# define BOOST_DECL __declspec(dllexport)
+# else
+# define BOOST_DECL __declspec(dllimport)
+# endif
+
+# define BOOST_STD_EXTENSION_NAMESPACE Metrowerks
+
+// Sun Workshop Compiler C++ ------------------------------------------------//
+
+# elif defined __SUNPRO_CC
+# if __SUNPRO_CC <= 0x500
+# define BOOST_NO_MEMBER_TEMPLATES
+# define BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+# endif
+
+// Microsoft Visual C++ (excluding Intel/EDG front end) --------------------//
+//
+// Must remain the last #elif since some other vendors (Metrowerks, for
+// example) also #define _MSC_VER
+
+# elif defined _MSC_VER
+# define BOOST_MSVC _MSC_VER
+
+ // turn off the warnings before we #include anything
+# pragma warning( disable : 4786 ) // ident trunc to '255' chars in debug info
+# pragma warning( disable : 4503 ) // warning: decorated name length exceeded
+
+# if _MSC_VER <= 1200 // 1200 == VC++ 6.0
+# define BOOST_NO_INCLASS_MEMBER_INITIALIZATION
+# define BOOST_NO_PRIVATE_IN_AGGREGATE
+
+# define BOOST_NO_INTEGRAL_INT64_T
+# define BOOST_NO_INTRINSIC_WCHAR_T
+
+// VC++ 6.0 has member templates but they have numerous problems including
+// cases of silent failure, so for safety we define:
+# define BOOST_NO_MEMBER_TEMPLATES
+// For VC++ experts wishing to attempt workarounds, we define:
+# define BOOST_MSVC6_MEMBER_TEMPLATES
+
+# define BOOST_NO_MEMBER_TEMPLATE_FRIENDS
+# define BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+# define BOOST_NO_DEPENDENT_TYPES_IN_TEMPLATE_VALUE_PARAMETERS
+
+# include // not sure this is the right way to do this -JGS
+# if __SGI_STL_PORT >= 0x400 || __SGI_STL_PORT >= 0x321 && defined(__STL_USE_NAMESPACES)
+ // a perfectly good implementation of std::iterator is supplied
+# elif defined(__SGI_STL_ITERATOR)
+# define BOOST_NO_STD_ITERATOR // No std::iterator in this case
+# else
+# define BOOST_MSVC_STD_ITERATOR 1
+# define BOOST_NO_SLIST
+# define BOOST_NO_HASH
+# define BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS
+# define BOOST_NO_STD_ALLOCATOR
+# ifndef _CPPLIB_VER
+ // Updated Dinkum library defines this, and provides
+ // its own min and max definitions.
+# define BOOST_NO_STD_MIN_MAX
+# undef min
+# undef max
+# endif
+# ifndef NOMINMAX
+ // avoid spurious NOMINMAX redefinition warning
+# define NOMINMAX
+# endif
+# endif
+# define BOOST_NO_STD_ITERATOR_TRAITS
+# define BOOST_NO_CV_VOID_SPECIALIZATIONS
+
+
+// Make sure at least one standard library header is included so that library
+// implementation detection will work, even if no standard headers have been
+// included in front of a boost header. (Ed Brey 5 Jun 00)
+# include
+
+// Determine if the standard library implementation is already pulling names
+// into std. STLport defines the following if so. (Ed Brey 5 Jun 00)
+# ifndef __STL_IMPORT_VENDOR_CSTD
+# define BOOST_NO_STDC_NAMESPACE
+# endif
+
+# endif
+
+# if defined BOOST_DECL_EXPORTS
+# define BOOST_DECL __declspec(dllexport)
+# else
+# define BOOST_DECL __declspec(dllimport)
+# endif
+
+# endif // Microsoft (excluding Intel/EDG frontend)
+
+# ifndef BOOST_DECL
+# define BOOST_DECL // default for compilers not needing this decoration.
+# endif
+
+// end of compiler specific portion ----------------------------------------//
+
+#ifndef BOOST_STD_EXTENSION_NAMESPACE
+# define BOOST_STD_EXTENSION_NAMESPACE std
+#endif
+
+// Check for old name "BOOST_NMEMBER_TEMPLATES" for compatibility -----------//
+// Don't use BOOST_NMEMBER_TEMPLATES. It is deprecated and will be removed soon.
+#if defined( BOOST_NMEMBER_TEMPLATES ) && !defined( BOOST_NO_MEMBER_TEMPLATES )
+ #define BOOST_NO_MEMBER_TEMPLATES
+#endif
+
+// BOOST_NO_STDC_NAMESPACE workaround --------------------------------------//
+//
+// Because std::size_t usage is so common, even in boost headers which do not
+// otherwise use the C library, the workaround is included here so
+// that ugly workaround code need not appear in many other boost headers.
+// NOTE WELL: This is a workaround for non-conforming compilers;
+// must still be #included in the usual places so that inclusion
+// works as expected with standard conforming compilers. The resulting
+// double inclusion of is harmless.
+
+# ifdef BOOST_NO_STDC_NAMESPACE
+# include
+ namespace std { using ::ptrdiff_t; using ::size_t; }
+ // using ::wchar_t; removed since wchar_t is a C++ built-in type (Ed Brey)
+# endif
+
+#ifdef BOOST_NO_STD_MIN_MAX
+namespace std {
+ template
+ inline const _Tp& min(const _Tp& __a, const _Tp& __b) {
+ return __b < __a ? __b : __a;
+ }
+ template
+ inline const _Tp& max(const _Tp& __a, const _Tp& __b) {
+ return __a < __b ? __b : __a;
+ }
+#ifdef BOOST_MSVC
+ inline long min(long __a, long __b) {
+ return __b < __a ? __b : __a;
+ }
+ inline long max(long __a, long __b) {
+ return __a < __b ? __b : __a;
+ }
+#endif
+}
+#endif
+
+#endif // BOOST_CONFIG_HPP
+
+
+
+
+
+
diff --git a/development/include/boost/detail/call_traits.hpp b/development/include/boost/detail/call_traits.hpp
new file mode 100644
index 0000000..304a686
--- /dev/null
+++ b/development/include/boost/detail/call_traits.hpp
@@ -0,0 +1,138 @@
+// (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000.
+// Permission to copy, use, modify, sell and
+// distribute this software is granted provided this copyright notice appears
+// in all copies. This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+
+// See http://www.boost.org for most recent version including documentation.
+
+// call_traits: defines typedefs for function usage
+// (see libs/utility/call_traits.htm)
+
+/* Release notes:
+ 23rd July 2000:
+ Fixed array specialization. (JM)
+ Added Borland specific fixes for reference types
+ (issue raised by Steve Cleary).
+*/
+
+#ifndef BOOST_DETAIL_CALL_TRAITS_HPP
+#define BOOST_DETAIL_CALL_TRAITS_HPP
+
+#ifndef BOOST_CONFIG_HPP
+#include
+#endif
+
+#ifndef BOOST_TYPE_TRAITS_HPP
+#include
+#endif
+
+namespace boost{
+
+namespace detail{
+
+template
+struct ct_imp
+{
+ typedef const T& param_type;
+};
+
+template
+struct ct_imp
+{
+ typedef T const param_type;
+};
+
+template
+struct ct_imp
+{
+ typedef T const param_type;
+};
+
+}
+
+template
+struct call_traits
+{
+public:
+ typedef T value_type;
+ typedef T& reference;
+ typedef const T& const_reference;
+ //
+ // C++ Builder workaround: we should be able to define a compile time
+ // constant and pass that as a single template parameter to ct_imp,
+ // however compiler bugs prevent this - instead pass three bool's to
+ // ct_imp and add an extra partial specialisation
+ // of ct_imp to handle the logic. (JM)
+ typedef typename detail::ct_imp::type>::value, ::boost::is_arithmetic::type>::value, sizeof(T) <= sizeof(void*)>::param_type param_type;
+};
+
+template
+struct call_traits
+{
+ typedef T& value_type;
+ typedef T& reference;
+ typedef const T& const_reference;
+ typedef T& param_type; // hh removed const
+};
+
+#if defined(__BORLANDC__) && (__BORLANDC__ <= 0x551)
+// these are illegal specialisations; cv-qualifies applied to
+// references have no effect according to [8.3.2p1],
+// C++ Builder requires them though as it treats cv-qualified
+// references as distinct types...
+template
+struct call_traits
+{
+ typedef T& value_type;
+ typedef T& reference;
+ typedef const T& const_reference;
+ typedef T& param_type; // hh removed const
+};
+template
+struct call_traits
+{
+ typedef T& value_type;
+ typedef T& reference;
+ typedef const T& const_reference;
+ typedef T& param_type; // hh removed const
+};
+template
+struct call_traits
+{
+ typedef T& value_type;
+ typedef T& reference;
+ typedef const T& const_reference;
+ typedef T& param_type; // hh removed const
+};
+#endif
+
+template
+struct call_traits
+{
+private:
+ typedef T array_type[N];
+public:
+ // degrades array to pointer:
+ typedef const T* value_type;
+ typedef array_type& reference;
+ typedef const array_type& const_reference;
+ typedef const T* const param_type;
+};
+
+template
+struct call_traits
+{
+private:
+ typedef const T array_type[N];
+public:
+ // degrades array to pointer:
+ typedef const T* value_type;
+ typedef array_type& reference;
+ typedef const array_type& const_reference;
+ typedef const T* const param_type;
+};
+
+}
+
+#endif // BOOST_DETAIL_CALL_TRAITS_HPP
diff --git a/development/include/boost/detail/ob_call_traits.hpp b/development/include/boost/detail/ob_call_traits.hpp
new file mode 100644
index 0000000..a031f17
--- /dev/null
+++ b/development/include/boost/detail/ob_call_traits.hpp
@@ -0,0 +1,125 @@
+// (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000.
+// Permission to copy, use, modify, sell and
+// distribute this software is granted provided this copyright notice appears
+// in all copies. This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+
+// See http://www.boost.org for most recent version including documentation.
+//
+// Crippled version for crippled compilers:
+// see libs/utility/call_traits.htm
+//
+
+/* Release notes:
+ 01st October 2000:
+ Fixed call_traits on VC6, using "poor man's partial specialisation",
+ using ideas taken from "Generative programming" by Krzysztof Czarnecki
+ & Ulrich Eisenecker.
+*/
+
+#ifndef BOOST_OB_CALL_TRAITS_HPP
+#define BOOST_OB_CALL_TRAITS_HPP
+
+#ifndef BOOST_CONFIG_HPP
+#include
+#endif
+
+#ifndef BOOST_TYPE_TRAITS_HPP
+#include
+#endif
+
+namespace boost{
+
+#if defined(BOOST_MSVC6_MEMBER_TEMPLATES) || !defined(BOOST_NO_MEMBER_TEMPLATES)
+//
+// use member templates to emulate
+// partial specialisation:
+//
+namespace detail{
+
+template
+struct standard_call_traits
+{
+ typedef T value_type;
+ typedef T& reference;
+ typedef const T& const_reference;
+ typedef const T& param_type;
+};
+template
+struct simple_call_traits
+{
+ typedef T value_type;
+ typedef T& reference;
+ typedef const T& const_reference;
+ typedef const T param_type;
+};
+template
+struct reference_call_traits
+{
+ typedef T value_type;
+ typedef T reference;
+ typedef T const_reference;
+ typedef T param_type;
+};
+template
+struct call_traits_chooser
+{
+ template
+ struct rebind
+ {
+ typedef standard_call_traits type;
+ };
+};
+template <>
+struct call_traits_chooser
+{
+ template
+ struct rebind
+ {
+ typedef simple_call_traits type;
+ };
+};
+template <>
+struct call_traits_chooser
+{
+ template
+ struct rebind
+ {
+ typedef reference_call_traits type;
+ };
+};
+} // namespace detail
+template
+struct call_traits
+{
+private:
+ typedef detail::call_traits_chooser<(is_pointer::value || is_arithmetic::value) && sizeof(T) <= sizeof(void*), is_reference::value> chooser;
+ typedef typename chooser::template rebind bound_type;
+ typedef typename bound_type::type call_traits_type;
+public:
+ typedef typename call_traits_type::value_type value_type;
+ typedef typename call_traits_type::reference reference;
+ typedef typename call_traits_type::const_reference const_reference;
+ typedef typename call_traits_type::param_type param_type;
+};
+
+#else
+//
+// sorry call_traits is completely non-functional
+// blame your broken compiler:
+//
+
+template
+struct call_traits
+{
+ typedef T value_type;
+ typedef T& reference;
+ typedef const T& const_reference;
+ typedef const T& param_type;
+};
+
+#endif // member templates
+
+}
+
+#endif // BOOST_OB_CALL_TRAITS_HPP
diff --git a/development/include/boost/smart_ptr.hpp b/development/include/boost/smart_ptr.hpp
new file mode 100644
index 0000000..59e42a7
--- /dev/null
+++ b/development/include/boost/smart_ptr.hpp
@@ -0,0 +1,379 @@
+// Boost smart_ptr.hpp header file -----------------------------------------//
+
+// (C) Copyright Greg Colvin and Beman Dawes 1998, 1999. Permission to copy,
+// use, modify, sell and distribute this software is granted provided this
+// copyright notice appears in all copies. This software is provided "as is"
+// without express or implied warranty, and with no claim as to its
+// suitability for any purpose.
+
+// See http://www.boost.org for most recent version including documentation.
+
+// Revision History
+// 19 Oct 00 Make shared_ptr ctor from auto_ptr explicit. (Robert Vugts)
+// 24 Jul 00 Change throw() to // never throws. See lib guidelines
+// Exception-specification rationale. (Beman Dawes)
+// 22 Jun 00 Remove #if continuations to fix GCC 2.95.2 problem (Beman Dawes)
+// 1 Feb 00 Additional shared_ptr BOOST_NO_MEMBER_TEMPLATES workarounds
+// (Dave Abrahams)
+// 31 Dec 99 Condition tightened for no member template friend workaround
+// (Dave Abrahams)
+// 30 Dec 99 Moved BOOST_NMEMBER_TEMPLATES compatibility code to config.hpp
+// (Dave Abrahams)
+// 30 Nov 99 added operator ==, operator !=, and std::swap and std::less
+// specializations for shared types (Darin Adler)
+// 11 Oct 99 replaced op[](int) with op[](std::size_t) (Ed Brey, Valentin
+// Bonnard), added shared_ptr workaround for no member template
+// friends (Matthew Langston)
+// 25 Sep 99 added shared_ptr::swap and shared_array::swap (Luis Coelho).
+// 20 Jul 99 changed name to smart_ptr.hpp, #include ,
+// #include and use boost::noncopyable
+// 17 May 99 remove scoped_array and shared_array operator*() as
+// unnecessary (Beman Dawes)
+// 14 May 99 reorder code so no effects when bad_alloc thrown (Abrahams/Dawes)
+// 13 May 99 remove certain throw() specifiers to avoid generated try/catch
+// code cost (Beman Dawes)
+// 11 May 99 get() added, conversion to T* placed in macro guard (Valentin
+// Bonnard, Dave Abrahams, and others argued for elimination
+// of the automatic conversion)
+// 28 Apr 99 #include fix (Valentin Bonnard)
+// 28 Apr 99 rename transfer() to share() for clarity (Dave Abrahams)
+// 28 Apr 99 remove unsafe shared_array template conversions(Valentin Bonnard)
+// 28 Apr 99 p(r) changed to p(r.px) for clarity (Dave Abrahams)
+// 21 Apr 99 reset() self assignment fix (Valentin Bonnard)
+// 21 Apr 99 dispose() provided to improve clarity (Valentin Bonnard)
+// 27 Apr 99 leak when new throws fixes (Dave Abrahams)
+// 21 Oct 98 initial Version (Greg Colvin/Beman Dawes)
+
+#ifndef BOOST_SMART_PTR_HPP
+#define BOOST_SMART_PTR_HPP
+
+#include // for broken compiler workarounds
+#include // for std::size_t
+#include // for std::auto_ptr
+#include // for std::swap
+#include // for boost::noncopyable
+#include // for std::less
+
+namespace boost {
+
+// scoped_ptr --------------------------------------------------------------//
+
+// scoped_ptr mimics a built-in pointer except that it guarantees deletion
+// of the object pointed to, either on destruction of the scoped_ptr or via
+// an explicit reset(). scoped_ptr is a simple solution for simple needs;
+// see shared_ptr (below) or std::auto_ptr if your needs are more complex.
+
+template class scoped_ptr : noncopyable {
+
+ T* ptr;
+
+ public:
+ typedef T element_type;
+
+ explicit scoped_ptr( T* p=0 ) : ptr(p) {} // never throws
+ ~scoped_ptr() { delete ptr; }
+
+ void reset( T* p=0 ) { if ( ptr != p ) { delete ptr; ptr = p; } }
+ T& operator*() const { return *ptr; } // never throws
+ T* operator->() const { return ptr; } // never throws
+ T* get() const { return ptr; } // never throws
+#ifdef BOOST_SMART_PTR_CONVERSION
+ // get() is safer! Define BOOST_SMART_PTR_CONVERSION at your own risk!
+ operator T*() const { return ptr; } // never throws
+#endif
+ }; // scoped_ptr
+
+// scoped_array ------------------------------------------------------------//
+
+// scoped_array extends scoped_ptr to arrays. Deletion of the array pointed to
+// is guaranteed, either on destruction of the scoped_array or via an explicit
+// reset(). See shared_array or std::vector if your needs are more complex.
+
+template class scoped_array : noncopyable {
+
+ T* ptr;
+
+ public:
+ typedef T element_type;
+
+ explicit scoped_array( T* p=0 ) : ptr(p) {} // never throws
+ ~scoped_array() { delete [] ptr; }
+
+ void reset( T* p=0 ) { if ( ptr != p ) {delete [] ptr; ptr=p;} }
+
+ T* get() const { return ptr; } // never throws
+#ifdef BOOST_SMART_PTR_CONVERSION
+ // get() is safer! Define BOOST_SMART_PTR_CONVERSION at your own risk!
+ operator T*() const { return ptr; } // never throws
+#else
+ T& operator[](std::size_t i) const { return ptr[i]; } // never throws
+#endif
+ }; // scoped_array
+
+// shared_ptr --------------------------------------------------------------//
+
+// An enhanced relative of scoped_ptr with reference counted copy semantics.
+// The object pointed to is deleted when the last shared_ptr pointing to it
+// is destroyed or reset.
+
+template class shared_ptr {
+ public:
+ typedef T element_type;
+
+ explicit shared_ptr(T* p =0) : px(p) {
+ try { pn = new long(1); } // fix: prevent leak if new throws
+ catch (...) { delete p; throw; }
+ }
+
+ shared_ptr(const shared_ptr& r) : px(r.px) { ++*(pn = r.pn); } // never throws
+
+ ~shared_ptr() { dispose(); }
+
+ shared_ptr& operator=(const shared_ptr& r) {
+ share(r.px,r.pn);
+ return *this;
+ }
+
+#if !defined( BOOST_NO_MEMBER_TEMPLATES )
+ template
+ shared_ptr(const shared_ptr& r) : px(r.px) { // never throws
+ ++*(pn = r.pn);
+ }
+#ifndef BOOST_NO_AUTO_PTR
+ template
+ explicit shared_ptr(std::auto_ptr& r) {
+ pn = new long(1); // may throw
+ px = r.release(); // fix: moved here to stop leak if new throws
+ }
+#endif
+
+ template
+ shared_ptr& operator=(const shared_ptr& r) {
+ share(r.px,r.pn);
+ return *this;
+ }
+
+#ifndef BOOST_NO_AUTO_PTR
+ template
+ shared_ptr& operator=(std::auto_ptr& r) {
+ // code choice driven by guarantee of "no effect if new throws"
+ if (*pn == 1) { delete px; }
+ else { // allocate new reference counter
+ long * tmp = new long(1); // may throw
+ --*pn; // only decrement once danger of new throwing is past
+ pn = tmp;
+ } // allocate new reference counter
+ px = r.release(); // fix: moved here so doesn't leak if new throws
+ return *this;
+ }
+#endif
+#else
+#ifndef BOOST_NO_AUTO_PTR
+ explicit shared_ptr(std::auto_ptr& r) {
+ pn = new long(1); // may throw
+ px = r.release(); // fix: moved here to stop leak if new throws
+ }
+
+ shared_ptr& operator=(std::auto_ptr& r) {
+ // code choice driven by guarantee of "no effect if new throws"
+ if (*pn == 1) { delete px; }
+ else { // allocate new reference counter
+ long * tmp = new long(1); // may throw
+ --*pn; // only decrement once danger of new throwing is past
+ pn = tmp;
+ } // allocate new reference counter
+ px = r.release(); // fix: moved here so doesn't leak if new throws
+ return *this;
+ }
+#endif
+#endif
+
+ void reset(T* p=0) {
+ if ( px == p ) return; // fix: self-assignment safe
+ if (--*pn == 0) { delete px; }
+ else { // allocate new reference counter
+ try { pn = new long; } // fix: prevent leak if new throws
+ catch (...) {
+ ++*pn; // undo effect of --*pn above to meet effects guarantee
+ delete p;
+ throw;
+ } // catch
+ } // allocate new reference counter
+ *pn = 1;
+ px = p;
+ } // reset
+
+ T& operator*() const { return *px; } // never throws
+ T* operator->() const { return px; } // never throws
+ T* get() const { return px; } // never throws
+ #ifdef BOOST_SMART_PTR_CONVERSION
+ // get() is safer! Define BOOST_SMART_PTR_CONVERSION at your own risk!
+ operator T*() const { return px; } // never throws
+ #endif
+
+ long use_count() const { return *pn; } // never throws
+ bool unique() const { return *pn == 1; } // never throws
+
+ void swap(shared_ptr& other) // never throws
+ { std::swap(px,other.px); std::swap(pn,other.pn); }
+
+// Tasteless as this may seem, making all members public allows member templates
+// to work in the absence of member template friends. (Matthew Langston)
+// Don't split this line into two; that causes problems for some GCC 2.95.2 builds
+#if defined(BOOST_NO_MEMBER_TEMPLATES) || !defined( BOOST_NO_MEMBER_TEMPLATE_FRIENDS )
+ private:
+#endif
+
+ T* px; // contained pointer
+ long* pn; // ptr to reference counter
+
+// Don't split this line into two; that causes problems for some GCC 2.95.2 builds
+#if !defined( BOOST_NO_MEMBER_TEMPLATES ) && !defined( BOOST_NO_MEMBER_TEMPLATE_FRIENDS )
+ template friend class shared_ptr;
+#endif
+
+ void dispose() { if (--*pn == 0) { delete px; delete pn; } }
+
+ void share(T* rpx, long* rpn) {
+ if (pn != rpn) {
+ dispose();
+ px = rpx;
+ ++*(pn = rpn);
+ }
+ } // share
+}; // shared_ptr
+
+template
+ inline bool operator==(const shared_ptr& a, const shared_ptr& b)
+ { return a.get() == b.get(); }
+
+template
+ inline bool operator!=(const shared_ptr& a, const shared_ptr& b)
+ { return a.get() != b.get(); }
+
+// 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 shared_array {
+ public:
+ typedef T element_type;
+
+ explicit shared_array(T* p =0) : px(p) {
+ try { pn = new long(1); } // fix: prevent leak if new throws
+ catch (...) { delete [] p; throw; }
+ }
+
+ shared_array(const shared_array& r) : px(r.px) // never throws
+ { ++*(pn = r.pn); }
+
+ ~shared_array() { dispose(); }
+
+ shared_array& operator=(const shared_array& r) {
+ if (pn != r.pn) {
+ dispose();
+ px = r.px;
+ ++*(pn = r.pn);
+ }
+ return *this;
+ } // operator=
+
+ void reset(T* p=0) {
+ if ( px == p ) return; // fix: self-assignment safe
+ if (--*pn == 0) { delete [] px; }
+ else { // allocate new reference counter
+ try { pn = new long; } // fix: prevent leak if new throws
+ catch (...) {
+ ++*pn; // undo effect of --*pn above to meet effects guarantee
+ delete [] p;
+ throw;
+ } // catch
+ } // allocate new reference counter
+ *pn = 1;
+ px = p;
+ } // reset
+
+ T* get() const { return px; } // never throws
+ #ifdef BOOST_SMART_PTR_CONVERSION
+ // get() is safer! Define BOOST_SMART_PTR_CONVERSION at your own risk!
+ operator T*() const { return px; } // never throws
+ #else
+ T& operator[](std::size_t i) const { return px[i]; } // never throws
+ #endif
+
+ long use_count() const { return *pn; } // never throws
+ bool unique() const { return *pn == 1; } // never throws
+
+ void swap(shared_array& other) // never throws
+ { std::swap(px,other.px); std::swap(pn,other.pn); }
+
+ private:
+
+ T* px; // contained pointer
+ long* pn; // ptr to reference counter
+
+ void dispose() { if (--*pn == 0) { delete [] px; delete pn; } }
+
+}; // shared_array
+
+template
+ inline bool operator==(const shared_array& a, const shared_array& b)
+ { return a.get() == b.get(); }
+
+template
+ inline bool operator!=(const shared_array& a, const shared_array& b)
+ { return a.get() != b.get(); }
+
+} // namespace boost
+
+// specializations for things in namespace std -----------------------------//
+
+#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+namespace std {
+
+// Specialize std::swap to use the fast, non-throwing swap that's provided
+// as a member function instead of using the default algorithm which creates
+// a temporary and uses assignment.
+
+template
+ inline void swap(boost::shared_ptr& a, boost::shared_ptr& b)
+ { a.swap(b); }
+
+template
+ inline void swap(boost::shared_array& a, boost::shared_array& b)
+ { a.swap(b); }
+
+// Specialize std::less so we can use shared pointers and arrays as keys in
+// associative collections.
+
+// It's still a controversial question whether this is better than supplying
+// a full range of comparison operators (<, >, <=, >=).
+
+template
+ struct less< boost::shared_ptr >
+ : binary_function, boost::shared_ptr, bool>
+ {
+ bool operator()(const boost::shared_ptr& a,
+ const boost::shared_ptr& b) const
+ { return less()(a.get(),b.get()); }
+ };
+
+template
+ struct less< boost::shared_array >
+ : binary_function, boost::shared_array, bool>
+ {
+ bool operator()(const boost::shared_array& a,
+ const boost::shared_array& b) const
+ { return less()(a.get(),b.get()); }
+ };
+
+} // namespace std
+
+#endif // ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+#endif // BOOST_SMART_PTR_HPP
+
+
diff --git a/development/include/boost/timer.hpp b/development/include/boost/timer.hpp
new file mode 100644
index 0000000..6ccb436
--- /dev/null
+++ b/development/include/boost/timer.hpp
@@ -0,0 +1,57 @@
+// boost timer.hpp header file ---------------------------------------------//
+
+// (C) Copyright Beman Dawes 1994-99. Permission to copy, use, modify, sell and
+// distribute this software is granted provided this copyright notice appears
+// in all copies. This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+
+// See http://www.boost.org for most recent version including documentation.
+
+// Revision History
+// 25 Sep 99 elapsed_max() and elapsed_min() added (John Maddock)
+// 16 Jul 99 Second beta
+// 6 Jul 99 Initial boost version
+
+#ifndef BOOST_TIMER_HPP
+#define BOOST_TIMER_HPP
+
+#include
+
+namespace boost {
+
+// timer -------------------------------------------------------------------//
+
+// A timer object measures elapsed time.
+
+// It is recommended that implementations measure wall clock rather than CPU
+// time since the intended use is performance measurement on systems where
+// total elapsed time is more important than just process or CPU time.
+
+// Warnings: The maximum measurable elapsed time may well be only 596.5+ hours
+// due to implementation limitations. The accuracy of timings depends on the
+// accuracy of timing information provided by the underlying platform, and
+// this varies a great deal from platform to platform.
+
+class timer {
+
+public:
+ timer(); // postcondition: elapsed()==0
+ timer( const timer& src ); // post: elapsed()==src.elapsed()
+ ~timer();
+ timer& operator=( const timer& src ); // post: elapsed()==src.elapsed()
+ void restart(); // post: elapsed()==0
+ double elapsed() const; // return elapsed time in seconds
+
+ double elapsed_max() const; // return estimated maximum value for elapsed()
+ // Portability warning: elapsed_max() may return too high a value on systems
+ // where std::clock_t overflows or resets at surprising values.
+ double elapsed_min() const; // return minimum value for elapsed()
+
+private:
+ class _timer;
+ scoped_ptr<_timer> _imp; // hide implementation details
+ }; // timer
+
+} // namespace boost
+
+#endif // BOOST_TIMER_HPP
diff --git a/development/include/boost/type_traits.hpp b/development/include/boost/type_traits.hpp
new file mode 100644
index 0000000..04dcc68
--- /dev/null
+++ b/development/include/boost/type_traits.hpp
@@ -0,0 +1,42 @@
+// (C) Copyright Boost.org 2000. Permission to copy, use, modify, sell and
+// distribute this software is granted provided this copyright notice appears
+// in all copies. This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+
+// See http://www.boost.org for most recent version including documentation.
+// See boost/detail/type_traits.hpp and boost/detail/ob_type_traits.hpp
+// for full copyright notices.
+
+#ifndef BOOST_TYPE_TRAITS_HPP
+#define BOOST_TYPE_TRAITS_HPP
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+/**************************************************************************/
+
+//
+// undefine helper macro's:
+//
+#undef BOOST_IS_CLASS
+#undef BOOST_IS_ENUM
+#undef BOOST_IS_UNION
+#undef BOOST_IS_POD
+#undef BOOST_IS_EMPTY
+#undef BOOST_HAS_TRIVIAL_CONSTRUCTOR
+#undef BOOST_HAS_TRIVIAL_COPY
+#undef BOOST_HAS_TRIVIAL_ASSIGN
+#undef BOOST_HAS_TRIVIAL_DESTRUCTOR
+
+#endif // BOOST_TYPE_TRAITS_HPP
+
+
+
diff --git a/development/include/boost/type_traits/alignment_traits.hpp b/development/include/boost/type_traits/alignment_traits.hpp
new file mode 100644
index 0000000..b325017
--- /dev/null
+++ b/development/include/boost/type_traits/alignment_traits.hpp
@@ -0,0 +1,66 @@
+
+// (C) Copyright John Maddock 2000.
+// Permission to copy, use, modify, sell and
+// distribute this software is granted provided this copyright notice appears
+// in all copies. This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+
+//
+// defines alignment_of:
+
+#ifndef ALIGNMENT_TYPE_TRAITS_HPP
+#define ALIGNMENT_TYPE_TRAITS_HPP
+
+#include
+#ifndef BOOST_ICE_TYPE_TRAITS_HPP
+#include
+#endif
+
+namespace boost{
+//
+// get the alignment of some arbitrary type:
+namespace detail{
+
+template
+struct alignment_of_hack
+{
+ char c;
+ T t;
+ alignment_of_hack();
+};
+
+template
+struct alignment_logic
+{
+ BOOST_DECL_MC(std::size_t, value, A < S ? A : S);
+};
+
+} // namespace detail
+
+template
+struct alignment_of
+{
+ BOOST_DECL_MC(std::size_t, value,
+ (::boost::detail::alignment_logic<
+ sizeof(detail::alignment_of_hack) - sizeof(T),
+ sizeof(T)
+ >::value));
+};
+
+//
+// references have to be treated specially, assume
+// that a reference is just a special pointer:
+#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+template
+class alignment_of
+{
+public:
+ BOOST_DECL_MC(std::size_t, value, alignment_of::value);
+};
+#endif
+
+} // namespace boost
+
+#endif // ALIGNMENT_TYPE_TRAITS_HPP
+
+
diff --git a/development/include/boost/type_traits/arithmetic_traits.hpp b/development/include/boost/type_traits/arithmetic_traits.hpp
new file mode 100644
index 0000000..b3dd46b
--- /dev/null
+++ b/development/include/boost/type_traits/arithmetic_traits.hpp
@@ -0,0 +1,262 @@
+// (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000.
+// Permission to copy, use, modify, sell and
+// distribute this software is granted provided this copyright notice appears
+// in all copies. This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+// See http://www.boost.org for most recent version including documentation.
+//
+// defines traits classes for arithmetic types:
+// is_void, is_integral, is_float, is_arithmetic, is_fundamental.
+//
+
+
+#ifndef ARITHMETIC_TYPE_TRAITS_HPP
+#define ARITHMETIC_TYPE_TRAITS_HPP
+
+#ifndef BOOST_ICE_TYPE_TRAITS_HPP
+#include
+#endif
+#ifndef BOOST_FWD_TYPE_TRAITS_HPP
+#include
+#endif
+
+namespace boost{
+
+//* is a type T void - is_void
+template struct is_void{ BOOST_DECL_MC(bool, value, false); };
+template <> struct is_void{ BOOST_DECL_MC(bool, value, true); };
+
+//* is a type T an integral type described in the standard (3.9.1p3)
+template struct is_integral
+{ BOOST_DECL_MC(bool, value, false); };
+template <> struct is_integral
+{ BOOST_DECL_MC(bool, value, true); };
+template <> struct is_integral
+{ BOOST_DECL_MC(bool, value, true); };
+template <> struct is_integral
+{ BOOST_DECL_MC(bool, value, true); };
+template <> struct is_integral
+{ BOOST_DECL_MC(bool, value, true); };
+template <> struct is_integral
+{ BOOST_DECL_MC(bool, value, true); };
+template <> struct is_integral
+{ BOOST_DECL_MC(bool, value, true); };
+template <> struct is_integral
+{ BOOST_DECL_MC(bool, value, true); };
+template <> struct is_integral
+{ BOOST_DECL_MC(bool, value, true); };
+template <> struct is_integral
+{ BOOST_DECL_MC(bool, value, true); };
+#ifndef BOOST_MSVC
+template <> struct is_integral
+{ BOOST_DECL_MC(bool, value, true); };
+#endif
+template <> struct is_integral
+{ BOOST_DECL_MC(bool, value, true); };
+
+#ifdef ULLONG_MAX
+template <> struct is_integral
+{ BOOST_DECL_MC(bool, value, true); };
+template <> struct is_integral
+{ BOOST_DECL_MC(bool, value, true); };
+#endif
+#if defined(__BORLANDC__) || defined(_MSC_VER) && !defined(__MWERKS__)
+template <> struct is_integral
+{ BOOST_DECL_MC(bool, value, true); };
+template <> struct is_integral<__int64>
+{ BOOST_DECL_MC(bool, value, true); };
+#endif
+
+//* is a type T a floating-point type described in the standard (3.9.1p8)
+template struct is_float
+{ BOOST_DECL_MC(bool, value, false); };
+template <> struct is_float
+{ BOOST_DECL_MC(bool, value, true); };
+template <> struct is_float
+{ BOOST_DECL_MC(bool, value, true); };
+template <> struct is_float
+{ BOOST_DECL_MC(bool, value, true); };
+
+//
+// declare cv-qualified specialisations of these templates only
+// if BOOST_NO_CV_SPECIALIZATIONS is not defined:
+#ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS
+template <> struct is_void
+{ BOOST_DECL_MC(bool, value, true); };
+template <> struct is_void
+{ BOOST_DECL_MC(bool, value, true); };
+template <> struct is_void
+{ BOOST_DECL_MC(bool, value, true); };
+#endif
+#ifndef BOOST_NO_CV_SPECIALIZATIONS
+// const-variations:
+template <> struct is_integral
+{ BOOST_DECL_MC(bool, value, true); };
+template <> struct is_integral
+{ BOOST_DECL_MC(bool, value, true); };
+template <> struct is_integral
+{ BOOST_DECL_MC(bool, value, true); };
+template <> struct is_integral
+{ BOOST_DECL_MC(bool, value, true); };
+template <> struct is_integral
+{ BOOST_DECL_MC(bool, value, true); };
+template <> struct is_integral
+{ BOOST_DECL_MC(bool, value, true); };
+template <> struct is_integral
+{ BOOST_DECL_MC(bool, value, true); };
+template <> struct is_integral
+{ BOOST_DECL_MC(bool, value, true); };
+template <> struct is_integral
+{ BOOST_DECL_MC(bool, value, true); };
+#ifndef BOOST_MSVC
+template <> struct is_integral
+{ BOOST_DECL_MC(bool, value, true); };
+#endif
+template <> struct is_integral
+{ BOOST_DECL_MC(bool, value, true); };
+
+#ifdef ULLONG_MAX
+template <> struct is_integral
+{ BOOST_DECL_MC(bool, value, true); };
+template <> struct is_integral
+{ BOOST_DECL_MC(bool, value, true); };
+#endif // ULLONG_MAX
+#if defined(__BORLANDC__) || defined(_MSC_VER) && !defined(__MWERKS__)
+template <> struct is_integral
+{ BOOST_DECL_MC(bool, value, true); };
+template <> struct is_integral
+{ BOOST_DECL_MC(bool, value, true); };
+#endif //__int64
+
+template <> struct is_float
+{ BOOST_DECL_MC(bool, value, true); };
+template <> struct is_float
+{ BOOST_DECL_MC(bool, value, true); };
+template <> struct is_float
+{ BOOST_DECL_MC(bool, value, true); };
+
+// volatile-variations:
+template <> struct is_integral
+{ BOOST_DECL_MC(bool, value, true); };
+template <> struct is_integral
+{ BOOST_DECL_MC(bool, value, true); };
+template <> struct is_integral
+{ BOOST_DECL_MC(bool, value, true); };
+template <> struct is_integral
+{ BOOST_DECL_MC(bool, value, true); };
+template <> struct is_integral
+{ BOOST_DECL_MC(bool, value, true); };
+template <> struct is_integral
+{ BOOST_DECL_MC(bool, value, true); };
+template <> struct is_integral
+{ BOOST_DECL_MC(bool, value, true); };
+template <> struct is_integral
+{ BOOST_DECL_MC(bool, value, true); };
+template <> struct is_integral
+{ BOOST_DECL_MC(bool, value, true); };
+#ifndef BOOST_MSVC
+template <> struct is_integral
+{ BOOST_DECL_MC(bool, value, true); };
+#endif
+template <> struct is_integral
+{ BOOST_DECL_MC(bool, value, true); };
+
+#ifdef ULLONG_MAX
+template <> struct is_integral
+{ BOOST_DECL_MC(bool, value, true); };
+template <> struct is_integral
+{ BOOST_DECL_MC(bool, value, true); };
+#endif // ULLONG_MAX
+#if defined(__BORLANDC__) || defined(_MSC_VER) && !defined(__MWERKS__)
+template <> struct is_integral
+{ BOOST_DECL_MC(bool, value, true); };
+template <> struct is_integral
+{ BOOST_DECL_MC(bool, value, true); };
+#endif //__int64
+
+template <> struct is_float
+{ BOOST_DECL_MC(bool, value, true); };
+template <> struct is_float