Usermode/libc++ - Fix off by one in map indexing
[tpg/acess2.git] / Usermode / Libraries / libc++.so_src / include_exp / map
index 7a1cf3e..7f7e7c3 100644 (file)
@@ -59,9 +59,11 @@ public:
                return !(*this == x);
        }
        value_type& operator*() {
+               _libcxx_assert(m_index < m_map->m_size);
                return m_map->m_items[m_index];
        }
        value_type* operator->() {
+               _libcxx_assert(m_index < m_map->m_size);
                return &m_map->m_items[m_index];
        }
 };
@@ -171,7 +173,6 @@ public:
                iterator it = upper_bound(k);
                if( it == end() || m_comp(k, it->first) ) {     // if k < it->first, no match
                        insert_at(it.m_index, value_type(k,mapped_type()) );
-                       ++ it;
                }
                return it->second;
        }
@@ -319,6 +320,7 @@ private:
                pos_out = pos;
                return false;
                #else
+               //::_sys::debug("map::_search (m_size=%i)", m_size);
                for( size_type pos = 0; pos < m_size; pos ++ )
                {
                        const key_type& item_key = m_items[pos].first;
@@ -326,22 +328,24 @@ private:
                                continue;
                        }
                        else if( m_comp(k, item_key) ) {
+                               //::_sys::debug("map::_search - Passed %i", pos);
                                pos_out = pos;
                                return false;
                        }
                        else {
+                               //::_sys::debug("map::_search - Found %i", pos);
                                pos_out = pos;
                                return true;
                        }
                }
+               //::_sys::debug("map::_search - Off end %i", m_size);
                pos_out = m_size;
                return false;
                #endif
        }
        void insert_at(size_type ofs, const value_type& val) {
-               //assert( ofs == 0 || m_comp(m_items[ofs-1].first, val.first) );
-               //assert( ofs == m_size || m_comp(m_items[ofs].first, val.first) );
-               ::_sys::debug("map::insert_at(%i,)", ofs);
+               //_libcxx_assert( ofs == 0 || m_comp(m_items[ofs-1].first, val.first) );
+               //_libcxx_assert( ofs == m_size || m_comp(m_items[ofs].first, val.first) );
                // Resize up
                reserve( m_size + 1 );
                // Move following items up

UCC git Repository :: git.ucc.asn.au