X-Git-Url: http://git.code-monkey.de/?a=blobdiff_plain;f=pv%2Fdata%2Flogicsnapshot.cpp;h=f203e8b674fb57fb37c556edc593c5e1798873a8;hb=175d6573de78a10cc4ff461147d26c99ab3847b4;hp=f77690e137d6ced0a17b3f54ba0edf18f3ee1b9d;hpb=80d501418163a7a7ef8a02a8ffc0c6b7ecb85725;p=pulseview.git diff --git a/pv/data/logicsnapshot.cpp b/pv/data/logicsnapshot.cpp index f77690e..f203e8b 100644 --- a/pv/data/logicsnapshot.cpp +++ b/pv/data/logicsnapshot.cpp @@ -29,8 +29,11 @@ #include "logicsnapshot.h" -using namespace boost; -using namespace std; +using boost::lock_guard; +using boost::recursive_mutex; +using std::max; +using std::min; +using std::pair; namespace pv { namespace data { @@ -70,6 +73,22 @@ void LogicSnapshot::append_payload( append_payload_to_mipmap(); } +void LogicSnapshot::get_samples(uint8_t *const data, + int64_t start_sample, int64_t end_sample) const +{ + assert(data); + assert(start_sample >= 0); + assert(start_sample <= (int64_t)_sample_count); + assert(end_sample >= 0); + assert(end_sample <= (int64_t)_sample_count); + assert(start_sample <= end_sample); + + lock_guard lock(_mutex); + + const size_t size = (end_sample - start_sample) * _unit_size; + memcpy(data, (const uint8_t*)_data + start_sample, size); +} + void LogicSnapshot::reallocate_mipmap_level(MipMapLevel &m) { const uint64_t new_data_length = ((m.length + MipMapDataUnit - 1) / @@ -347,8 +366,10 @@ void LogicSnapshot::get_subsampled_edges( } // Add the final state - edges.push_back(pair(end, - get_sample(end) & sig_mask)); + const bool end_sample = get_sample(end) & sig_mask; + if (last_sample != end_sample) + edges.push_back(pair(end, end_sample)); + edges.push_back(pair(end + 1, end_sample)); } uint64_t LogicSnapshot::get_subsample(int level, uint64_t offset) const