]> sigrok.org Git - pulseview.git/blobdiff - pv/data/snapshot.h
Preallocate memory before samples are received.
[pulseview.git] / pv / data / snapshot.h
index 1758d4cddaa7720f35a02449d344b311274cfcc1..1f1ca3cf0b8539e7387c5211434123ce98ee42f4 100644 (file)
@@ -39,6 +39,33 @@ public:
 
        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);
 
@@ -46,6 +73,7 @@ protected:
        mutable boost::recursive_mutex _mutex;
        void *_data;
        uint64_t _sample_count;
+       uint64_t _capacity;
        int _unit_size;
 };