MCPcopy Create free account
hub / github.com/defold/defold / UnityValueToDDF

Function UnityValueToDDF

engine/script/src/script_ddf.cpp:109–173  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

107 }
108
109 static void UnityValueToDDF(lua_State* L, const dmDDF::FieldDescriptor* f, char* buffer, char** data_start, char** data_end, char* pointer_base)
110 {
111 switch (f->m_Type)
112 {
113 case dmDDF::TYPE_INT32:
114 {
115 *((int32_t *) &buffer[f->m_Offset]) = 0;
116 }
117 break;
118
119 case dmDDF::TYPE_UINT32:
120 {
121 *((uint32_t *) &buffer[f->m_Offset]) = 0;
122 }
123 break;
124
125 case dmDDF::TYPE_UINT64:
126 {
127 *((dmhash_t *) &buffer[f->m_Offset]) = 0;
128 }
129 break;
130
131 case dmDDF::TYPE_BOOL:
132 {
133 *((bool *) &buffer[f->m_Offset]) = false;
134 }
135 break;
136
137 case dmDDF::TYPE_FLOAT:
138 {
139 *((float *) &buffer[f->m_Offset]) = 0;
140 }
141 break;
142
143 case dmDDF::TYPE_STRING:
144 {
145 const char* s = "";
146 int size = strlen(s) + 1;
147 if (*data_start + size > *data_end)
148 {
149 luaL_error(L, "Message data doesn't fit");
150 }
151 else
152 {
153 memcpy(*data_start, s, size);
154 // NOTE: We store offset here an relocate later...
155 *((const char**) &buffer[f->m_Offset]) = (const char*) (*data_start - pointer_base);
156 }
157 *data_start += size;
158 }
159 break;
160
161 case dmDDF::TYPE_ENUM:
162 {
163 *((int32_t *) &buffer[f->m_Offset]) = 0;
164 }
165 break;
166

Callers 1

DoLuaTableToDDFFunction · 0.85

Calls 1

luaL_errorFunction · 0.85

Tested by

no test coverage detected