$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r62875 - in sandbox/SOC/2010/bit_masks: boost/integer lib/integer/test/bft_testing
From: bbartmanboost_at_[hidden]
Date: 2010-06-12 15:42:42
Author: bbartman
Date: 2010-06-12 15:42:42 EDT (Sat, 12 Jun 2010)
New Revision: 62875
URL: http://svn.boost.org/trac/boost/changeset/62875
Log:
working on integrating bitfeild stuff with my bitfield_tuple
Text files modified: 
   sandbox/SOC/2010/bit_masks/boost/integer/bitfield_tuple.hpp                  |    42 +++++++++++++++++++++++++++++++-------- 
   sandbox/SOC/2010/bit_masks/lib/integer/test/bft_testing/ref_type_testing.cpp |     2                                         
   2 files changed, 34 insertions(+), 10 deletions(-)
Modified: sandbox/SOC/2010/bit_masks/boost/integer/bitfield_tuple.hpp
==============================================================================
--- sandbox/SOC/2010/bit_masks/boost/integer/bitfield_tuple.hpp	(original)
+++ sandbox/SOC/2010/bit_masks/boost/integer/bitfield_tuple.hpp	2010-06-12 15:42:42 EDT (Sat, 12 Jun 2010)
@@ -7,7 +7,7 @@
 #ifndef BOOST_BITFIELD_TUPLE_HPP
 #define BOOST_BITFIELD_TUPLE_HPP
 #include <boost/integer/details/bitfield_tuple_impl.hpp>
-#include <boost/bitfield.hpp>
+#include <boost/bitfield/bitfield.hpp>
 
 namespace boost {
 
@@ -63,31 +63,55 @@
             MaskInfo::offset::value,
             MaskInfo::field_width::value
         >                                                       mask;
-
+        
         typedef bit_ref<MaskInfo>                               _self;
+        typedef typename make_unsigned<return_type>::type  unsigned_return_type;
+        typedef typename make_unsigned<
+            storage_type
+        >::type                                           unsigned_storage_type;
+
+        /** Internals bitfield type for extracting individual fields from 
+         *  within the storage_type.
+         */
+        typedef typename integer::bitfield<
+            unsigned_storage_type,
+            MaskInfo::offset::value,
+            MaskInfo::offset::value + MaskInfo::field_width::value - 1,
+            unsigned_return_type
+        >                                                       bitfield_type;
 
+        typedef typename bitfield_type::value_type somethingl;
         /** Reference constructor.
          *  Because the bit_ref is an abstraction of a reference then it also
          *  must behave like a reference type.
          */
         bit_ref(storage_type& ref)
-            :_ref(ref)
+            :_ref( (typename bitfield_type::storage_type&)ref )
         { }
         
+        /** Implicit conversion operator 
+         *  this allows for implicit conversion to the return_type.
+         */
         operator return_type() const {
-            return (_ref & mask()) >> mask::offset;
+            return static_cast< return_type >( _ref.get() );
         }
 
-
+        /** Assignment Of return_type into reference.
+         *  This allows values to be assigned to the get function, as part of 
+         *  the tuple like interface.
+         */
         _self const& operator=(return_type const& rhs) {
-            _ref ^= (_ref & mask());
-            _ref |= ((static_cast<storage_type>(rhs) << mask::offset) & mask());
+            _ref.set(
+                static_cast< typename make_unsigned<return_type>::type > (rhs));
             return *this;
         }
         
     private:
-        storage_type& _ref;
-        bit_ref(); // not default constructible.
+        // storage reference.
+        bitfield_type _ref;
+
+        // not default constructible because this is a reference type
+        bit_ref();
     };
 
 
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 15:42:42 EDT (Sat, 12 Jun 2010)
@@ -32,7 +32,7 @@
 
     typedef bft::bit_ref<element> ref_type_1;
 
-    ref_type_1 test_1(data_storage);
+    ref_type_1 test_1( data_storage );
 
     // char temp = test_1;
     char value_to_assign = 'a';