diff --git a/src/readonlybuffer.h b/src/readonlybuffer.h new file mode 100644 --- /dev/null +++ b/src/readonlybuffer.h @@ -0,0 +1,57 @@ +/* + Copyright © 2017 Hasan Yavuz Özderya + + This file is part of serialplot. + + serialplot 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 3 of the License, or + (at your option) any later version. + + serialplot 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 serialplot. If not, see . +*/ + +#ifndef READONLYBUFFER_H +#define READONLYBUFFER_H + +// IMPORTANT TODO: rename to "framebuffer.h" when stream work is done. +#include "framebuffer2.h" + +/// A read only frame buffer used for storing snapshot data. Main advantage of +/// this compared to `RingBuffer` is that reading data should be somewhat +/// faster. +class ReadOnlyBuffer : public FrameBuffer +{ +public: + /// Creates a buffer with data copied from `source`. Source buffer cannot be + /// empty. + ReadOnlyBuffer(const FrameBuffer* source); + + /// Creates a buffer from a slice of the `source`. + /// + /// @param start start of the slice + /// @param n number of samples + /// + /// @important (start + n) should be smaller or equal than `source->size()`, + /// otherwise it's an error. + ReadOnlyBuffer(const FrameBuffer* source, unsigned start, unsigned n); + + ~ReadOnlyBuffer(); + + virtual unsigned size() const; + virtual double sample(unsigned i) const; + virtual Range limits() const; + +private: + double* data; ///< data storage + unsigned _size; ///< data size + Range _limits; ///< limits cache +}; + +#endif // READONLYBUFFER_H