]> sigrok.org Git - pulseview.git/blobdiff - pv/data/logicsegment.cpp
Segments: Fix iterator access to underlying value
[pulseview.git] / pv / data / logicsegment.cpp
index 2f69e02dba3b7acc8794942caf5e26497f6bb930..b77c102d8ba2266de397f42223ffc9d5b4b0e3a5 100644 (file)
@@ -184,21 +184,6 @@ void LogicSegment::get_samples(int64_t start_sample,
        get_raw_samples(start_sample, (end_sample - start_sample), dest);
 }
 
-SegmentLogicDataIterator* LogicSegment::begin_sample_iteration(uint64_t start)
-{
-       return (SegmentLogicDataIterator*)begin_raw_sample_iteration(start);
-}
-
-void LogicSegment::continue_sample_iteration(SegmentLogicDataIterator* it, uint64_t increase)
-{
-       Segment::continue_raw_sample_iteration((SegmentRawDataIterator*)it, increase);
-}
-
-void LogicSegment::end_sample_iteration(SegmentLogicDataIterator* it)
-{
-       Segment::end_raw_sample_iteration((SegmentRawDataIterator*)it);
-}
-
 void LogicSegment::get_subsampled_edges(
        vector<EdgePair> &edges,
        uint64_t start, uint64_t end,
@@ -371,6 +356,9 @@ void LogicSegment::get_subsampled_edges(
 void LogicSegment::get_surrounding_edges(vector<EdgePair> &dest,
        uint64_t origin_sample, float min_length, int sig_index)
 {
+       if (origin_sample >= sample_count_)
+               return;
+
        // Put the edges vector on the heap, it can become quite big until we can
        // use a get_subsampled_edges() implementation that searches backwards
        vector<EdgePair>* edges = new vector<EdgePair>;
@@ -426,7 +414,7 @@ void LogicSegment::append_payload_to_mipmap()
        MipMapLevel &m0 = mip_map_[0];
        uint64_t prev_length;
        uint8_t *dest_ptr;
-       SegmentRawDataIterator* it;
+       SegmentDataIterator* it;
        uint64_t accumulator;
        unsigned int diff_counter;
 
@@ -446,23 +434,23 @@ void LogicSegment::append_payload_to_mipmap()
        const uint64_t start_sample = prev_length * MipMapScaleFactor;
        const uint64_t end_sample = m0.length * MipMapScaleFactor;
 
-       it = begin_raw_sample_iteration(start_sample);
+       it = begin_sample_iteration(start_sample);
        for (uint64_t i = start_sample; i < end_sample;) {
                // Accumulate transitions which have occurred in this sample
                accumulator = 0;
                diff_counter = MipMapScaleFactor;
                while (diff_counter-- > 0) {
-                       const uint64_t sample = unpack_sample(it->value);
+                       const uint64_t sample = unpack_sample(get_iterator_value(it));
                        accumulator |= last_append_sample_ ^ sample;
                        last_append_sample_ = sample;
-                       continue_raw_sample_iteration(it, 1);
+                       continue_sample_iteration(it, 1);
                        i++;
                }
 
                pack_sample(dest_ptr, accumulator);
                dest_ptr += unit_size_;
        }
-       end_raw_sample_iteration(it);
+       end_sample_iteration(it);
 
        // Compute higher level mipmaps
        for (unsigned int level = 1; level < ScaleStepCount; level++) {