#include <stdlib.h>
#include <math.h>
-#include <boost/foreach.hpp>
-
#include "config.h"
#include "logicsnapshot.h"
-using boost::lock_guard;
-using boost::recursive_mutex;
+#include <libsigrok/libsigrok.hpp>
+
+using std::lock_guard;
+using std::recursive_mutex;
using std::max;
using std::min;
using std::pair;
+using std::shared_ptr;
+
+using sigrok::Logic;
namespace pv {
namespace data {
const float LogicSnapshot::LogMipMapScaleFactor = logf(MipMapScaleFactor);
const uint64_t LogicSnapshot::MipMapDataUnit = 64*1024; // bytes
-LogicSnapshot::LogicSnapshot(const sr_datafeed_logic &logic,
+LogicSnapshot::LogicSnapshot(shared_ptr<Logic> logic,
const uint64_t expected_num_samples) :
- Snapshot(logic.unitsize),
+ Snapshot(logic->unit_size()),
_last_append_sample(0)
{
set_capacity(expected_num_samples);
LogicSnapshot::~LogicSnapshot()
{
lock_guard<recursive_mutex> lock(_mutex);
- BOOST_FOREACH(MipMapLevel &l, _mip_map)
+ for (MipMapLevel &l : _mip_map)
free(l.data);
}
#endif
}
-void LogicSnapshot::append_payload(
- const sr_datafeed_logic &logic)
+void LogicSnapshot::append_payload(shared_ptr<Logic> logic)
{
- assert(_unit_size == logic.unitsize);
- assert((logic.length % _unit_size) == 0);
+ assert(_unit_size == logic->unit_size());
+ assert((logic->data_length() % _unit_size) == 0);
lock_guard<recursive_mutex> lock(_mutex);
- append_data(logic.data, logic.length / _unit_size);
+ append_data(logic->data_pointer(),
+ logic->data_length() / _unit_size);
// Generate the first mip-map from the data
append_payload_to_mipmap();
lock_guard<recursive_mutex> lock(_mutex);
const size_t size = (end_sample - start_sample) * _unit_size;
- memcpy(data, (const uint8_t*)_data + start_sample, size);
+ memcpy(data, (const uint8_t*)_data.data() + start_sample * _unit_size, size);
}
void LogicSnapshot::reallocate_mipmap_level(MipMapLevel &m)
dest_ptr = (uint8_t*)m0.data + prev_length * _unit_size;
// Iterate through the samples to populate the first level mipmap
- const uint8_t *const end_src_ptr = (uint8_t*)_data +
+ const uint8_t *const end_src_ptr = (uint8_t*)_data.data() +
m0.length * _unit_size * MipMapScaleFactor;
- for (src_ptr = (uint8_t*)_data +
+ for (src_ptr = (uint8_t*)_data.data() +
prev_length * _unit_size * MipMapScaleFactor;
src_ptr < end_src_ptr;)
{
uint64_t LogicSnapshot::get_sample(uint64_t index) const
{
- assert(_data);
assert(index < _sample_count);
- return unpack_sample((uint8_t*)_data + index * _unit_size);
+ return unpack_sample((uint8_t*)_data.data() + index * _unit_size);
}
void LogicSnapshot::get_subsampled_edges(