MCPcopy Create free account
hub / github.com/DavidColson/Polybox / ParseUserDataDataString

Function ParseUserDataDataString

source/userdata.cpp:179–251  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

177// ***********************************************************************
178
179void ParseUserDataDataString(lua_State* L, String dataString, UserData* pUserData) {
180 if (dataString.length <= 0)
181 return;
182
183 Scan::ScanningState scan;
184 scan.pTextStart = dataString.pData;
185 scan.pTextEnd = dataString.pData + dataString.length;
186 scan.pCurrent = (char*)dataString.pData;
187 scan.line = 1;
188
189 switch(pUserData->type) {
190 case Type::Float32: {
191 f32* pData = (f32*)pUserData->pData;
192 while (!Scan::IsAtEnd(scan)) {
193 scan.pCurrent++; // parse number expects that the first digit has been parsed
194 *pData = (f32)ParseNumber(scan);
195 if (!Scan::IsAtEnd(scan) && Scan::Peek(scan) != ',')
196 luaL_error(L, "Expected ',' between values");
197 else
198 Scan::Advance(scan);
199 pData++;
200 }
201 break;
202 }
203 case Type::Int32: {
204 char number[9];
205 number[8] = 0;
206 i32* pData = (i32*)pUserData->pData;
207 while(!Scan::IsAtEnd(scan)) {
208 number[0] = *scan.pCurrent++;
209 number[1] = *scan.pCurrent++;
210 number[2] = *scan.pCurrent++;
211 number[3] = *scan.pCurrent++;
212 number[4] = *scan.pCurrent++;
213 number[5] = *scan.pCurrent++;
214 number[6] = *scan.pCurrent++;
215 number[7] = *scan.pCurrent++;
216 *pData = (i32)strtoul(number, nullptr, 16);
217 pData++;
218 }
219 Scan::Advance(scan);
220 break;
221 }
222 case Type::Int16: {
223 char number[5];
224 number[4] = 0;
225 i16* pData = (i16*)pUserData->pData;
226 while (!Scan::IsAtEnd(scan)) {
227 number[0] = *scan.pCurrent++;
228 number[1] = *scan.pCurrent++;
229 number[2] = *scan.pCurrent++;
230 number[3] = *scan.pCurrent++;
231 *pData = (i16)strtoul(number, nullptr, 16);
232 pData++;
233 }
234 Scan::Advance(scan);
235 break;
236 }

Callers 2

NewUserDataFunction · 0.85
ParseUserDataFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected