]> sigrok.org Git - pulseview.git/blobdiff - logicdatasnapshot.h
Added Pulses test case for LogicDataSnapshot
[pulseview.git] / logicdatasnapshot.h
index e6fee52bea70f88aad01ee18c8522636930c4bc7..974aff6cf1d3cd6f2199809d416f671176854aa6 100644 (file)
 #include <utility>
 #include <vector>
 
+namespace LogicDataSnapshotTest {
+       class Pow2;
+       class Basic;
+       class LargeData;
+       class Pulses;
+}
+
 class LogicDataSnapshot : public DataSnapshot
 {
+private:
+       struct MipMapLevel
+       {
+               uint64_t length;
+               uint64_t data_length;
+               void *data;
+       };
+
+private:
+       static const int ScaleStepCount = 10;
+       static const int MipMapScalePower;
+       static const int MipMapScaleFactor;
+       static const float LogMipMapScaleFactor;
+       static const uint64_t MipMapDataUnit;
+
 public:
        typedef std::pair<int64_t, bool> EdgePair;
 
 public:
        LogicDataSnapshot(const sr_datafeed_logic &logic);
 
+       virtual ~LogicDataSnapshot();
+
        void append_payload(const sr_datafeed_logic &logic);
 
+private:
+       void reallocate_mip_map(MipMapLevel &m);
+
+       void append_payload_to_mipmap();
+
+public:
        uint64_t get_sample(uint64_t index) const;
 
        /**
@@ -41,11 +71,25 @@ public:
         * @param[out] edges The vector to place the edges into.
         * @param[in] start The start sample index.
         * @param[in] end The end sample index.
-        * @param[in] quantization_length The minimum period of time that
+        * @param[in] min_length The minimum number of samples that
         * can be resolved at this level of detail.
         * @param[in] sig_index The index of the signal.
         **/
        void get_subsampled_edges(std::vector<EdgePair> &edges,
                int64_t start, int64_t end,
-               int64_t quantization_length, int sig_index);
+               float min_length, int sig_index);
+
+private:
+       uint64_t get_subsample(int level, uint64_t offset) const;
+
+       static int64_t pow2_ceil(int64_t x, unsigned int power);
+
+private:
+       struct MipMapLevel _mip_map[ScaleStepCount];
+       uint64_t _last_append_sample;
+
+       friend class LogicDataSnapshotTest::Pow2;
+       friend class LogicDataSnapshotTest::Basic;
+       friend class LogicDataSnapshotTest::LargeData;
+       friend class LogicDataSnapshotTest::Pulses;
 };