msvcp110: Add _Pad implementation.

Signed-off-by: Piotr Caban <piotr@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Piotr Caban 2016-02-23 13:13:18 +01:00 committed by Alexandre Julliard
parent c97cb06f89
commit 289daa665d
1 changed files with 46 additions and 15 deletions

View File

@ -892,8 +892,14 @@ extern const vtable_ptr MSVCP__Pad_vtable;
DEFINE_THISCALL_WRAPPER(_Pad_ctor, 4)
_Pad* __thiscall _Pad_ctor(_Pad *this)
{
FIXME("(%p) stub\n", this);
return NULL;
TRACE("(%p)\n", this);
this->vtable = &MSVCP__Pad_vtable;
_Cnd_init(&this->cnd);
_Mtx_init(&this->mtx, 0);
this->launched = FALSE;
_Mtx_lock(&this->mtx);
return this;
}
/* ??4_Pad@std@@QAEAAV01@ABV01@@Z */
@ -901,8 +907,12 @@ _Pad* __thiscall _Pad_ctor(_Pad *this)
DEFINE_THISCALL_WRAPPER(_Pad_op_assign, 8)
_Pad* __thiscall _Pad_op_assign(_Pad *this, const _Pad *copy)
{
FIXME("(%p %p) stub\n", this, copy);
return NULL;
TRACE("(%p %p)\n", this, copy);
this->cnd = copy->cnd;
this->mtx = copy->mtx;
this->launched = copy->launched;
return this;
}
/* ??0_Pad@std@@QAE@ABV01@@Z */
@ -910,8 +920,10 @@ _Pad* __thiscall _Pad_op_assign(_Pad *this, const _Pad *copy)
DEFINE_THISCALL_WRAPPER(_Pad_copy_ctor, 8)
_Pad* __thiscall _Pad_copy_ctor(_Pad *this, const _Pad *copy)
{
FIXME("(%p %p) stub\n", this, copy);
return NULL;
TRACE("(%p %p)\n", this, copy);
this->vtable = &MSVCP__Pad_vtable;
return _Pad_op_assign(this, copy);
}
/* ??1_Pad@std@@QAE@XZ */
@ -919,7 +931,25 @@ _Pad* __thiscall _Pad_copy_ctor(_Pad *this, const _Pad *copy)
DEFINE_THISCALL_WRAPPER(_Pad_dtor, 4)
void __thiscall _Pad_dtor(_Pad *this)
{
FIXME("(%p) stub\n", this);
TRACE("(%p)\n", this);
_Mtx_unlock(&this->mtx);
_Mtx_destroy(&this->mtx);
_Cnd_destroy(&this->cnd);
}
DEFINE_THISCALL_WRAPPER(_Pad__Go, 4)
#define call__Pad__Go(this) CALL_VTBL_FUNC(this, 0, unsigned int, (_Pad*), (this))
unsigned int __thiscall _Pad__Go(_Pad *this)
{
ERR("(%p) should not be called\n", this);
return 0;
}
static DWORD WINAPI launch_thread_proc(void *arg)
{
_Pad *this = arg;
return call__Pad__Go(this);
}
/* ?_Launch@_Pad@std@@QAEXPAU_Thrd_imp_t@@@Z */
@ -927,7 +957,10 @@ void __thiscall _Pad_dtor(_Pad *this)
DEFINE_THISCALL_WRAPPER(_Pad__Launch, 8)
void __thiscall _Pad__Launch(_Pad *this, _Thrd_t *thr)
{
FIXME("(%p %p) stub\n", this, thr);
TRACE("(%p %p)\n", this, thr);
_Thrd_start(thr, launch_thread_proc, this);
_Cnd_wait(&this->cnd, &this->mtx);
}
/* ?_Release@_Pad@std@@QAEXXZ */
@ -935,14 +968,12 @@ void __thiscall _Pad__Launch(_Pad *this, _Thrd_t *thr)
DEFINE_THISCALL_WRAPPER(_Pad__Release, 4)
void __thiscall _Pad__Release(_Pad *this)
{
FIXME("(%p) stub\n", this);
}
TRACE("(%p)\n", this);
DEFINE_THISCALL_WRAPPER(_Pad__Go, 4)
unsigned int __thiscall _Pad__Go(_Pad *this)
{
ERR("(%p) should not be called\n", this);
return 0;
_Mtx_lock(&this->mtx);
this->launched = TRUE;
_Cnd_signal(&this->cnd);
_Mtx_unlock(&this->mtx);
}
#endif