diff --git a/src/tl/tl/tlKDTree.h b/src/tl/tl/tlKDTree.h index 618ea184d..4a2b2e365 100644 --- a/src/tl/tl/tlKDTree.h +++ b/src/tl/tl/tlKDTree.h @@ -256,16 +256,16 @@ public: typedef typename it_traits::pointer pointer; typedef typename it_traits::reference reference; - kd_n_it (size_type step, const it_type &i) - : m_iter (i), m_step (step) + kd_n_it (size_type step, const it_type &begin, difference_type index) + : m_begin (begin), m_step (step), m_index (index) { } kd_n_it (const kd_n_it &i) - : m_iter (i.m_iter), m_step (i.m_step) + : m_begin (i.m_begin), m_step (i.m_step), m_index (i.m_index) { } kd_n_it (size_type step, const kd_n_it &i) - : m_iter (i.m_iter), m_step (step) + : m_begin (i.m_begin), m_step (step), m_index (i.m_index) { } size_type step () const @@ -273,80 +273,77 @@ public: kd_n_it &operator+= (difference_type n) { - m_iter += (n * m_step); + m_index += (n * m_step); return *this; } kd_n_it &operator-= (difference_type n) { - m_iter -= (n * m_step); + m_index -= (n * m_step); return *this; } kd_n_it operator+ (difference_type n) const { - it_type b (m_iter); - b += n * m_step; - return kd_n_it (m_step, b); + return kd_n_it (m_step, m_begin, m_index + n * m_step); } kd_n_it operator- (difference_type n) const { - it_type b (m_iter); - b -= n * m_step; - return kd_n_it (m_step, b); + return kd_n_it (m_step, m_begin, m_index - n * m_step); } value_type &operator* () const { - return *m_iter; + return m_begin [m_index]; } kd_n_it &operator++ () { - m_iter += m_step; + m_index += m_step; return *this; } kd_n_it &operator-- () { - m_iter -= m_step; + m_index -= m_step; return *this; } value_type &operator[] (difference_type n) const { - return m_iter [n * m_step]; + return m_begin [m_index + n * m_step]; } bool operator== (const kd_n_it &i) const { - return m_iter == i.m_iter; + return m_index == i.m_index; } bool operator!= (const kd_n_it &i) const { - return m_iter != i.m_iter; + return !operator== (i); } bool operator< (const kd_n_it &i) const { - return m_iter < i.m_iter; + return m_index < i.m_index; } bool operator<= (const kd_n_it &i) const { - return m_iter <= i.m_iter; + return m_index <= i.m_index; } difference_type operator- (const kd_n_it &i) const { - return std::distance (i.m_iter, m_iter) / m_step; + return (m_index - i.m_index) / m_step; } private: - it_type m_iter; + it_type m_begin; size_type m_step; + difference_type m_index; }; /** @@ -483,7 +480,7 @@ public: m_bounds.clear (); m_bounds.resize (m_objs.size ()); - partial_sort (0, 0, kd_n_it (1, m_objs.begin ()), kd_n_it (1, m_objs.end ()), picker, comp); + partial_sort (0, 0, kd_n_it (1, m_objs.begin (), 0), kd_n_it (1, m_objs.begin (), m_objs.size ()), picker, comp); } /** diff --git a/src/tl/tl/tlUnitTest.cc b/src/tl/tl/tlUnitTest.cc index b2451cdda..b3a46e3f1 100644 --- a/src/tl/tl/tlUnitTest.cc +++ b/src/tl/tl/tlUnitTest.cc @@ -330,7 +330,16 @@ void TestBase::write_detailed_diff (std::ostream &os, const std::string &subject static std::string read_file (const std::string &path) { tl::InputStream s (path); - return s.read_all (); + + // NOTE: using the text reader means we normalize CRLF/LF + tl::TextInputStream ts (s); + std::string t; + while (!ts.at_end ()) { + t += ts.get_line (); + t += "\n"; + } + + return t; } void TestBase::compare_text_files (const std::string &path_a, const std::string &path_b)