const float LogicSnapshot::LogMipMapScaleFactor = logf(MipMapScaleFactor);
const uint64_t LogicSnapshot::MipMapDataUnit = 64*1024; // bytes
-LogicSnapshot::LogicSnapshot(const sr_datafeed_logic &logic) :
+LogicSnapshot::LogicSnapshot(const sr_datafeed_logic &logic,
+ const uint64_t expected_num_samples) :
Snapshot(logic.unitsize),
_last_append_sample(0)
{
+ set_capacity(expected_num_samples);
+
lock_guard<recursive_mutex> lock(_mutex);
memset(_mip_map, 0, sizeof(_mip_map));
append_payload(logic);
{
assert(data);
assert(start_sample >= 0);
- assert(start_sample < (int64_t)_sample_count);
+ assert(start_sample <= (int64_t)_sample_count);
assert(end_sample >= 0);
- assert(end_sample < (int64_t)_sample_count);
+ assert(end_sample <= (int64_t)_sample_count);
assert(start_sample <= end_sample);
lock_guard<recursive_mutex> lock(_mutex);
}
// Add the final state
- edges.push_back(pair<int64_t, bool>(end,
- get_sample(end) & sig_mask));
+ const bool end_sample = get_sample(end) & sig_mask;
+ if (last_sample != end_sample)
+ edges.push_back(pair<int64_t, bool>(end, end_sample));
+ edges.push_back(pair<int64_t, bool>(end + 1, end_sample));
}
uint64_t LogicSnapshot::get_subsample(int level, uint64_t offset) const