st/nine: Add parameter to start with bind

Add a parameter to start new object with a bind
instead of a refcount.

Signed-off-by: Axel Davy <davyaxel0@gmail.com>
This commit is contained in:
Axel Davy 2018-09-09 12:36:28 +02:00
parent a9bf82ecf4
commit fd86ce7c14
3 changed files with 18 additions and 3 deletions

View file

@ -34,9 +34,21 @@ HRESULT
NineUnknown_ctor( struct NineUnknown *This,
struct NineUnknownParams *pParams )
{
This->refs = pParams->container ? 0 : 1;
This->bind = 0;
This->forward = !This->refs;
if (pParams->container) {
This->refs = 0;
This->forward = true;
This->bind = 0;
assert(!pParams->start_with_bind_not_ref);
} else if (pParams->start_with_bind_not_ref) {
This->refs = 0;
This->forward = false;
This->bind = 1;
} else {
This->refs = 1;
This->forward = false;
This->bind = 0;
}
This->container = pParams->container;
This->device = pParams->device;
if (This->refs && This->device)

View file

@ -78,6 +78,7 @@ struct NineUnknownParams
void (*dtor)(void *data);
struct NineUnknown *container;
struct NineDevice9 *device;
bool start_with_bind_not_ref;
};
HRESULT

View file

@ -86,6 +86,7 @@ static inline void _nine_bind(void **dst, void *obj)
__params.dtor = (void *)Nine##nine##_dtor; \
__params.container = NULL; \
__params.device = dev; \
__params.start_with_bind_not_ref = false; \
{ \
HRESULT __hr = Nine##nine##_ctor(__data, &__params, ## __VA_ARGS__); \
if (FAILED(__hr)) { \
@ -111,6 +112,7 @@ static inline void _nine_bind(void **dst, void *obj)
__params.dtor = (void *)Nine##nine##_dtor; \
__params.container = NULL; \
__params.device = NULL; \
__params.start_with_bind_not_ref = false; \
{ \
HRESULT __hr = Nine##nine##_ctor(__data, &__params, ## __VA_ARGS__); \
if (FAILED(__hr)) { \