| /*
|
| * Copyright 2006 Sony Computer Entertainment Inc.
|
| *
|
| * Licensed under the MIT Open Source License, for details please see license.txt or the website
|
| * http://www.opensource.org/licenses/mit-license.php
|
| *
|
| */ |
| |
| #include <dae/daeStringTable.h> |
| |
| daeStringTable::daeStringTable(int stringBufferSize):_stringBufferSize(stringBufferSize), _empty( "" ) |
| { |
| _stringBufferIndex = _stringBufferSize; |
| //allocate initial buffer |
| //allocateBuffer(); |
| } |
| |
| daeString daeStringTable::allocateBuffer() |
| { |
| daeString buf = new daeChar[_stringBufferSize]; |
| _stringBuffersList.append(buf); |
| _stringBufferIndex = 0; |
| return buf; |
| } |
| |
| daeString daeStringTable::allocString(daeString string) |
| { |
| if ( string == NULL ) return _empty; |
| size_t stringSize = strlen(string) + 1; |
| size_t sizeLeft = _stringBufferSize - _stringBufferIndex; |
| daeString buf; |
| if (sizeLeft < stringSize) |
| { |
| if (stringSize > _stringBufferSize) |
| _stringBufferSize = ((stringSize / _stringBufferSize) + 1) * _stringBufferSize ; |
| buf = allocateBuffer(); |
| } |
| else |
| { |
| buf = _stringBuffersList.get((daeInt)_stringBuffersList.getCount()-1); |
| } |
| daeChar *str = (char*)buf + _stringBufferIndex; |
| memcpy(str,string,stringSize); |
| _stringBufferIndex += stringSize; |
| |
| int align = sizeof(void*); |
| _stringBufferIndex = (_stringBufferIndex+(align-1)) & (~(align-1)); |
| |
| return str; |
| } |
| |
| void daeStringTable::clear() |
| { |
| unsigned int i; |
| for (i=0;i<_stringBuffersList.getCount();i++) |
| #if _MSC_VER <= 1200 |
| delete [] (char *) _stringBuffersList[i]; |
| #else |
| delete [] _stringBuffersList[i]; |
| #endif |
| |
| _stringBuffersList.clear(); |
| _stringBufferIndex = _stringBufferSize; |
| } |