SSBM Decomp
Loading...
Searching...
No Matches
object.h
Go to the documentation of this file.
1#ifndef _object_h_
2#define _object_h_
3
4#include <platform.h>
5
6#include "baselib/forward.h"
7
8#include "baselib/class.h"
9#include "baselib/debug.h"
10
11#define HSD_OBJ_NOREF ((u16) - 1)
12
13#define HSD_OBJ(o) ((HSD_Obj*) o)
14#define HSD_OBJECT_INFO(o) (o.parent.parent)
15#define HSD_OBJECT_METHOD(o) (o->parent.parent.class_info)
16#define HSD_OBJECT_PARENT_INFO(o) ((o)->parent.parent.head.parent)
17
37
38#define MASK_OF(type) (1 << ((type) - 1))
39
59
60struct HSD_Obj {
61 struct _HSD_Class parent;
64};
65
66typedef struct _HSD_ObjInfo {
67 struct _HSD_ClassInfo parent;
69
71
72void ObjInfoInit(void);
73
74static inline bool ref_DEC(void* o)
75{
76 bool ret;
77 if ((ret = (HSD_OBJ(o)->ref_count == HSD_OBJ_NOREF))) {
78 return ret;
79 }
80 return HSD_OBJ(o)->ref_count-- == 0;
81}
82
83static inline void ref_INC(void* o)
84{
85 if (o != NULL) {
86 HSD_OBJ(o)->ref_count++;
87 HSD_ASSERT(93, HSD_OBJ(o)->ref_count != HSD_OBJ_NOREF);
88 }
89}
90
91static inline int ref_CNT(void* o)
92{
93 if (HSD_OBJ(o)->ref_count == HSD_OBJ_NOREF) {
94 return -1;
95 } else {
96 return HSD_OBJ(o)->ref_count;
97 }
98}
99
100static inline int iref_CNT(void* o)
101{
102 return HSD_OBJ(o)->ref_count_individual;
103}
104
105static inline bool iref_DEC(void* o)
106{
107 bool ret;
108 if ((ret = (HSD_OBJ(o)->ref_count_individual == 0))) {
109 return ret;
110 }
111 HSD_OBJ(o)->ref_count_individual -= 1;
112 return HSD_OBJ(o)->ref_count_individual == 0;
113}
114
115static inline void iref_INC(void* o)
116{
117 HSD_OBJ(o)->ref_count_individual++;
118 HSD_ASSERT(158, HSD_OBJ(o)->ref_count_individual != 0);
119}
120
121#endif
#define HSD_ASSERT(line, cond)
Definition debug.h:21
void ObjInfoInit(void)
Definition object.c:6
#define HSD_OBJ_NOREF
Definition object.h:11
HSD_Type
Definition object.h:18
@ JOBJ_TYPE
Definition object.h:24
@ MOBJ_TYPE
Definition object.h:26
@ ROBJ_TYPE
Definition object.h:28
@ POBJ_TYPE
Definition object.h:27
@ AOBJ_TYPE
Definition object.h:19
@ HSD_MAX_TYPE
Definition object.h:35
@ DOBJ_TYPE
Definition object.h:21
@ COBJ_TYPE
Definition object.h:20
@ FOG_TYPE
Definition object.h:23
@ RENDER_TYPE
Definition object.h:31
@ LOBJ_TYPE
Definition object.h:25
@ CBOBJ_TYPE
Definition object.h:34
@ FOBJ_TYPE
Definition object.h:22
@ TOBJ_TYPE
Definition object.h:29
@ TEVREG_TYPE
Definition object.h:33
@ CHAN_TYPE
Definition object.h:32
@ WOBJ_TYPE
Definition object.h:30
#define MASK_OF(type)
Definition object.h:38
static bool ref_DEC(void *o)
Definition object.h:74
static void iref_INC(void *o)
Definition object.h:115
#define HSD_OBJ(o)
Definition object.h:13
HSD_ClassInfo hsdObj
Definition object.c:3
HSD_TypeMask
Definition object.h:40
@ RENDER_MASK
Definition object.h:53
@ AOBJ_MASK
Definition object.h:41
@ ROBJ_MASK
Definition object.h:50
@ COBJ_MASK
Definition object.h:42
@ WOBJ_MASK
Definition object.h:52
@ ALL_TYPE_MASK
Definition object.h:57
@ CBOBJ_MASK
Definition object.h:56
@ FOG_MASK
Definition object.h:45
@ JOBJ_MASK
Definition object.h:46
@ CHAN_MASK
Definition object.h:54
@ TEVREG_MASK
Definition object.h:55
@ POBJ_MASK
Definition object.h:49
@ DOBJ_MASK
Definition object.h:43
@ FOBJ_MASK
Definition object.h:44
@ MOBJ_MASK
Definition object.h:48
@ TOBJ_MASK
Definition object.h:51
@ LOBJ_MASK
Definition object.h:47
static int iref_CNT(void *o)
Definition object.h:100
static void ref_INC(void *o)
Definition object.h:83
static int ref_CNT(void *o)
Definition object.h:91
static bool iref_DEC(void *o)
Definition object.h:105
unsigned short u16
An unsigned 16-bit integer.
Definition platform.h:23
#define NULL
A null pointer.
Definition stddef.h:19
Definition class.h:32
Definition object.h:66
Definition object.h:60
struct _HSD_Class parent
Definition object.h:61
u16 ref_count_individual
Definition object.h:63
u16 ref_count
Definition object.h:62