diff options
author | David Robillard <d@drobilla.net> | 2011-04-28 18:19:28 +0000 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2011-04-28 18:19:28 +0000 |
commit | 8513a822501175e510591ff15418022a145ddc81 (patch) | |
tree | fbc3668f48d5c5392b895b8084237956252ad3e2 /src/engine/Recorder.cpp | |
parent | f87b2217c0108e263669d2c5a80b87bab41f0002 (diff) | |
download | machina-8513a822501175e510591ff15418022a145ddc81.tar.gz machina-8513a822501175e510591ff15418022a145ddc81.tar.bz2 machina-8513a822501175e510591ff15418022a145ddc81.zip |
Improve RingBuffer implementation.
Previous implementation was broken when written to full capacity, and
this version is significantly faster as well.
git-svn-id: http://svn.drobilla.net/lad/trunk/machina@3213 a436a847-0d15-0410-975c-d299462d15a1
Diffstat (limited to 'src/engine/Recorder.cpp')
-rw-r--r-- | src/engine/Recorder.cpp | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/src/engine/Recorder.cpp b/src/engine/Recorder.cpp index c03d725..0a6b5a0 100644 --- a/src/engine/Recorder.cpp +++ b/src/engine/Recorder.cpp @@ -40,9 +40,20 @@ Recorder::_whipped() size_t size; unsigned char buf[4]; - while (_record_buffer.read(&t, &size, buf)) { - _builder->set_time(t); - _builder->event(TimeStamp(_unit), size, buf); + while (true) { + bool success = _record_buffer.read(sizeof(TimeStamp), (uint8_t*)&t); + if (success) { + success = _record_buffer.read(sizeof(size_t), (uint8_t*)&size); + } + if (success) { + success = _record_buffer.read(size, buf); + } + if (success) { + _builder->set_time(t); + _builder->event(TimeStamp(_unit), size, buf); + } else { + break; + } } } |