SSBM Decomp
Toggle main menu visibility
Loading...
Searching...
No Matches
object.h
Go to the documentation of this file.
1
#ifndef _object_h_
2
#define _object_h_
3
4
#include <
Runtime/platform.h
>
5
6
#include <
sysdolphin/baselib/forward.h
>
7
8
#include <
sysdolphin/baselib/class.h
>
9
#include <
sysdolphin/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
18
typedef
enum
_HSD_Type {
19
AOBJ_TYPE
= 1,
20
COBJ_TYPE
,
21
DOBJ_TYPE
,
22
FOBJ_TYPE
,
23
FOG_TYPE
,
24
JOBJ_TYPE
,
25
LOBJ_TYPE
,
26
MOBJ_TYPE
,
27
POBJ_TYPE
,
28
ROBJ_TYPE
,
29
TOBJ_TYPE
,
30
WOBJ_TYPE
,
31
RENDER_TYPE
,
32
CHAN_TYPE
,
33
TEVREG_TYPE
,
34
CBOBJ_TYPE
,
35
HSD_MAX_TYPE
,
36
}
HSD_Type
;
37
38
#define MASK_OF(type) (1 << ((type) - 1))
39
40
typedef
enum
_HSD_TypeMask {
41
AOBJ_MASK
=
MASK_OF
(
AOBJ_TYPE
),
42
COBJ_MASK
=
MASK_OF
(
COBJ_TYPE
),
43
DOBJ_MASK
=
MASK_OF
(
DOBJ_TYPE
),
44
FOBJ_MASK
=
MASK_OF
(
FOBJ_TYPE
),
45
FOG_MASK
=
MASK_OF
(
FOG_TYPE
),
46
JOBJ_MASK
=
MASK_OF
(
JOBJ_TYPE
),
47
LOBJ_MASK
=
MASK_OF
(
LOBJ_TYPE
),
48
MOBJ_MASK
=
MASK_OF
(
MOBJ_TYPE
),
49
POBJ_MASK
=
MASK_OF
(
POBJ_TYPE
),
50
ROBJ_MASK
=
MASK_OF
(
ROBJ_TYPE
),
51
TOBJ_MASK
=
MASK_OF
(
TOBJ_TYPE
),
52
WOBJ_MASK
=
MASK_OF
(
WOBJ_TYPE
),
53
RENDER_MASK
=
MASK_OF
(
RENDER_TYPE
),
54
CHAN_MASK
=
MASK_OF
(
CHAN_TYPE
),
55
TEVREG_MASK
=
MASK_OF
(
TEVREG_TYPE
),
56
CBOBJ_MASK
=
MASK_OF
(
CBOBJ_TYPE
),
57
ALL_TYPE_MASK
=
MASK_OF
(
HSD_MAX_TYPE
) - 1,
58
}
HSD_TypeMask
;
59
60
struct
HSD_Obj
{
61
struct
_HSD_Class
parent
;
62
u16
ref_count
;
63
u16
ref_count_individual
;
64
};
65
66
typedef
struct
_HSD_ObjInfo {
67
struct
_HSD_ClassInfo
parent
;
68
}
HSD_ObjInfo
;
69
70
extern
HSD_ClassInfo
hsdObj
;
71
72
void
ObjInfoInit
(
void
);
73
74
static
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
83
static
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
91
static
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
100
static
inline
int
iref_CNT
(
void
* o)
101
{
102
return
HSD_OBJ
(o)->ref_count_individual;
103
}
104
105
static
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
115
static
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
class.h
debug.h
u16
unsigned short int u16
Definition
types.h:7
HSD_ASSERT
#define HSD_ASSERT(line, cond)
Definition
mnvibration.c:6
hsdObj
HSD_ClassInfo hsdObj
Definition
object.c:3
ObjInfoInit
void ObjInfoInit(void)
Definition
object.c:5
HSD_OBJ_NOREF
#define HSD_OBJ_NOREF
Definition
object.h:11
HSD_Type
HSD_Type
Definition
object.h:18
JOBJ_TYPE
@ JOBJ_TYPE
Definition
object.h:24
MOBJ_TYPE
@ MOBJ_TYPE
Definition
object.h:26
ROBJ_TYPE
@ ROBJ_TYPE
Definition
object.h:28
POBJ_TYPE
@ POBJ_TYPE
Definition
object.h:27
AOBJ_TYPE
@ AOBJ_TYPE
Definition
object.h:19
HSD_MAX_TYPE
@ HSD_MAX_TYPE
Definition
object.h:35
DOBJ_TYPE
@ DOBJ_TYPE
Definition
object.h:21
COBJ_TYPE
@ COBJ_TYPE
Definition
object.h:20
FOG_TYPE
@ FOG_TYPE
Definition
object.h:23
RENDER_TYPE
@ RENDER_TYPE
Definition
object.h:31
LOBJ_TYPE
@ LOBJ_TYPE
Definition
object.h:25
CBOBJ_TYPE
@ CBOBJ_TYPE
Definition
object.h:34
FOBJ_TYPE
@ FOBJ_TYPE
Definition
object.h:22
TOBJ_TYPE
@ TOBJ_TYPE
Definition
object.h:29
TEVREG_TYPE
@ TEVREG_TYPE
Definition
object.h:33
CHAN_TYPE
@ CHAN_TYPE
Definition
object.h:32
WOBJ_TYPE
@ WOBJ_TYPE
Definition
object.h:30
MASK_OF
#define MASK_OF(type)
Definition
object.h:38
ref_DEC
static bool ref_DEC(void *o)
Definition
object.h:74
iref_INC
static void iref_INC(void *o)
Definition
object.h:115
HSD_OBJ
#define HSD_OBJ(o)
Definition
object.h:13
HSD_TypeMask
HSD_TypeMask
Definition
object.h:40
RENDER_MASK
@ RENDER_MASK
Definition
object.h:53
AOBJ_MASK
@ AOBJ_MASK
Definition
object.h:41
ROBJ_MASK
@ ROBJ_MASK
Definition
object.h:50
COBJ_MASK
@ COBJ_MASK
Definition
object.h:42
WOBJ_MASK
@ WOBJ_MASK
Definition
object.h:52
ALL_TYPE_MASK
@ ALL_TYPE_MASK
Definition
object.h:57
CBOBJ_MASK
@ CBOBJ_MASK
Definition
object.h:56
FOG_MASK
@ FOG_MASK
Definition
object.h:45
JOBJ_MASK
@ JOBJ_MASK
Definition
object.h:46
CHAN_MASK
@ CHAN_MASK
Definition
object.h:54
TEVREG_MASK
@ TEVREG_MASK
Definition
object.h:55
POBJ_MASK
@ POBJ_MASK
Definition
object.h:49
DOBJ_MASK
@ DOBJ_MASK
Definition
object.h:43
FOBJ_MASK
@ FOBJ_MASK
Definition
object.h:44
MOBJ_MASK
@ MOBJ_MASK
Definition
object.h:48
TOBJ_MASK
@ TOBJ_MASK
Definition
object.h:51
LOBJ_MASK
@ LOBJ_MASK
Definition
object.h:47
iref_CNT
static int iref_CNT(void *o)
Definition
object.h:100
ref_INC
static void ref_INC(void *o)
Definition
object.h:83
ref_CNT
static int ref_CNT(void *o)
Definition
object.h:91
iref_DEC
static bool iref_DEC(void *o)
Definition
object.h:105
platform.h
NULL
#define NULL
Definition
stddef.h:14
HSD_ClassInfo
Definition
class.h:32
HSD_ObjInfo
Definition
object.h:66
HSD_ObjInfo::parent
struct _HSD_ClassInfo parent
Definition
object.h:67
HSD_Obj
Definition
object.h:60
HSD_Obj::parent
struct _HSD_Class parent
Definition
object.h:61
HSD_Obj::ref_count_individual
u16 ref_count_individual
Definition
object.h:63
HSD_Obj::ref_count
u16 ref_count
Definition
object.h:62
forward.h
src
sysdolphin
baselib
object.h
Generated by
1.17.0