$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r62884 - in sandbox/SOC/2010/bit_masks: boost/integer/details/bft lib/integer/test lib/integer/test/bft_testing lib/integer/test/bft_testing/compile_fail lib/integer/test/bft_testing/compile_pass
From: bbartmanboost_at_[hidden]
Date: 2010-06-12 18:52:14
Author: bbartman
Date: 2010-06-12 18:52:13 EDT (Sat, 12 Jun 2010)
New Revision: 62884
URL: http://svn.boost.org/trac/boost/changeset/62884
Log:
working on implementing preconditions and making sure that those preconditions work and don't breat existing things
Text files modified: 
   sandbox/SOC/2010/bit_masks/boost/integer/details/bft/arg_parse_impl.hpp                       |    23 +++++++++++++++++++++--                 
   sandbox/SOC/2010/bit_masks/lib/integer/test/Jamfile.v2                                        |     2 ++                                      
   sandbox/SOC/2010/bit_masks/lib/integer/test/bft_testing/compile_fail/one_name_two_members.cpp |    20 ++++++++++++++++++++                    
   sandbox/SOC/2010/bit_masks/lib/integer/test/bft_testing/compile_pass/bft_member_max_out.cpp   |     4 ++--                                    
   sandbox/SOC/2010/bit_masks/lib/integer/test/bft_testing/ref_type_testing.cpp                  |     1 +                                       
   5 files changed, 46 insertions(+), 4 deletions(-)
Modified: sandbox/SOC/2010/bit_masks/boost/integer/details/bft/arg_parse_impl.hpp
==============================================================================
--- sandbox/SOC/2010/bit_masks/boost/integer/details/bft/arg_parse_impl.hpp	(original)
+++ sandbox/SOC/2010/bit_masks/boost/integer/details/bft/arg_parse_impl.hpp	2010-06-12 18:52:13 EDT (Sat, 12 Jun 2010)
@@ -11,6 +11,9 @@
 #include <boost/mpl/push_back.hpp>
 #include <boost/mpl/plus.hpp>
 #include <boost/mpl/if.hpp>
+#include <boost/mpl/find_if.hpp>
+#include <boost/integer/details/bft/name_lookup.hpp>
+
 
 namespace boost { namespace details {
 
@@ -72,6 +75,9 @@
     FieldVector,
     Offset >
 {
+    // make sure that the storage type is not specifed twice
+    BOOST_STATIC_ASSERT(( is_same<StoragePolicy,mpl::void_>::value ));
+
     typedef typename storage<
         StorageType,
         AllocationPolicy
@@ -99,8 +105,6 @@
  *      (This may result in additional overhead during compile time ).
  *      Currently not enforced, will take more time then I have at the moment.
  */
-
-// TODO: Implement Precondition 1 listed above!
 template <  typename StoragePolicy,
             typename FieldVector,
             std::size_t FieldWidth,
@@ -118,6 +122,21 @@
     FieldVector,
     Offset >
 {
+
+    BOOST_STATIC_ASSERT((
+        is_same<
+            typename mpl::find_if<
+                FieldVector,
+                details::match_name<
+                    typename mpl::_1,
+                    NameType
+                >
+            >::type,
+            typename mpl::end<
+                FieldVector
+            >::type
+        >::value            
+    ));
     typedef member< ReturnType, NameType, FieldWidth > param;
 
     // typedef 
Modified: sandbox/SOC/2010/bit_masks/lib/integer/test/Jamfile.v2
==============================================================================
--- sandbox/SOC/2010/bit_masks/lib/integer/test/Jamfile.v2	(original)
+++ sandbox/SOC/2010/bit_masks/lib/integer/test/Jamfile.v2	2010-06-12 18:52:13 EDT (Sat, 12 Jun 2010)
@@ -30,6 +30,8 @@
         [ compile-fail bft_testing/compile_fail/non_pod_storage_type.cpp ]
         [ compile-fail bft_testing/compile_fail/bft_storage_width_acceded.cpp ]
         [ compile-fail bft_testing/compile_fail/no_array_types.cpp ]
+        [ compile-fail bft_testing/compile_fail/set_storage_more_then_once.cpp ]
+        [ compile-fail bft_testing/compile_fail/one_name_two_members.cpp ]
         [ compile bft_testing/compile_pass/bft_member_max_out.cpp ]
         [ run bitfield_tuple_test.cpp ]
         [ run bft_testing/ref_type_testing.cpp ]
Modified: sandbox/SOC/2010/bit_masks/lib/integer/test/bft_testing/compile_fail/one_name_two_members.cpp
==============================================================================
--- sandbox/SOC/2010/bit_masks/lib/integer/test/bft_testing/compile_fail/one_name_two_members.cpp	(original)
+++ sandbox/SOC/2010/bit_masks/lib/integer/test/bft_testing/compile_fail/one_name_two_members.cpp	2010-06-12 18:52:13 EDT (Sat, 12 Jun 2010)
@@ -0,0 +1,20 @@
+//  Copyright 2010 Brian Bartman.
+//  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)
+
+
+#include <boost/integer/bitfield_tuple.hpp>
+
+using namespace boost;
+struct red;
+
+
+// Fails because more then one member has the same name
+typedef bitfield_tuple<storage<int>, member<int,red,3>, member<int,red,3> > bft;
+
+
+int main() {
+    bft();
+    return 0;
+}
Modified: sandbox/SOC/2010/bit_masks/lib/integer/test/bft_testing/compile_pass/bft_member_max_out.cpp
==============================================================================
--- sandbox/SOC/2010/bit_masks/lib/integer/test/bft_testing/compile_pass/bft_member_max_out.cpp	(original)
+++ sandbox/SOC/2010/bit_masks/lib/integer/test/bft_testing/compile_pass/bft_member_max_out.cpp	2010-06-12 18:52:13 EDT (Sat, 12 Jun 2010)
@@ -8,7 +8,7 @@
 
 using namespace boost;
 struct red { };
-
+struct pink;
 // this needs to pass because its a basic declaration and I should asume people
 // arn't going to be all that happy if things don't work the way the should
 
@@ -17,7 +17,7 @@
 typedef bitfield_tuple<
     storage<int>,
     member<int, red, 15u>,
-    member<int, red, 17u>
+    member<int, pink, 17u>
 > bft;
 
 
Modified: sandbox/SOC/2010/bit_masks/lib/integer/test/bft_testing/ref_type_testing.cpp
==============================================================================
--- sandbox/SOC/2010/bit_masks/lib/integer/test/bft_testing/ref_type_testing.cpp	(original)
+++ sandbox/SOC/2010/bit_masks/lib/integer/test/bft_testing/ref_type_testing.cpp	2010-06-12 18:52:13 EDT (Sat, 12 Jun 2010)
@@ -32,6 +32,7 @@
 
 typedef details::bitfield_element_< char, 
 red, mpl::size_t<24>, mpl::size_t<8> >          element_5;
+
 int main() {
 
     int data_storage(0);