30 lines
509 B
C
30 lines
509 B
C
|
|
#include "object.h"
|
||
|
|
|
||
|
|
#include <blue/core/queue.h>
|
||
|
|
#include <blue/object/type.h>
|
||
|
|
#include <stdlib.h>
|
||
|
|
#include <string.h>
|
||
|
|
|
||
|
|
struct b_object *b_object_type_instantiate(const b_object_type *type)
|
||
|
|
{
|
||
|
|
if (!type || type->t_instance_size < sizeof(struct b_object)) {
|
||
|
|
return NULL;
|
||
|
|
}
|
||
|
|
|
||
|
|
struct b_object *out = malloc(type->t_instance_size);
|
||
|
|
if (!out) {
|
||
|
|
return NULL;
|
||
|
|
}
|
||
|
|
|
||
|
|
memset(out, 0x0, type->t_instance_size);
|
||
|
|
|
||
|
|
out->ob_ref = 1;
|
||
|
|
out->ob_type = type;
|
||
|
|
|
||
|
|
if (type->t_init) {
|
||
|
|
type->t_init(out);
|
||
|
|
}
|
||
|
|
|
||
|
|
return out;
|
||
|
|
}
|