/* * Copyright (C) 2015, Mike Walters * * This file is part of inspectrum. * * 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 3 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, see . */ #include #include #include "samplebuffer.h" template SampleBuffer::SampleBuffer(std::shared_ptr> src) : src(src) { src->subscribe(this); } template SampleBuffer::~SampleBuffer() { src->unsubscribe(this); } template std::unique_ptr SampleBuffer::getSamples(size_t start, size_t length) { // TODO: base this on the actual history required auto history = std::min(start, (size_t)256); auto samples = src->getSamples(start - history, length + history); if (samples == nullptr) return nullptr; auto temp = std::make_unique(history + length); auto dest = std::make_unique(length); QMutexLocker ml(&mutex); work(samples.get(), temp.get(), history + length, start); memcpy(dest.get(), temp.get() + history, length * sizeof(Tout)); return dest; } template void SampleBuffer::invalidateEvent() { SampleSource::invalidate(); } template class SampleBuffer, std::complex>; template class SampleBuffer, float>; template class SampleBuffer;