synced code free space with buffer changes

svn-id: r13646
This commit is contained in:
Paweł Kołodziejski
2004-04-26 20:48:09 +00:00
parent f7084c20e9
commit d2fa7bbcc7
+21 -11
View File
@@ -198,8 +198,10 @@ protected:
byte *_end;
bool _finalized;
const int _rate;
uint32 _freeSpace;
inline bool eosIntern() const { return _end == _pos; };
void updateFreeSpace();
public:
AppendableMemoryStream(int rate, uint bufferSize);
~AppendableMemoryStream() { free(_bufferStart); }
@@ -217,6 +219,16 @@ public:
uint32 getFreeSpace();
};
template<bool stereo, bool is16Bit, bool isUnsigned>
void AppendableMemoryStream<stereo, is16Bit, isUnsigned>::updateFreeSpace() {
if (_pos <= _end) {
uint32 free_from_end = _bufferEnd - _end;
uint32 free_to_pos = _pos - _bufferStart;
_freeSpace = free_from_end + free_to_pos;
} else {
_freeSpace = _pos - _end;
}
}
template<bool stereo, bool is16Bit, bool isUnsigned>
AppendableMemoryStream<stereo, is16Bit, isUnsigned>::AppendableMemoryStream(int rate, uint bufferSize)
@@ -231,6 +243,8 @@ AppendableMemoryStream<stereo, is16Bit, isUnsigned>::AppendableMemoryStream(int
_bufferStart = (byte *)malloc(bufferSize);
_pos = _end = _bufferStart;
_bufferEnd = _bufferStart + bufferSize;
updateFreeSpace();
}
template<bool stereo, bool is16Bit, bool isUnsigned>
@@ -244,6 +258,8 @@ inline int16 AppendableMemoryStream<stereo, is16Bit, isUnsigned>::read() {
int16 val = READSAMPLE(is16Bit, isUnsigned, _pos);
_pos += (is16Bit ? 2 : 1);
updateFreeSpace();
return val;
}
@@ -263,6 +279,9 @@ int AppendableMemoryStream<stereo, is16Bit, isUnsigned>::readBuffer(int16 *buffe
samples++;
}
}
updateFreeSpace();
return samples;
}
@@ -297,21 +316,12 @@ void AppendableMemoryStream<stereo, is16Bit, isUnsigned>::append(const byte *dat
memcpy(_end, data, len);
_end += len;
}
updateFreeSpace();
}
template<bool stereo, bool is16Bit, bool isUnsigned>
uint32 AppendableMemoryStream<stereo, is16Bit, isUnsigned>::getFreeSpace() {
uint32 free;
if (_pos <= _end) {
uint32 free_from_end = _bufferEnd - _end;
uint32 free_to_pos = _pos - _bufferStart;
free = free_from_end + free_to_pos;
} else {
free = _pos - _end;
}
return free;
return _freeSpace;
}
#pragma mark -