| 177 | // *********************************************************************** |
| 178 | |
| 179 | void 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 | } |
no outgoing calls
no test coverage detected