82 lines
1.2 KiB
C++
82 lines
1.2 KiB
C++
#include "sstream.h"
|
|
#include <stdlib.h>
|
|
|
|
ostringstream::ostringstream(void)
|
|
{
|
|
mBuffer = nullptr;
|
|
mBFill = mBSize = 0;
|
|
}
|
|
|
|
ostringstream::~ostringstream(void)
|
|
{
|
|
free(mBuffer);
|
|
}
|
|
|
|
void ostringstream::bput(char ch)
|
|
{
|
|
if (!mBuffer)
|
|
{
|
|
mBSize = 16;
|
|
mBFill = 0;
|
|
mBuffer = malloc(16);
|
|
}
|
|
else if (mBFill == mBSize)
|
|
{
|
|
mBSize *= 2;
|
|
char * b = malloc(mBSize);
|
|
for(char i=0; i<mBFill; i++)
|
|
b[i] = mBuffer[i];
|
|
free(mBuffer);
|
|
mBuffer = b;
|
|
}
|
|
mBuffer[mBFill++] = ch;
|
|
}
|
|
|
|
string ostringstream::str(void) const
|
|
{
|
|
return string(mBuffer, mBFill);
|
|
}
|
|
|
|
void ostringstream::str(const string & str)
|
|
{
|
|
mBFill = str.size();
|
|
if (mBFill > mBSize)
|
|
{
|
|
free(mBuffer);
|
|
mBSize = mBFill;
|
|
mBuffer = malloc(mBSize);
|
|
}
|
|
str.copyseg(mBuffer, 0, mBFill);
|
|
}
|
|
|
|
istringstream::istringstream(const string & str)
|
|
: mString(str), mSPos(0)
|
|
{}
|
|
|
|
istringstream::~istringstream(void)
|
|
{}
|
|
|
|
string istringstream::str(void) const
|
|
{
|
|
return mString;
|
|
}
|
|
|
|
void istringstream::str(const string & str)
|
|
{
|
|
mString = str;
|
|
mSPos = 0;
|
|
}
|
|
|
|
|
|
void istringstream::refill(void)
|
|
{
|
|
mBufferFill = 0;
|
|
mBufferPos = 0;
|
|
|
|
char ch;
|
|
while (mSPos < mString.size() && mBufferFill < 32)
|
|
{
|
|
mBuffer[mBufferFill++] = mString[mSPos++];
|
|
}
|
|
}
|