#include "pv/util.hpp"
-#include <thread>
#include <mutex>
+#include <thread>
#include <vector>
+#include <QObject>
+
+using std::recursive_mutex;
+using std::vector;
+
namespace SegmentTest {
struct SmallSize8Single;
struct MediumSize8Single;
struct MaxSize32Single;
struct MediumSize32Multi;
struct MaxSize32Multi;
+struct MaxSize32MultiAtOnce;
struct MaxSize32MultiIterated;
-}
+} // namespace SegmentTest
namespace pv {
namespace data {
uint8_t* value;
} SegmentRawDataIterator;
-class Segment
+class Segment : public QObject
{
+ Q_OBJECT
+
private:
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();
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);
void continue_raw_sample_iteration(SegmentRawDataIterator* it, uint64_t increase);
void end_raw_sample_iteration(SegmentRawDataIterator* it);
- mutable std::recursive_mutex mutex_;
- std::vector<uint8_t*> data_chunks_;
+ uint32_t segment_id_;
+ mutable recursive_mutex mutex_;
+ vector<uint8_t*> data_chunks_;
uint8_t* current_chunk_;
uint64_t used_samples_, unused_samples_;
uint64_t sample_count_;
unsigned int unit_size_;
int iterator_count_;
bool mem_optimization_requested_;
+ bool is_complete_;
friend struct SegmentTest::SmallSize8Single;
friend struct SegmentTest::MediumSize8Single;
friend struct SegmentTest::MaxSize32Single;
friend struct SegmentTest::MediumSize32Multi;
friend struct SegmentTest::MaxSize32Multi;
+ friend struct SegmentTest::MaxSize32MultiAtOnce;
friend struct SegmentTest::MaxSize32MultiIterated;
};