$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r63835 - in sandbox/SOC/2010/bit_masks: boost/bitfield boost/integer/details/bft lib/integer/test/bft_testing
From: bbartmanboost_at_[hidden]
Date: 2010-07-10 21:15:18
Author: bbartman
Date: 2010-07-10 21:15:16 EDT (Sat, 10 Jul 2010)
New Revision: 63835
URL: http://svn.boost.org/trac/boost/changeset/63835
Log:
completed some work on the make bitfield tuple function I did encounter an error which is going to take some time to fix.
Text files modified: 
   sandbox/SOC/2010/bit_masks/boost/bitfield/bitfield.hpp                       |     2                                         
   sandbox/SOC/2010/bit_masks/boost/integer/details/bft/make_bitfield_tuple.hpp |    42 ++++++++++++++++++++++++++++++++++++++++
   sandbox/SOC/2010/bit_masks/lib/integer/test/bft_testing/make_bft_testing.cpp |    34 +++++++++++++++++++++++++++++++         
   3 files changed, 76 insertions(+), 2 deletions(-)
Modified: sandbox/SOC/2010/bit_masks/boost/bitfield/bitfield.hpp
==============================================================================
--- sandbox/SOC/2010/bit_masks/boost/bitfield/bitfield.hpp	(original)
+++ sandbox/SOC/2010/bit_masks/boost/bitfield/bitfield.hpp	2010-07-10 21:15:16 EDT (Sat, 10 Jul 2010)
@@ -18,7 +18,7 @@
 
 #include <cassert>
 #include <limits>
-#include <netinet/in.h>
+
 
 namespace boost { namespace integer {
     
Modified: sandbox/SOC/2010/bit_masks/boost/integer/details/bft/make_bitfield_tuple.hpp
==============================================================================
--- sandbox/SOC/2010/bit_masks/boost/integer/details/bft/make_bitfield_tuple.hpp	(original)
+++ sandbox/SOC/2010/bit_masks/boost/integer/details/bft/make_bitfield_tuple.hpp	2010-07-10 21:15:16 EDT (Sat, 10 Jul 2010)
@@ -6,11 +6,50 @@
 
 #ifndef BOOST_BFT_MAKE_BFT_HPP
 #define BOOST_BFT_MAKE_BFT_HPP
+#include <boost/config.hpp>
 #include <cstddef>
 
 
 namespace boost { namespace details {
+#ifdef BOOST_MSVC
+    
+template <typename T>
+struct bft_create_param_fix_return_type {
+    typedef T type;
+};
+
+template <typename ReturnType, typename NameType, typename Offset, typename Width>
+struct bft_create_param_fix_return_type< bitfield_element<ReturnType,NameType,Offset,Width> >{
+    typedef ReturnType type;
+};
+
+
+
+template <typename BitfieldTuple, std::size_t Index>
+struct get_create_parameter {
+    // check for valid Index.
+    typedef typename mpl::less<
+        mpl::size_t<Index>,
+        typename mpl::size<
+            typename BitfieldTuple::members
+        >::type
+    >::type                 is_valid_index;
+    
+    typedef typename mpl::if_<
+        is_valid_index,
+        typename mpl::at_c<
+            typename BitfieldTuple::members,
+            Index
+        >::type,
+        mpl::void_*
+    >::type                 element_type;
+
+    typedef typename bft_create_param_fix_return_type<element_type>::type type;
+};
 
+
+
+#else
 /** Used to generate a function parameter for the create function used
  *  with make_bitfield_tuple
  */
@@ -24,6 +63,7 @@
     typedef mpl::void_*  type;
 };
 
+
 template <typename BitfieldTuple, std::size_t Index>
 struct get_create_parameter {
     typedef typename mpl::if_<
@@ -43,6 +83,8 @@
     >::type                     type;
 };
 
+#endif
+
 /** This is a function which is used to assign a value into a bitfield_tuple
  *  as well as remove the actual mpl::void_* from the parameter list through
  *  specialization.
Modified: sandbox/SOC/2010/bit_masks/lib/integer/test/bft_testing/make_bft_testing.cpp
==============================================================================
--- sandbox/SOC/2010/bit_masks/lib/integer/test/bft_testing/make_bft_testing.cpp	(original)
+++ sandbox/SOC/2010/bit_masks/lib/integer/test/bft_testing/make_bft_testing.cpp	2010-07-10 21:15:16 EDT (Sat, 10 Jul 2010)
@@ -6,7 +6,7 @@
 
 #include <boost/integer/bitfield_tuple.hpp>
 #include <boost/assert.hpp>
-
+#include <iostream>
 
 using namespace boost;
 using namespace boost::bitfields;
@@ -29,6 +29,37 @@
 
 int main() {
     {
+#ifdef BOOST_MSVC
+        using namespace ::boost::details;
+        // Checking to make sure that the indexs work correctly.
+        BOOST_MPL_ASSERT(( get_create_parameter<test_tuple,0>::is_valid_index ));
+        BOOST_MPL_ASSERT(( get_create_parameter<test_tuple,1>::is_valid_index ));
+        BOOST_MPL_ASSERT(( get_create_parameter<test_tuple,2>::is_valid_index ));
+        BOOST_MPL_ASSERT(( get_create_parameter<test_tuple,3>::is_valid_index ));
+        BOOST_MPL_ASSERT_NOT(( get_create_parameter<test_tuple,4>::is_valid_index ));
+        BOOST_MPL_ASSERT_NOT(( get_create_parameter<test_tuple,5>::is_valid_index ));
+        BOOST_MPL_ASSERT_NOT(( get_create_parameter<test_tuple,6>::is_valid_index ));
+        BOOST_MPL_ASSERT_NOT(( get_create_parameter<test_tuple,7>::is_valid_index ));
+        BOOST_MPL_ASSERT_NOT(( get_create_parameter<test_tuple,8>::is_valid_index ));
+        BOOST_MPL_ASSERT_NOT(( get_create_parameter<test_tuple,9>::is_valid_index ));
+        BOOST_MPL_ASSERT_NOT(( get_create_parameter<test_tuple,10>::is_valid_index ));
+        BOOST_MPL_ASSERT_NOT(( get_create_parameter<test_tuple,11>::is_valid_index ));
+        BOOST_MPL_ASSERT_NOT(( get_create_parameter<test_tuple,12>::is_valid_index ));
+        BOOST_MPL_ASSERT_NOT(( get_create_parameter<test_tuple,13>::is_valid_index ));
+        BOOST_MPL_ASSERT_NOT(( get_create_parameter<test_tuple,14>::is_valid_index ));
+        // BOOST_ASSERT((false));
+        // checking to make sure that the if statement part of it works correctly.
+
+
+        BOOST_MPL_ASSERT(( is_same<get_create_parameter<test_tuple,0>::type, char> ));
+        BOOST_MPL_ASSERT(( is_same<get_create_parameter<test_tuple,1>::type, unsigned char> ));
+        BOOST_MPL_ASSERT(( is_same<get_create_parameter<test_tuple,2>::type, int> ));
+        BOOST_MPL_ASSERT(( is_same<get_create_parameter<test_tuple,3>::type, bool> ));
+        BOOST_MPL_ASSERT(( is_same<get_create_parameter<test_tuple,4>::type, mpl::void_*> ));
+#endif
+    }
+    {
+#if 1
         using namespace ::boost::details;
         BOOST_MPL_ASSERT((
             is_same<
@@ -42,6 +73,7 @@
                 int
             >
         ));
+#endif
     }
     {