]> sigrok.org Git - pulseview.git/blobdiff - pv/data/segment.cpp
Implement Trace::ShowLastCompleteSegmentOnly display mode
[pulseview.git] / pv / data / segment.cpp
index 905b79274efeb6ee5ddebd7045348c5da85d9db3..8745e8740dc582f8a53d33ae7ed8e81d36a87398 100644 (file)
@@ -39,7 +39,8 @@ Segment::Segment(uint64_t samplerate, unsigned int unit_size) :
        samplerate_(samplerate),
        unit_size_(unit_size),
        iterator_count_(0),
-       mem_optimization_requested_(false)
+       mem_optimization_requested_(false),
+       is_complete_(false)
 {
        lock_guard<recursive_mutex> lock(mutex_);
        assert(unit_size_ > 0);
@@ -89,6 +90,16 @@ unsigned int Segment::unit_size() const
        return unit_size_;
 }
 
+void Segment::set_complete()
+{
+       is_complete_ = true;
+}
+
+bool Segment::is_complete() const
+{
+       return is_complete_;
+}
+
 void Segment::free_unused_memory()
 {
        lock_guard<recursive_mutex> lock(mutex_);
@@ -171,15 +182,16 @@ void Segment::append_samples(void* data, uint64_t samples)
        sample_count_ += samples;
 }
 
-uint8_t* Segment::get_raw_samples(uint64_t start, uint64_t count) const
+void Segment::get_raw_samples(uint64_t start, uint64_t count,
+       uint8_t* dest) const
 {
        assert(start < sample_count_);
        assert(start + count <= sample_count_);
        assert(count > 0);
+       assert(dest != nullptr);
 
        lock_guard<recursive_mutex> lock(mutex_);
 
-       uint8_t* dest = new uint8_t[count * unit_size_];
        uint8_t* dest_ptr = dest;
 
        uint64_t chunk_num = (start * unit_size_) / chunk_size_;
@@ -199,8 +211,6 @@ uint8_t* Segment::get_raw_samples(uint64_t start, uint64_t count) const
                chunk_num++;
                chunk_offs = 0;
        }
-
-       return dest;
 }
 
 SegmentRawDataIterator* Segment::begin_raw_sample_iteration(uint64_t start)