summaryrefslogtreecommitdiffhomepage
path: root/planning/structure.puml
blob: 67cc77f43808f2ce2afaef40c62619127b4d244c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
@startuml

	state Gem {
		state Headers
		state Structs #red {
			state Struct_Type_Init
			state Struct_Deinit #chocolate
			state "Struct Getter Method" as Struct_Getter #lawngreen {
				state fork_is_struct_getter <<fork>>
				state "Unwrap Struct\nand Read Value" as Unwrap_Struct_Getter
				state "Return Value" as Return_Struct_Getter
				state "Handle If Value\nIs Struct" as Handle_Struct_Value_Getter
			
				[*] -d-> Unwrap_Struct_Getter
				Unwrap_Struct_Getter -d-> fork_is_struct_getter
				fork_is_struct_getter -d-> Return_Struct_Getter
				fork_is_struct_getter -d-> Handle_Struct_Value_Getter
				Handle_Struct_Value_Getter -d-> Return_Struct_Getter
			}
			state "Struct Setter Method" as Struct_Setter #darkorchid {
				state "Initialize Vars" as Initialize_Vars_Setter
				state "Get and Assign\nArg" as Get_Arg_Setter
				state "Unwrap And Set" as Unwrap_Struct_Setter
				state "Return Var" as Return_Setter
			
				[*] -d-> Initialize_Vars_Setter
				Initialize_Vars_Setter -d-> Get_Arg_Setter
				Get_Arg_Setter -d-> Unwrap_Struct_Setter
				Unwrap_Struct_Setter -d-> Return_Setter
			}
			state Struct_Initializer as "Struct Initializer" #gold {
				state "Initialize Vars" as Initialize_Vars_Struct_Init
				state fork_kw_args_struct_init <<fork>>
				state "Get and Assign\nArg" as Get_Arg_Struct_Init
				state "Get and Assign\nKwargs" as Get_Kwargs_Struct_Init
				state "Build Struct" as Build_Struct_Struct_Init
				state "Wrap Struct" as Wrap_Struct_Struct_Init
				state "Return Ruby Object" as Return_Struct_Init
			
				[*] -d-> Initialize_Vars_Struct_Init
			
				Initialize_Vars_Struct_Init -d-> fork_kw_args_struct_init
				
				fork_kw_args_struct_init -d-> Get_Arg_Struct_Init
				
				fork_kw_args_struct_init -d-> Get_Kwargs_Struct_Init
				
				Get_Arg_Struct_Init -d-> Build_Struct_Struct_Init
				Get_Kwargs_Struct_Init -d-> Build_Struct_Struct_Init
				
				Build_Struct_Struct_Init -d-> Wrap_Struct_Struct_Init
				
				Wrap_Struct_Struct_Init -d-> Return_Struct_Init
			}

			Struct_Type_Init --> Struct_Deinit

		}
		state Methods #lightblue {
			state "Initialize Vars" as Initialize_Vars_C_Function
			state fork_kw_args_c_function <<fork>>
			state "Get and Assign Arg" as Get_Arg_C_Function
			state "Get and Assign Kwargs" as Get_Kwargs_C_Function
			state "Call Function" as Call_C_Function
			state fork_wrap_struct_c_function <<fork>>
			state "Wrap Struct" as Wrap_Struct_C_Function
			state "Return Value" as Return_C_Function

			[*] -d-> Initialize_Vars_C_Function
			[*] -d-> Call_C_Function

			Initialize_Vars_C_Function -d-> fork_kw_args_c_function
	
			fork_kw_args_c_function -d-> Get_Arg_C_Function
	
			fork_kw_args_c_function -d-> Get_Kwargs_C_Function
	
			Get_Arg_C_Function -d-> Call_C_Function
			Get_Kwargs_C_Function -d-> Call_C_Function
	
			Call_C_Function -d-> fork_wrap_struct_c_function
			fork_wrap_struct_c_function -d-> Wrap_Struct_C_Function
	
			fork_wrap_struct_c_function -d-> Return_C_Function
			Wrap_Struct_C_Function -d-> Return_C_Function
		}
		state Gem_Initializer as "Gem Initializer" {
			state Define_Module as "Define Module" #crimson
			state Define_Struct_Classes as "Define Classes" #darkorange
			state Define_Struct_Methods as "Define Struct Methods" #hotpink
			state Define_Functions as "Define Functions" #lightblue
		}
		state Gem_Finalizer as "Gem Finalizer"

		
		Headers -d-> Structs
		Structs -d-> Methods
		Methods -d-> Gem_Initializer
		Gem_Initializer -d-> Gem_Finalizer
		
		Define_Module -d-> Define_Struct_Classes
		Define_Struct_Classes -r-> Define_Struct_Methods
		Define_Struct_Classes -d-> Define_Functions
	}

state Build_State as "Build State Hash" {
	state BS_C_Gemname as "Gem Name" #crimson : string
	state BS_C_Typedef as "Typedefs" : hash(typedef: c_type)
	state BS_C_Function_Name as "C Function Name" #lightblue {
		state BS_Cfun_Skip as "Skip" : boolean
		state BS_Cfun_RClass as "Ruby Class" #darkorange : string or array(string)
		state BS_Cfun_Name as "Ruby Name" : string
		state BS_Cfun_Selfparam as "Param as Self" : string
	}
	state BS_C_Struct_Name as "C Struct Name" #red {
		state BS_C_Deinit as "Deinitialize Object" #chocolate : string(C code)
		state BS_Cstc_Skip as "Skip" : boolean
		state BS_Cstc_Name as "Ruby Name" : string
		state BS_Cstc_RClass as "Ruby Class" #darkorange : string or array(string)
		state BS_Cstc_Typedef as "C Typedefs" : array of strings
		state BS_Cstc_Init as "Initializer" #gold {
			state BS_Cstc_I_skip as "Skip" : boolean
		}
		state BS_Cstc_Accessors as "Accessors" #hotpink {
			state BS_Cstc_Getters as "Getters" #lawngreen {
				state BS_Cstc_G_Name as "Ruby Name" : string
				state BS_Cstc_G_Skip as "Skip" : boolean
			}
			state BS_Cstc_Setters as "Setters" #darkorchid {
				state BS_Cstc_S_Name as "Ruby Name" : string
				state BS_Cstc_S_Skip as "Skip" : boolean
			}
		}
		BS_Cstc_Getters -d[hidden]-> BS_Cstc_Setters
	}

	BS_C_Function_Name -d[hidden]-> BS_C_Struct_Name
}


	

@enduml