split out, clean up and template CircBuf

This commit is contained in:
Glenn Maynard
2004-01-14 09:38:14 +00:00
parent c237bf2364
commit cad991074a
3 changed files with 71 additions and 68 deletions
-50
View File
@@ -744,56 +744,6 @@ void RageSound::SetFadeLength( float fSeconds )
fade_length = fSeconds;
}
void CircBuf::reserve(unsigned n)
{
clear();
buf.erase();
buf.insert(buf.end(), n, 0);
}
void CircBuf::clear()
{
cnt = start = 0;
}
void CircBuf::write(const char *buffer, unsigned buffer_size)
{
ASSERT(size() + buffer_size <= capacity()); /* overflow */
while(buffer_size)
{
unsigned write_pos = start + size();
if(write_pos >= buf.size()) write_pos -= buf.size();
int cpy = int(min(buffer_size, buf.size() - write_pos));
buf.replace(write_pos, cpy, buffer, cpy);
cnt += cpy;
buffer += cpy;
buffer_size -= cpy;
}
}
void CircBuf::read(char *buffer, unsigned buffer_size)
{
ASSERT(size() >= buffer_size); /* underflow */
while(buffer_size)
{
unsigned total = static_cast<unsigned>(min(buf.size() - start, size()));
unsigned cpy = min(buffer_size, total);
buf.copy(buffer, cpy, start);
start += cpy;
if(start == buf.size()) start = 0;
cnt -= cpy;
buffer += cpy;
buffer_size -= cpy;
}
}
/*
-----------------------------------------------------------------------------
Copyright (c) 2002-2003 by the person(s) listed below. All rights reserved.