$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r67475 - in sandbox/SOC/2010/bit_masks: boost/integer lib/integer/test/bitfield_vector_testing
From: bbartmanboost_at_[hidden]
Date: 2010-12-28 12:35:14
Author: bbartman
Date: 2010-12-28 12:35:13 EST (Tue, 28 Dec 2010)
New Revision: 67475
URL: http://svn.boost.org/trac/boost/changeset/67475
Log:
working on completeing a the bitfiled_vectors implementation and testing facilities
Text files modified: 
   sandbox/SOC/2010/bit_masks/boost/integer/bitfield_vector.hpp                                 |    47 ++++++++++++++++++++++++++++++++------- 
   sandbox/SOC/2010/bit_masks/lib/integer/test/bitfield_vector_testing/bitfield_vector_test.cpp |    24 ++++++++++++++++++++                    
   2 files changed, 62 insertions(+), 9 deletions(-)
Modified: sandbox/SOC/2010/bit_masks/boost/integer/bitfield_vector.hpp
==============================================================================
--- sandbox/SOC/2010/bit_masks/boost/integer/bitfield_vector.hpp	(original)
+++ sandbox/SOC/2010/bit_masks/boost/integer/bitfield_vector.hpp	2010-12-28 12:35:13 EST (Tue, 28 Dec 2010)
@@ -17,6 +17,8 @@
 namespace boost {
 
 namespace detail {
+
+
 /** Iterators. */
 //@{
 template<typename T, std::size_t Width>
@@ -53,8 +55,9 @@
 
     using _base::operator typename _base::bool_type;
 
-    _self operator=(_self const& rhs) {
+    _self const& operator=(_self const& rhs) {
         this->assign(static_cast<_base>(rhs));
+        return *this;
     }
 
     reference operator*() const {
@@ -172,8 +175,9 @@
         return ret.const_deref();
     }
 
-    _self operator=(_self const& rhs) {
+    _self const& operator=(_self const& rhs) {
         this->assign(static_cast<_base>(rhs));
+        return *this;
     }
 
 
@@ -282,8 +286,9 @@
         return ret.deref();
     }
 
-    _self operator=(_self const& rhs) {
+    _self const& operator=(_self const& rhs) {
         this->assign(static_cast<_base>(rhs));
+        return *this;
     }
 
     _self& operator++() {
@@ -391,8 +396,9 @@
         return ret.const_deref();
     }
 
-    _self operator=(_self const& rhs) {
+    _self const& operator=(_self const& rhs) {
         this->assign(static_cast<_base>(rhs));
+        return *this;
     }
 
     _self& operator++() {
@@ -460,7 +466,7 @@
 
 //@}
 
-
+/// TODO: Fix reverse iterator!!!!!!!
 template <  typename T,
             std::size_t Width,
             typename Allocator = std::allocator<unsigned char>
@@ -714,9 +720,23 @@
 
 
 
+    /** Resize to a size given in elements. */
+    void resize(size_type sz, value_type c = value_type() ) {
+        size_type next_size_in_bits = Width * sz;
+        
+        // fewer elements than needed.
+        if(next_size_in_bits <= this->m_impl.m_bits_in_use ) {
+            this->m_impl.m_bits_in_use = next_size_in_bits;
+            return;
+        }
 
-    void resize(size_type sz, value_type c = value_type() );
-    reference operator[](size_type n);
+        // not enough space
+        if(next_size_in_bits > ((this->m_impl.m_end - this->m_impl.m_start) * Width)) {
+            // while(
+        }
+        
+    }
+    reference operator[](size_type n);    
     const_reference operator[](size_type n) const;
     reference at(size_type n);
     const_reference at(size_type n) const;
@@ -725,7 +745,16 @@
     template <class InputIterator>
     void assign(InputIterator first, InputIterator last);
     void assign(size_type n, value_type const& u);
-    void push_back(value_type const& x);
+
+    /**
+     *
+     */
+    void push_back(value_type const& x) {
+        check_for_resizing();
+        iterator iter = end();
+        *iter = x;
+        this->m_impl.m_bits_in_use += Width;
+    }
     void pop_back();
     iterator insert(iterator position, value_type const& x);
     void insert(iterator position, size_type n, value_type const& x);
@@ -778,7 +807,7 @@
         size_type size_of_alloc = (this->m_impl.m_end - this->m_impl.m_start);
         difference_type remaing_bits = ((size_of_alloc*CHAR_BIT) -
             this->m_impl.m_bits_in_use);
-        if(remaing_bits < Width) {
+        if(size_type(remaing_bits) < Width) {
             std::size_t next_allocation_size =
                 detail::next_allocation_size<Width>()(
                     size_of_alloc, this->m_impl.m_bits_in_use);
Modified: sandbox/SOC/2010/bit_masks/lib/integer/test/bitfield_vector_testing/bitfield_vector_test.cpp
==============================================================================
--- sandbox/SOC/2010/bit_masks/lib/integer/test/bitfield_vector_testing/bitfield_vector_test.cpp	(original)
+++ sandbox/SOC/2010/bit_masks/lib/integer/test/bitfield_vector_testing/bitfield_vector_test.cpp	2010-12-28 12:35:13 EST (Tue, 28 Dec 2010)
@@ -280,6 +280,17 @@
         this->clear();
         BOOST_TEST( this->m_impl.m_bits_in_use == 0);
     }
+    
+    // resize
+    void test_resize() {
+        // BOOST_TEST( )
+        // test case size > the the resizing value.
+    }
+    
+    // push_back
+    void test_push_back(T val) {
+        BOOST_TEST(this->back() == val);
+    }
 };
 
 
@@ -409,6 +420,19 @@
         Tester t2(8, 2);
         t2.test_clear();
     }
+    
+    // resize test
+    {
+        Tester t1(8,2);
+        t1.test_resize();
+    }
+
+    // push_back test
+    {
+        Tester t1(8,2);
+        t1.push_back(3);
+        t1.test_push_back(3);
+    }
 }
 
 int main() {