]> sigrok.org Git - pulseview.git/blobdiff - pv/data/snapshot.h
Use libsigrok C++ bindings (patch version 7).
[pulseview.git] / pv / data / snapshot.h
index 1758d4cddaa7720f35a02449d344b311274cfcc1..48879991fbbcc7d4af1d197ea68accba72512699 100644 (file)
@@ -21,9 +21,9 @@
 #ifndef PULSEVIEW_PV_DATA_SNAPSHOT_H
 #define PULSEVIEW_PV_DATA_SNAPSHOT_H
 
-#include <libsigrok/libsigrok.h>
-
-#include <boost/thread.hpp>
+#include <thread>
+#include <mutex>
+#include <vector>
 
 namespace pv {
 namespace data {
@@ -31,22 +31,50 @@ namespace data {
 class Snapshot
 {
 public:
-       Snapshot(int unit_size);
+       Snapshot(unsigned int unit_size);
 
        virtual ~Snapshot();
 
        uint64_t get_sample_count() const;
 
-       int unit_size() const;
+       unsigned int unit_size() const;
+
+       /**
+        * @brief Increase the capacity of the snapshot.
+        *
+        * Increasing the capacity allows samples to be appended without needing
+        * to reallocate memory.
+        *
+        * For the best efficiency @c set_capacity() should be called once before
+        * @c append_data() is called to set up the snapshot with the expected number
+        * of samples that will be appended in total.
+        *
+        * @note The capacity will automatically be increased when @c append_data()
+        * is called if there is not enough capacity in the buffer to store the samples.
+        *
+        * @param[in] new_capacity The new capacity of the snapshot. If this value is
+        *      smaller or equal than the current capacity then the method has no effect.
+        */
+       void set_capacity(uint64_t new_capacity);
+
+       /**
+        * @brief Get the current capacity of the snapshot.
+        *
+        * The capacity can be increased by calling @c set_capacity().
+        *
+        * @return The current capacity of the snapshot.
+        */
+       uint64_t capacity() const;
 
 protected:
        void append_data(void *data, uint64_t samples);
 
 protected:
-       mutable boost::recursive_mutex _mutex;
-       void *_data;
+       mutable std::recursive_mutex _mutex;
+       std::vector<uint8_t> _data;
        uint64_t _sample_count;
-       int _unit_size;
+       uint64_t _capacity;
+       unsigned int _unit_size;
 };
 
 } // namespace data