X-Git-Url: http://git.code-monkey.de/?p=pulseview.git;a=blobdiff_plain;f=pv%2Fdata%2Fsegment.hpp;h=18f1aed77192978ce1a87cbb86aaf7b929672f73;hp=513b7dbd9412fdc03883e7c4991083551923df60;hb=85a702806a15852f3684645dffdc38cb30274481;hpb=26a883ede0bcf68d087eda5dd2082890d36c7aef diff --git a/pv/data/segment.hpp b/pv/data/segment.hpp index 513b7db..18f1aed 100644 --- a/pv/data/segment.hpp +++ b/pv/data/segment.hpp @@ -23,10 +23,13 @@ #include "pv/util.hpp" -#include #include +#include #include +using std::recursive_mutex; +using std::vector; + namespace SegmentTest { struct SmallSize8Single; struct MediumSize8Single; @@ -36,8 +39,9 @@ struct MediumSize32Single; struct MaxSize32Single; struct MediumSize32Multi; struct MaxSize32Multi; +struct MaxSize32MultiAtOnce; struct MaxSize32MultiIterated; -} +} // namespace SegmentTest namespace pv { namespace data { @@ -51,10 +55,10 @@ typedef struct { class Segment { private: - static const uint64_t MaxChunkSize = 10*1024*1024; /* 10MiB */ + static const uint64_t MaxChunkSize; public: - Segment(uint64_t samplerate, unsigned int unit_size); + Segment(uint32_t segment_id, uint64_t samplerate, unsigned int unit_size); virtual ~Segment(); @@ -67,17 +71,25 @@ public: unsigned int unit_size() const; + uint32_t segment_id() const; + + void set_complete(); + bool is_complete() const; + + void free_unused_memory(); + protected: void append_single_sample(void *data); void append_samples(void *data, uint64_t samples); - uint8_t* get_raw_samples(uint64_t start, uint64_t count) const; + void get_raw_samples(uint64_t start, uint64_t count, uint8_t *dest) const; - SegmentRawDataIterator* begin_raw_sample_iteration(uint64_t start) const; - void continue_raw_sample_iteration(SegmentRawDataIterator* it, uint64_t increase) const; - void end_raw_sample_iteration(SegmentRawDataIterator* it) const; + SegmentRawDataIterator* begin_raw_sample_iteration(uint64_t start); + void continue_raw_sample_iteration(SegmentRawDataIterator* it, uint64_t increase); + void end_raw_sample_iteration(SegmentRawDataIterator* it); - mutable std::recursive_mutex mutex_; - std::vector data_chunks_; + uint32_t segment_id_; + mutable recursive_mutex mutex_; + vector data_chunks_; uint8_t* current_chunk_; uint64_t used_samples_, unused_samples_; uint64_t sample_count_; @@ -85,6 +97,9 @@ protected: double samplerate_; uint64_t chunk_size_; unsigned int unit_size_; + int iterator_count_; + bool mem_optimization_requested_; + bool is_complete_; friend struct SegmentTest::SmallSize8Single; friend struct SegmentTest::MediumSize8Single; @@ -94,6 +109,7 @@ protected: friend struct SegmentTest::MaxSize32Single; friend struct SegmentTest::MediumSize32Multi; friend struct SegmentTest::MaxSize32Multi; + friend struct SegmentTest::MaxSize32MultiAtOnce; friend struct SegmentTest::MaxSize32MultiIterated; };