$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r54359 - in sandbox/monotonic: boost/object_model boost/object_model/detail boost/object_model/generic boost/object_model/type libs/monotonic/test/Tests libs/object_model/src libs/object_model/src/generic libs/object_model/test
From: christian.schladetsch_at_[hidden]
Date: 2009-06-25 21:14:24
Author: cschladetsch
Date: 2009-06-25 21:14:21 EDT (Thu, 25 Jun 2009)
New Revision: 54359
URL: http://svn.boost.org/trac/boost/changeset/54359
Log:
added type/specifier.hpp and type/modifier.hpp
Added:
   sandbox/monotonic/boost/object_model/detail/make_method.hpp   (contents, props changed)
   sandbox/monotonic/boost/object_model/generic/method.hpp   (contents, props changed)
   sandbox/monotonic/boost/object_model/string.hpp   (contents, props changed)
   sandbox/monotonic/boost/object_model/type/modifiers.hpp   (contents, props changed)
   sandbox/monotonic/boost/object_model/type/signature.hpp   (contents, props changed)
   sandbox/monotonic/boost/object_model/type/specifier.hpp   (contents, props changed)
Text files modified: 
   sandbox/monotonic/boost/object_model/builder.hpp            |    11 ++++++--                                
   sandbox/monotonic/boost/object_model/dictionary.hpp         |    13 ++++++++++                              
   sandbox/monotonic/boost/object_model/generic/object.hpp     |     4 +++                                     
   sandbox/monotonic/boost/object_model/generic/storage.hpp    |    11 +++++++++                               
   sandbox/monotonic/libs/monotonic/test/Tests/Tests.vcproj    |     8 +++++                                   
   sandbox/monotonic/libs/monotonic/test/Tests/tests.cpp       |    48 ++++++++++++++++++++++++++++++++++++++++
   sandbox/monotonic/libs/object_model/src/generic/object.cpp  |    25 +++++++++++++-------                    
   sandbox/monotonic/libs/object_model/src/object_model.vcproj |    24 ++++++++++++++++++++                    
   sandbox/monotonic/libs/object_model/test/basic_tests.cpp    |    18 ++++++++++++--                          
   9 files changed, 146 insertions(+), 16 deletions(-)
Modified: sandbox/monotonic/boost/object_model/builder.hpp
==============================================================================
--- sandbox/monotonic/boost/object_model/builder.hpp	(original)
+++ sandbox/monotonic/boost/object_model/builder.hpp	2009-06-25 21:14:21 EDT (Thu, 25 Jun 2009)
@@ -20,11 +20,10 @@
         typedef type::traits<T> traits;
 
 private:
-	registry<Allocator> ®
-	klass<T> *my_klass;
+	klass<T, Allocator> *my_klass;
 
 public:
-	builder(registry<Allocator> &R) : reg(R)
+	builder(registry<Allocator> ®)
         {
                 my_klass = reg.register_class<T>();
         }
@@ -48,6 +47,12 @@
         } methods;
 };
 
+template <class T, class Al>
+builder<T,Al> class_builder(registry<Al> ®)
+{
+	return builder<T,Al>(reg);
+}
+
 BOOST_OM_END
 
 #include <boost/object_model/detail/postfix.hpp>
Added: sandbox/monotonic/boost/object_model/detail/make_method.hpp
==============================================================================
Modified: sandbox/monotonic/boost/object_model/dictionary.hpp
==============================================================================
--- sandbox/monotonic/boost/object_model/dictionary.hpp	(original)
+++ sandbox/monotonic/boost/object_model/dictionary.hpp	2009-06-25 21:14:21 EDT (Thu, 25 Jun 2009)
@@ -11,6 +11,7 @@
 
 #include <map>
 #include <boost/object_model/detail/prefix.hpp>
+#include <boost/object_model/label.hpp>
 
 BOOST_OM_BEGIN
 
