msvcp90: Added basic_string<char> constructor (with no arguments) implementation.
This commit is contained in:
parent
99a6926f3e
commit
6c57f13a6b
|
@ -109,3 +109,18 @@ typedef struct _rtti_object_locator
|
|||
const type_info *type_descriptor;
|
||||
const rtti_object_hierarchy *type_hierarchy;
|
||||
} rtti_object_locator;
|
||||
|
||||
/* basic_string<char, char_traits<char>, allocator<char>> */
|
||||
#define BUF_SIZE_CHAR 16
|
||||
typedef struct _basic_string_char
|
||||
{
|
||||
void *allocator;
|
||||
union _data {
|
||||
char buf[BUF_SIZE_CHAR];
|
||||
char *ptr;
|
||||
} data;
|
||||
size_t size;
|
||||
size_t res;
|
||||
} basic_string_char;
|
||||
|
||||
void __stdcall MSVCP_allocator_char_deallocate(void*, char*, size_t);
|
||||
|
|
|
@ -753,10 +753,10 @@
|
|||
@ stub -arch=win32 ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@PBDI@Z
|
||||
@ stub -arch=win64 ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAA@V?$_String_const_iterator@DU?$char_traits@D@std@@V?$allocator@D@2@@1@0@Z
|
||||
@ stub -arch=win32 ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@PBDIABV?$allocator@D@1@@Z
|
||||
@ stub -arch=win64 ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAA@XZ
|
||||
@ cdecl -arch=win64 ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAA@XZ(ptr) MSVCP_basic_string_char_ctor
|
||||
@ stub -arch=win32 ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@V?$_String_const_iterator@DU?$char_traits@D@std@@V?$allocator@D@2@@1@0@Z
|
||||
@ stub -arch=win64 ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAA@_KD@Z
|
||||
@ stub -arch=win32 ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@XZ
|
||||
@ cdecl -arch=win32 -i386 -norelay ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@XZ() __thiscall_MSVCP_basic_string_char_ctor
|
||||
@ stub -arch=win64 ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAA@_KDAEBV?$allocator@D@1@@Z
|
||||
@ stub -arch=win32 ??0?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAE@ABV01@@Z
|
||||
@ stub -arch=win64 ??0?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAA@AEBV01@@Z
|
||||
|
|
|
@ -16,6 +16,8 @@
|
|||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include <stdarg.h>
|
||||
|
||||
#include "msvcp90.h"
|
||||
|
@ -462,3 +464,50 @@ unsigned short CDECL MSVCP_char_traits_short_not_eof(const unsigned short *in)
|
|||
{
|
||||
return (*in==(unsigned short)-1 ? 0 : *in);
|
||||
}
|
||||
|
||||
|
||||
/* basic_string<char, char_traits<char>, allocator<char>> */
|
||||
/* Internal: basic_string_char_ptr - return pointer to stored string */
|
||||
static char* basic_string_char_ptr(basic_string_char *this)
|
||||
{
|
||||
if(this->res == BUF_SIZE_CHAR-1)
|
||||
return this->data.buf;
|
||||
return this->data.ptr;
|
||||
}
|
||||
|
||||
/* Internal: basic_string_char_eos - sets string length, puts '\0' on the end */
|
||||
static void basic_string_char_eos(basic_string_char *this, size_t len)
|
||||
{
|
||||
static const char nullbyte = '\0';
|
||||
|
||||
this->size = len;
|
||||
MSVCP_char_traits_char_assign(basic_string_char_ptr(this)+len, &nullbyte);
|
||||
}
|
||||
|
||||
/* Internal: basic_string_char_tidy - initialize basic_string buffer, deallocates data */
|
||||
/* Caution: new_size have to be smaller than BUF_SIZE_CHAR */
|
||||
static void basic_string_char_tidy(basic_string_char *this,
|
||||
MSVCP_BOOL built, int new_size)
|
||||
{
|
||||
if(built && BUF_SIZE_CHAR<=this->res) {
|
||||
char *ptr = this->data.ptr;
|
||||
|
||||
if(new_size > 0)
|
||||
MSVCP_char_traits_char__Copy_s(this->data.buf, BUF_SIZE_CHAR, ptr, new_size);
|
||||
MSVCP_allocator_char_deallocate(this->allocator, ptr, this->res+1);
|
||||
}
|
||||
|
||||
this->res = BUF_SIZE_CHAR-1;
|
||||
basic_string_char_eos(this, new_size);
|
||||
}
|
||||
|
||||
/* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@XZ */
|
||||
/* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAA@XZ */
|
||||
DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_ctor, 4)
|
||||
basic_string_char* __stdcall MSVCP_basic_string_char_ctor(basic_string_char *this)
|
||||
{
|
||||
TRACE("%p\n", this);
|
||||
|
||||
basic_string_char_tidy(this, FALSE, 0);
|
||||
return this;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue