Stop using basic_string for Sint32. We only use it in one place and it's

a bit of a performance hit there ...
This commit is contained in:
Glenn Maynard
2003-04-25 19:40:49 +00:00
parent c6115c79b9
commit 60921db8e5
3 changed files with 22 additions and 30 deletions
+17 -5
View File
@@ -299,15 +299,27 @@ void RageSoundManager::SetPrefs(float MixVol)
SoundMixBuffer::SoundMixBuffer()
{
vol = SOUNDMAN->GetMixVolume();
bufsize = used = 0;
mixbuf = NULL;
}
SoundMixBuffer::~SoundMixBuffer()
{
free(mixbuf);
}
void SoundMixBuffer::write(const Sint16 *buf, unsigned size)
{
if(mixbuf.size() < size)
if(bufsize < size)
{
basic_string<Sint32, char_traits_Sint32> empty(size-mixbuf.size(), 0);
mixbuf = (Sint32 *) realloc(mixbuf, sizeof(Sint32) * size);
bufsize = size;
}
mixbuf.insert(mixbuf.end(), empty.begin(), empty.end());
if(used < size)
{
memset(mixbuf + used, 0, (size - used) * sizeof(Sint32));
used = size;
}
for(unsigned pos = 0; pos < size; ++pos)
@@ -330,7 +342,7 @@ void SoundMixBuffer::write(const Sint16 *buf, unsigned size)
void SoundMixBuffer::read(Sint16 *buf)
{
for(unsigned pos = 0; pos < mixbuf.size(); ++pos)
for(unsigned pos = 0; pos < used; ++pos)
{
/* XXX: dither */
Sint32 out = (mixbuf[pos]) / 32768;
@@ -338,5 +350,5 @@ void SoundMixBuffer::read(Sint16 *buf)
buf[pos] = Sint16(out);
}
mixbuf.erase();
used = 0;
}