X-Git-Url: http://git.code-monkey.de/?p=pulseview.git;a=blobdiff_plain;f=pv%2Fdata%2Fsegment.hpp;fp=pv%2Fdata%2Fsegment.hpp;h=a754eab2604eb4918a1b20c2efb1ac2700f462a9;hp=0000000000000000000000000000000000000000;hb=f3d66e52ed6b454ea7a0662d5e6367e230116a2b;hpb=ff008de665c7990d5f3408f918ff090d8e6c60b2 diff --git a/pv/data/segment.hpp b/pv/data/segment.hpp new file mode 100644 index 0000000..a754eab --- /dev/null +++ b/pv/data/segment.hpp @@ -0,0 +1,90 @@ +/* + * This file is part of the PulseView project. + * + * Copyright (C) 2012 Joel Holdsworth + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef PULSEVIEW_PV_DATA_SNAPSHOT_H +#define PULSEVIEW_PV_DATA_SNAPSHOT_H + +#include +#include +#include + +namespace pv { +namespace data { + +class Segment +{ +public: + Segment(uint64_t samplerate, unsigned int unit_size); + + virtual ~Segment(); + + uint64_t get_sample_count() const; + + double start_time() const; + + double samplerate() const; + void set_samplerate(double samplerate); + + unsigned int unit_size() const; + + /** + * @brief Increase the capacity of the segment. + * + * 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 segment 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 segment. 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 segment. + * + * The capacity can be increased by calling @c set_capacity(). + * + * @return The current capacity of the segment. + */ + uint64_t capacity() const; + +protected: + void append_data(void *data, uint64_t samples); + +protected: + mutable std::recursive_mutex mutex_; + std::vector data_; + uint64_t sample_count_; + double start_time_; + double samplerate_; + uint64_t capacity_; + unsigned int unit_size_; +}; + +} // namespace data +} // namespace pv + +#endif // PULSEVIEW_PV_DATA_SNAPSHOT_H