/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /*************************************************************************** * samplecache.cc * * Fri Sep 19 19:36:13 CEST 2014 * Copyright 2014 Bent Bisballe Nyeng * deva@aasimon.org ****************************************************************************/ /* * This file is part of SimpleRTP. * * SimpleRTP 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. * * SimpleRTP 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 SimpleRTP; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ #include "samplecache.h" #include SampleCache::SampleCache(size_t c) { capacity = c; cache = new sample_t[capacity]; start = 0; size = 0; } SampleCache::~SampleCache() { delete[] cache; } void SampleCache::addSamples(sample_t *samples, size_t sz) { for(size_t i = 0; i < sz; i++) { cache[(start + size) % capacity] = samples[i]; size++; } } size_t SampleCache::getSamples(sample_t *samples, size_t sz) { size_t read = 0; for(size_t i = 0; i < sz; i++) { if(!size) break; samples[i] = cache[start % capacity]; read++; start++; size--; } start %= capacity; return read; } size_t SampleCache::cacheSize() { return size; }