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 type_info *type_descriptor;
|
||||||
const rtti_object_hierarchy *type_hierarchy;
|
const rtti_object_hierarchy *type_hierarchy;
|
||||||
} rtti_object_locator;
|
} 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=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=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=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=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=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=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=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
|
@ 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
|
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include "config.h"
|
||||||
|
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
|
|
||||||
#include "msvcp90.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);
|
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