@@ -19,6 +20,18 @@
         typedef std::map<label, generic::object> contents_type;
 
         contents_type contents;
+
+	void set(label const &name, generic::object const &obj)
+	{
+		contents[name] = obj;
+	}
+	generic::object get(label const &name) const
+	{
+		contents_type::const_iterator iter = contents.find(name);
+		if (iter == contents.end())
+			return null_object;
+		return iter->second;
+	}
 };
 
 BOOST_OM_END
Added: sandbox/monotonic/boost/object_model/generic/method.hpp
==============================================================================
--- (empty file)
+++ sandbox/monotonic/boost/object_model/generic/method.hpp	2009-06-25 21:14:21 EDT (Thu, 25 Jun 2009)
@@ -0,0 +1,33 @@
+// (C) 2009 Christian Schladetsch
+//
+//  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)
+
+// documentation at https://svn.boost.org/svn/boost/sandbox/monotonic/libs/object_model/doc/index.html
+// sandbox at https://svn.boost.org/svn/boost/sandbox/monotonic/object_model/
+
+#ifndef BOOST_OBJECT_MODEL_(X)_HPP
+#define BOOST_OBJECT_MODEL_(X)_HPP
+
+#include <boost/object_model/detail/prefix.hpp>
+#include <boost/object_model/label.hpp>
+#include <boost/object_model/type/signature.hpp>
+
+BOOST_OM_BEGIN
+
+namespace generic
+{
+	struct method
+	{
+		label name;
+		signature sig;
+	};
+}
+
+BOOST_OM_END
+
+#include <boost/object_model/detail/postfix.hpp>
+
+#endif // BOOST_OBJECT_MODEL_(X)_HPP
+
+//EOF
Modified: sandbox/monotonic/boost/object_model/generic/object.hpp
==============================================================================
--- sandbox/monotonic/boost/object_model/generic/object.hpp	(original)
+++ sandbox/monotonic/boost/object_model/generic/object.hpp	2009-06-25 21:14:21 EDT (Thu, 25 Jun 2009)
@@ -33,6 +33,7 @@
                 template <class T, class Al> friend struct object_model::klass;
 
                 void construct(registry &, klass const &, handle);
+		storage &get_storage();
 
         public:
                 klass const &get_class() const;
@@ -48,6 +49,9 @@
                 {
                         return get_type_number() == type::traits<T>::type_number;
                 }
+
+		void set(label const &name, object const &obj);
+		object get(label const &name) const;
         };
 
         struct const_object : object_base
