diff options
author | Paul Gilbert | 2017-02-12 08:05:33 -0500 |
---|---|---|
committer | Paul Gilbert | 2017-02-12 08:05:33 -0500 |
commit | 0e2c667fa86dceef5ec263949e5464d12cf6c4ec (patch) | |
tree | ba26c2ccc740ff4dc13c05f74d72d038c18a4e29 /engines/titanic/sound/audio_buffer.cpp | |
parent | d4a718bf8407e92b3866343a12035891d92d78b8 (diff) | |
download | scummvm-rg350-0e2c667fa86dceef5ec263949e5464d12cf6c4ec.tar.gz scummvm-rg350-0e2c667fa86dceef5ec263949e5464d12cf6c4ec.tar.bz2 scummvm-rg350-0e2c667fa86dceef5ec263949e5464d12cf6c4ec.zip |
TITANIC: Simplify implementation of CAudioBuffer
Diffstat (limited to 'engines/titanic/sound/audio_buffer.cpp')
-rw-r--r-- | engines/titanic/sound/audio_buffer.cpp | 61 |
1 files changed, 24 insertions, 37 deletions
diff --git a/engines/titanic/sound/audio_buffer.cpp b/engines/titanic/sound/audio_buffer.cpp index 029e7f0d9c..1f0693181a 100644 --- a/engines/titanic/sound/audio_buffer.cpp +++ b/engines/titanic/sound/audio_buffer.cpp @@ -21,62 +21,49 @@ */ #include "titanic/sound/audio_buffer.h" +#include "common/algorithm.h" namespace Titanic { -CAudioBuffer::CAudioBuffer(int bufferSize) : _flag(true), _disabled(false) { - _buffer.resize(bufferSize); - reset(); -} - -CAudioBuffer::~CAudioBuffer() { - _buffer.clear(); +CAudioBuffer::CAudioBuffer(int maxSize) : _finished(false) { + _data.resize(maxSize); } void CAudioBuffer::reset() { - _flag = true; - _readBytesLeft = _writeBytesLeft = _buffer.size() / 2; + _frontP = _backP = &_data[0]; } -byte *CAudioBuffer::getBegin() { - return _flag ? &_buffer[_buffer.size() / 2] : &_buffer[0]; -} +void CAudioBuffer::push(int16 value) { + assert(!full()); + compact(); -byte *CAudioBuffer::getEnd() { - return _flag ? &_buffer[0] : &_buffer[_buffer.size() / 2]; + *_backP++ = value; } -int16 *CAudioBuffer::getReadPtr() { - byte *ptr = getBegin(); - return (int16 *)(ptr + (_buffer.size() / 2 - _readBytesLeft)); -} +void CAudioBuffer::push(int16 *values, int count) { + compact(); + assert(freeSize() >= count); -int16 *CAudioBuffer::getWritePtr() { - byte *ptr = getEnd(); - return (int16 *)(ptr + (_buffer.size() / 2 - _writeBytesLeft)); + Common::copy(values, values + count, _backP); + _backP += count; } -void CAudioBuffer::advanceRead(int size) { - _readBytesLeft -= size; - if (_readBytesLeft < 0) { - _readBytesLeft = 0; - } else if (size && !_writeBytesLeft) { - reverse(); - } +int16 CAudioBuffer::pop() { + assert(!empty()); + return *_frontP++; } -void CAudioBuffer::advanceWrite(int size) { - _writeBytesLeft -= size; - if (_writeBytesLeft < 0) { - _writeBytesLeft = 0; - } else if (size && !_readBytesLeft) { - reverse(); +void CAudioBuffer::compact() { + if (_frontP != &_data[0]) { + Common::copy(_frontP, _backP, &_data[0]); + _backP -= _frontP - &_data[0]; + _frontP = &_data[0]; } } -void CAudioBuffer::reverse() { - _flag = !_flag; - _readBytesLeft = _writeBytesLeft = _buffer.size() / 2; +int CAudioBuffer::freeSize() { + compact(); + return &_data[0] + _data.size() - _backP; } void CAudioBuffer::enterCriticalSection() { |