X-Git-Url: https://sigrok.org/gitweb/?p=pulseview.git;a=blobdiff_plain;f=pv%2Fdata%2Fsnapshot.h;h=48879991fbbcc7d4af1d197ea68accba72512699;hp=e99a7a3c8b449e154b3e91740b96b70395096daa;hb=e8d009288de28cb194bc7964f96677c2baf900c9;hpb=9dbb80b0dbc0fc51a11e42f8e10fc72e9b66f694 diff --git a/pv/data/snapshot.h b/pv/data/snapshot.h index e99a7a3c..48879991 100644 --- a/pv/data/snapshot.h +++ b/pv/data/snapshot.h @@ -21,9 +21,9 @@ #ifndef PULSEVIEW_PV_DATA_SNAPSHOT_H #define PULSEVIEW_PV_DATA_SNAPSHOT_H -#include - -#include +#include +#include +#include namespace pv { namespace data { @@ -31,20 +31,50 @@ namespace data { class Snapshot { public: - Snapshot(int unit_size); + Snapshot(unsigned int unit_size); virtual ~Snapshot(); - uint64_t get_sample_count(); + uint64_t get_sample_count() 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 _data; uint64_t _sample_count; - int _unit_size; + uint64_t _capacity; + unsigned int _unit_size; }; } // namespace data