Modified: sandbox/monotonic/boost/object_model/generic/storage.hpp
==============================================================================
--- sandbox/monotonic/boost/object_model/generic/storage.hpp	(original)
+++ sandbox/monotonic/boost/object_model/generic/storage.hpp	2009-06-25 21:14:21 EDT (Thu, 25 Jun 2009)
@@ -18,7 +18,18 @@
 {
         struct const_storage : const_object
         {
+	protected:
                 dictionary dict;
+
+	public:
+		void set(label const &name, generic::object const &obj)
+		{
+			dict.set(name, obj);
+		}
+		generic::object get(label const &name) const
+		{
+			return dict.get(name);
+		}
         };
 
         struct storage : const_storage
Added: sandbox/monotonic/boost/object_model/string.hpp
==============================================================================
--- (empty file)
+++ sandbox/monotonic/boost/object_model/string.hpp	2009-06-25 21:14:21 EDT (Thu, 25 Jun 2009)
@@ -0,0 +1,37 @@
+// (C) 2009 Christian Schladetsch
+//
+//  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)
+
+// documentation at https://svn.boost.org/svn/boost/sandbox/monotonic/libs/object_model/doc/index.html
+// sandbox at https://svn.boost.org/svn/boost/sandbox/monotonic/object_model/
+
+#ifndef BOOST_OBJECT_MODEL_STRING_HPP
+#define BOOST_OBJECT_MODEL_STRING_HPP
+
+#include <boost/object_model/detail/prefix.hpp>
+
+BOOST_OM_BEGIN
+
+template <class Alloc = default_allocator, class Ch = char, class Tr = std::char_traits<Ch> >
+struct string
+{
+	typedef std::basic_string<Ch, Tr, Alloc> implementation;
+	typedef typename implementation::value_type value_type;
+	typedef typename implementation::iterator iterator;
+	typedef typename implementation::const_iterator const_iterator;
+
+private:
+	implementation impl;
+
+public:
+
+};
+
+BOOST_OM_END
+
+#include <boost/object_model/detail/postfix.hpp>
+
+#endif // BOOST_OBJECT_MODEL_STRING_HPP
+
+//EOF
Added: sandbox/monotonic/boost/object_model/type/modifiers.hpp
==============================================================================
--- (empty file)
+++ sandbox/monotonic/boost/object_model/type/modifiers.hpp	2009-06-25 21:14:21 EDT (Thu, 25 Jun 2009)
@@ -0,0 +1,50 @@
+// (C) 2009 Christian Schladetsch
+//
+//  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)
+
+// documentation at https://svn.boost.org/svn/boost/sandbox/monotonic/libs/object_model/doc/index.html
+// sandbox at https://svn.boost.org/svn/boost/sandbox/monotonic/object_model/
+
+#ifndef BOOST_OBJECT_MODEL_TYPE_MODIFIER_HPP
+#define BOOST_OBJECT_MODEL_TYPE_MODIFIER_HPP
+
+#include <bitset>
+#include <boost/object_model/detail/prefix.hpp>
+
+BOOST_OM_BEGIN
+
+namespace type
+{
+	struct modifiers
+	{
+		typedef std::bitset<3> flags_type;
+		typedef unsigned long flags_value;
+		enum
+		{
+			None = 0,
+			Const = 1,
+			Reference = 2,
+		};
+	private:
+		flags_type flags;
+
+	public:
+		modifiers() : flags((flags_value)0) { }
+		modifiers(flags_value N) : flags(N) { }
+
+		bool is_const() const { return flags[Const]; }
+		bool is_reference() const { return flags[Reference]; }
+		void set_const(bool B = true) { flags[Const] = B; }
+		void set_reference(bool B = true) { flags[Reference] = B; } 
+		void set_const_reference(bool B = true) { set_const(B); set_reference(B); }	
+	};
+}
+
+BOOST_OM_END
+
+#include <boost/object_model/detail/postfix.hpp>
+
+#endif // BOOST_OBJECT_MODEL_TYPE_MODIFIER_HPP
+
+//EOF
Added: sandbox/monotonic/boost/object_model/type/signature.hpp
==============================================================================
--- (empty file)
+++ sandbox/monotonic/boost/object_model/type/signature.hpp	2009-06-25 21:14:21 EDT (Thu, 25 Jun 2009)
@@ -0,0 +1,29 @@
+// (C) 2009 Christian Schladetsch
+//
+//  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)
+
+// documentation at https://svn.boost.org/svn/boost/sandbox/monotonic/libs/object_model/doc/index.html
+// sandbox at https://svn.boost.org/svn/boost/sandbox/monotonic/object_model/
+
+#ifndef BOOST_OBJECT_MODEL_TYPE_SIGNATURE_HPP
+#define BOOST_OBJECT_MODEL_TYPE_SIGNATURE_HPP
+
+#include <boost/object_model/detail/prefix.hpp>
+
+BOOST_OM_BEGIN
+
+namespace type
+{
+	struct signature
+	{
+	};
+}
+
+BOOST_OM_END
+
+#include <boost/object_model/detail/postfix.hpp>
+
+#endif // BOOST_OBJECT_MODEL_TYPE_SIGNATURE_HPP
+
+//EOF
Added: sandbox/monotonic/boost/object_model/type/specifier.hpp
==============================================================================
--- (empty file)
+++ sandbox/monotonic/boost/object_model/type/specifier.hpp	2009-06-25 21:14:21 EDT (Thu, 25 Jun 2009)
@@ -0,0 +1,58 @@
+// (C) 2009 Christian Schladetsch
+//
+//  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)
+
+// documentation at https://svn.boost.org/svn/boost/sandbox/monotonic/libs/object_model/doc/index.html
+// sandbox at https://svn.boost.org/svn/boost/sandbox/monotonic/object_model/
+
+#ifndef BOOST_OBJECT_MODEL_TYPE_SPECIFIER_HPP
+#define BOOST_OBJECT_MODEL_TYPE_SPECIFIER_HPP
+
+#include <boost/object_model/detail/prefix.hpp>
+#include <boost/object_model/string.hpp>
+#include <boost/object_model/type/modifiers.hpp>
+
+BOOST_OM_BEGIN
+
+namespace type
+{
+	struct specifier : modifiers
+	{
+		number type_number;
+
+		specifier(number N = number::None, modifiers M = modifiers()) : modifiers(M), type_number(N) { }
+
+		number get_number() const { return type_number; }
+
+		//template <class Alloc, template <class Al = Alloc, class Ch = char, class Tr = std::char_traits<Ch> > String = string>
+		//bool to_string(const registry<Alloc> &, string<Alloc> ) const;
+	};
+
+	template <class T>
+	struct is_const : mpl::true_ { };
+
+	template <class T>
+	struct is_const<const T> : mpl::true_ { };
+
+	template <class T>
+	struct is_const<const T&> : mpl::true_ { };
+
+	template <class T>
+	specifier make_specifier()
+	{
+		modifiers mods;
+		mods.set_const(is_const<T>::value);	// what is wrong with boost::is_const<T> ??
+		mods.set_reference(boost::is_reference<T>::value);
+		return specifier(traits<typename base_type<T>::Type>::type_number, mods);
+	};
+
+} // namespace type
+
+BOOST_OM_END
+
+#include <boost/object_model/detail/postfix.hpp>
+
+#endif // BOOST_OBJECT_MODEL_TYPE_SPECIFIER_HPP
+
+//EOF
Modified: sandbox/monotonic/libs/monotonic/test/Tests/Tests.vcproj
==============================================================================
--- sandbox/monotonic/libs/monotonic/test/Tests/Tests.vcproj	(original)
+++ sandbox/monotonic/libs/monotonic/test/Tests/Tests.vcproj	2009-06-25 21:14:21 EDT (Thu, 25 Jun 2009)
@@ -118,14 +118,20 @@
                         <Tool
                                 Name="VCCLCompilerTool"
                                 Optimization="2"
+				InlineFunctionExpansion="2"
                                 EnableIntrinsicFunctions="true"
+				FavorSizeOrSpeed="1"
                                 AdditionalIncludeDirectories="$(ProjectDir)/../../../..;C:\Lib\tbb21_20080605oss\include"
                                 PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+				ExceptionHandling="1"
                                 RuntimeLibrary="2"
                                 EnableFunctionLevelLinking="true"
+				EnableEnhancedInstructionSet="2"
+				FloatingPointModel="2"
+				OpenMP="true"
                                 UsePrecompiledHeader="0"
                                 WarningLevel="3"
-				DebugInformationFormat="3"
+				DebugInformationFormat="0"
                         />
                         <Tool
                                 Name="VCManagedResourceCompilerTool"
Modified: sandbox/monotonic/libs/monotonic/test/Tests/tests.cpp
==============================================================================
--- sandbox/monotonic/libs/monotonic/test/Tests/tests.cpp	(original)
+++ sandbox/monotonic/libs/monotonic/test/Tests/tests.cpp	2009-06-25 21:14:21 EDT (Thu, 25 Jun 2009)
@@ -12,9 +12,11 @@
 #include <boost/monotonic/allocator.hpp>
 #include <boost/interprocess/containers/list.hpp>
 #include <boost/monotonic/reclaimable_storage.hpp>
+#include <boost/iterator.hpp>
 
 #define BOOST_TEST_MODULE basic_test test
 #include <boost/test/unit_test.hpp>
+#include <boost/timer.hpp>
 
 
 template <class II>
@@ -72,6 +74,52 @@
 
 int Tracked::count = 0;
 
+template <class Number>
+Number work(size_t iterations, std::vector<Number> const &data)
+{
+	Number sum = 0;
+	size_t size = data.size();
+	for (size_t i = 0; i < iterations; ++i)
+	{
+		Number a = data[i % size];
+		Number b = data[(i + 500)%size];
+		sum += a * b;
+	}
+	return sum;
+}
+
+void test_floats()
+{
+	size_t iterations = 1000*1000*100;
+	size_t outter = 1;//00;//0*1000*10;
+	double int_t = 0;
+	double float_t = 0;
+
+	size_t size = 100000;
+	std::vector<int> ints(size);
+    srand(42);
+	generate_n(ints.begin(), size, rand);
+	std::vector<float> floats(size);
+    srand(42);
+	generate_n(floats.begin(), size, rand);
+
+	boost::timer int_timer;
+	int int_sum = 0;
+	for (size_t n = 0; n < outter; ++n)
+	{
+		int_sum += work(iterations, ints);
+	}
+	int_t = int_timer.elapsed();
+	boost::timer float_timer;
+	float float_sum = 0;
+	for (size_t n = 0; n < outter; ++n)
+	{
+		float_sum += work(iterations, floats);
+	}
+	float_t = float_timer.elapsed();
+	cout << int_t << ", " << float_t << "; " << int_sum << ", " << float_sum << endl;
+}
+
 BOOST_AUTO_TEST_CASE(test_reclaimable)
 {
         std::vector<Tracked, monotonic::allocator<Tracked, heap_region_tag> > vec;
Modified: sandbox/monotonic/libs/object_model/src/generic/object.cpp
==============================================================================
--- sandbox/monotonic/libs/object_model/src/generic/object.cpp	(original)
+++ sandbox/monotonic/libs/object_model/src/generic/object.cpp	2009-06-25 21:14:21 EDT (Thu, 25 Jun 2009)
@@ -10,14 +10,13 @@
 #include <boost/object_model/generic/class.hpp>
 #include <boost/object_model/generic/storage.hpp>
 #include <boost/object_model/registry.hpp>
+#include <boost/object_model/label.hpp>
 
 BOOST_OM_BEGIN
 
 namespace generic
 {
-	//---------------------------------------------------
         // object_base
-	//---------------------------------------------------
 
         object_base::object_base() 
                 : reg(0), type(0), number(0)
@@ -75,9 +74,22 @@
                 return get_registry().get_storage(get_handle());
         }
 
-	//---------------------------------------------------
+	storage &object_base::get_storage()
+	{
+		return get_registry().get_storage(get_handle());
+	}
+
+	void object_base::set(label const &name, object const &obj)
+	{
+		get_storage().set(name, obj);
+	}
+
+	object object_base::get(label const &name) const
+	{
+		return get_storage().get(name);
+	}
+
         // const_object
-	//---------------------------------------------------
 
         //const_object::const_object()
         //{
@@ -91,10 +103,7 @@
         //{
         //}
 
-
-	//---------------------------------------------------
         // mutable_object
-	//---------------------------------------------------
 
         mutable_object::mutable_object()
         {
@@ -109,9 +118,7 @@
                 return get_registry().get_storage(get_handle());
         }
 
-	//---------------------------------------------------
         // object
-	//---------------------------------------------------
 
         object::object() : konst(false) { }
 
Modified: sandbox/monotonic/libs/object_model/src/object_model.vcproj
==============================================================================
--- sandbox/monotonic/libs/object_model/src/object_model.vcproj	(original)
+++ sandbox/monotonic/libs/object_model/src/object_model.vcproj	2009-06-25 21:14:21 EDT (Thu, 25 Jun 2009)
@@ -294,6 +294,10 @@
 					>
                                 </File>
                                 <File
+					RelativePath="..\..\..\boost\object_model\string.hpp"
+					>
+				</File>
+				<File
                                         RelativePath="..\..\..\boost\object_model\template_header.hpp"
 					>
                                 </File>
@@ -305,6 +309,10 @@
 						>
                                         </File>
                                         <File
+						RelativePath="..\..\..\boost\object_model\detail\make_method.hpp"
+						>
+					</File>
+					<File
                                                 RelativePath="..\..\..\boost\object_model\detail\postfix.hpp"
 						>
                                         </File>
@@ -321,10 +329,22 @@
 						>
                                         </File>
                                         <File
+						RelativePath="..\..\..\boost\object_model\type\modifiers.hpp"
+						>
+					</File>
+					<File
                                                 RelativePath="..\..\..\boost\object_model\type\number.hpp"
 						>
                                         </File>
                                         <File
+						RelativePath="..\..\..\boost\object_model\type\signature.hpp"
+						>
+					</File>
+					<File
+						RelativePath="..\..\..\boost\object_model\type\specifier.hpp"
+						>
+					</File>
+					<File
                                                 RelativePath="..\..\..\boost\object_model\type\traits.hpp"
 						>
                                         </File>
@@ -341,6 +361,10 @@
 						>
                                         </File>
                                         <File
+						RelativePath="..\..\..\boost\object_model\generic\method.hpp"
+						>
+					</File>
+					<File
                                                 RelativePath="..\..\..\boost\object_model\generic\object.hpp"
 						>
                                         </File>
Modified: sandbox/monotonic/libs/object_model/test/basic_tests.cpp
==============================================================================
--- sandbox/monotonic/libs/object_model/test/basic_tests.cpp	(original)
+++ sandbox/monotonic/libs/object_model/test/basic_tests.cpp	2009-06-25 21:14:21 EDT (Thu, 25 Jun 2009)
@@ -19,11 +19,22 @@
 #include <boost/object_model/builder.hpp>
 #include <boost/object_model/type/traits.hpp>
 #include <boost/object_model/dereference.hpp>
+#include <boost/object_model/type/specifier.hpp>
+#include <boost/object_model/string.hpp>
 
 using namespace std;
 using namespace boost;
 namespace om = boost::object_model;
 
+BOOST_AUTO_TEST_CASE(test_type_specifier)
+{
+	om::registry<> reg;
+	reg.register_class<void>();
+	reg.register_class<int>();
+
+	//om::string<> text = type::make_specifier<int>().to_string(reg);
+}
+
 BOOST_AUTO_TEST_CASE(test_type_traits)
 {
         BOOST_STATIC_ASSERT(om::type::traits<int>::type_number == om::type::number::Int);
@@ -58,10 +69,13 @@
         om::registry<> reg;
         reg.register_class<int>();
         BOOST_ASSERT(reg.has_class<int>());
+
         om::object<int> num = reg.create<int>();
         BOOST_ASSERT(num.exists());
         BOOST_ASSERT(num.is_type<int>());
+	
         *num = 42;
+	
         BOOST_ASSERT(om::deref<int>(num) == 42);
 }
 
@@ -83,10 +97,8 @@
 
 BOOST_AUTO_TEST_CASE(test_builder)
 {
-	return;
-
         om::registry<> reg;
-	om::builder<Foo>(reg)
+	om::class_builder<Foo>(reg)
                 .methods
                         ("bar", &Foo::bar)
                         ("spam", &Foo::spam)