Skip to content

Commit b14bb04

Browse files
committed
Use pointer to the container for int_vector_buffer iterator
Using reference member prevents defining assignment operator for the iterator class of int_vector_buffer. This commit fixes simongog#436.
1 parent c32874c commit b14bb04

File tree

1 file changed

+5
-4
lines changed

1 file changed

+5
-4
lines changed

include/sdsl/int_vector_buffer.hpp

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ class int_vector_buffer
3939
class iterator;
4040
typedef typename int_vector<t_width>::difference_type difference_type;
4141
typedef typename int_vector<t_width>::value_type value_type;
42+
typedef typename int_vector<t_width>::size_type size_type;
4243

4344
private:
4445
static_assert(t_width <= 64 , "int_vector_buffer: width must be at most 64 bits.");
@@ -489,12 +490,12 @@ class int_vector_buffer
489490
class iterator: public std::iterator<std::random_access_iterator_tag, value_type, difference_type, value_type*, reference>
490491
{
491492
private:
492-
int_vector_buffer<t_width>& m_ivb;
493+
int_vector_buffer<t_width>* m_ivb;
493494
uint64_t m_idx = 0;
494495
public:
495496

496497
iterator() = delete;
497-
iterator(int_vector_buffer<t_width>& ivb, uint64_t idx=0) : m_ivb(ivb), m_idx(idx) {}
498+
iterator(int_vector_buffer<t_width>& ivb, uint64_t idx=0) : m_ivb(&ivb), m_idx(idx) {}
498499

499500
iterator& operator++()
500501
{
@@ -524,7 +525,7 @@ class int_vector_buffer
524525

525526
reference operator*()const
526527
{
527-
return m_ivb[m_idx];
528+
return (*m_ivb)[m_idx];
528529
}
529530

530531
iterator& operator+=(difference_type i)
@@ -557,7 +558,7 @@ class int_vector_buffer
557558

558559
bool operator==(const iterator& it) const
559560
{
560-
return &m_ivb == &(it.m_ivb) and m_idx == it.m_idx;
561+
return m_ivb == it.m_ivb and m_idx == it.m_idx;
561562
}
562563

563564
bool operator!=(const iterator& it) const

0 commit comments

Comments
 (0)