Use libsigrok C++ bindings (patch version 7).
[pulseview.git] / pv / data / logicsnapshot.h
index ecff5edc089c61846c400c400cb7c1192303a8fa..a215f92801307879b91402ffadffc9f3e668cc2a 100644 (file)
 #include <utility>
 #include <vector>
 
+namespace sigrok {
+       class Logic;
+}
+
 namespace LogicSnapshotTest {
-class Pow2;
-class Basic;
-class LargeData;
-class Pulses;
-class LongPulses;
+struct Pow2;
+struct Basic;
+struct LargeData;
+struct Pulses;
+struct LongPulses;
 }
 
 namespace pv {
@@ -58,16 +62,20 @@ public:
        typedef std::pair<int64_t, bool> EdgePair;
 
 public:
-       LogicSnapshot(const sr_datafeed_logic &logic);
+       LogicSnapshot(std::shared_ptr<sigrok::Logic> logic,
+                     uint64_t expected_num_samples = 0);
 
        virtual ~LogicSnapshot();
 
-       void append_payload(const sr_datafeed_logic &logic);
+       void append_payload(std::shared_ptr<sigrok::Logic> logic);
 
        void get_samples(uint8_t *const data,
                int64_t start_sample, int64_t end_sample) const;
 
 private:
+       uint64_t unpack_sample(const uint8_t *ptr) const;
+       void pack_sample(uint8_t *ptr, uint64_t value);
+       
        void reallocate_mipmap_level(MipMapLevel &m);
 
        void append_payload_to_mipmap();
@@ -98,11 +106,11 @@ private:
        struct MipMapLevel _mip_map[ScaleStepCount];
        uint64_t _last_append_sample;
 
-       friend class LogicSnapshotTest::Pow2;
-       friend class LogicSnapshotTest::Basic;
-       friend class LogicSnapshotTest::LargeData;
-       friend class LogicSnapshotTest::Pulses;
-       friend class LogicSnapshotTest::LongPulses;
+       friend struct LogicSnapshotTest::Pow2;
+       friend struct LogicSnapshotTest::Basic;
+       friend struct LogicSnapshotTest::LargeData;
+       friend struct LogicSnapshotTest::Pulses;
+       friend struct LogicSnapshotTest::LongPulses;
 };
 
 } // namespace data