use parse result
This commit is contained in:
25
core.cpp
25
core.cpp
@@ -274,7 +274,7 @@ list<string> strSplit(Arena *arena, string splitStr, string inputStr) {
|
||||
return result;
|
||||
}
|
||||
|
||||
int8 parsePositiveInt(string str, size_t *lengthPointer) {
|
||||
ParsePositiveIntResult parsePositiveInt(string str, size_t *lengthPointer) {
|
||||
size_t numEnd = 0;
|
||||
char currChar = str.str[numEnd];
|
||||
while (numEnd < str.length && isNumeric(currChar)) {
|
||||
@@ -288,14 +288,14 @@ int8 parsePositiveInt(string str, size_t *lengthPointer) {
|
||||
result *= 10;
|
||||
result += str.str[i] - '0';
|
||||
}
|
||||
return result;
|
||||
return {result, true};
|
||||
} else {
|
||||
return -1;
|
||||
return {0, false};
|
||||
}
|
||||
}
|
||||
|
||||
real32 parsePositiveReal32(string str, size_t *lengthPointer) {
|
||||
real32 result = NAN;
|
||||
ParsePositiveReal32Result parsePositiveReal32(string str, size_t *lengthPointer) {
|
||||
ParsePositiveReal32Result result = {NAN, false};
|
||||
|
||||
string wholePartStr = string{0};
|
||||
string fractionalPartStr = string{0};
|
||||
@@ -314,16 +314,21 @@ real32 parsePositiveReal32(string str, size_t *lengthPointer) {
|
||||
c++;
|
||||
}
|
||||
if (split) {
|
||||
int wholePart = parsePositiveInt(wholePartStr, lengthPointer);
|
||||
ParsePositiveIntResult wholePartParsed = parsePositiveInt(wholePartStr, lengthPointer);
|
||||
*lengthPointer += 1;
|
||||
int fractionalPart = parsePositiveInt(fractionalPartStr, lengthPointer);
|
||||
if (wholePart >= 0 && fractionalPart >= 0) {
|
||||
ParsePositiveIntResult fractionalPartParsed = parsePositiveInt(fractionalPartStr, lengthPointer);
|
||||
if (wholePartParsed.valid && fractionalPartParsed.valid) {
|
||||
// TODO(dledda): implement powf with intrinsics? or just custom
|
||||
real32 fractionalPartMultiplier = 1.0f / powf(10.0f, (real32)fractionalPartStr.length);
|
||||
result = (real32)wholePart + (real32)fractionalPart * (real32)fractionalPartMultiplier;
|
||||
result.result = (real32)wholePartParsed.result + (real32)fractionalPartParsed.result * (real32)fractionalPartMultiplier;
|
||||
result.valid = true;
|
||||
}
|
||||
} else if (c > 0) {
|
||||
result = (real32)parsePositiveInt(str, lengthPointer);
|
||||
ParsePositiveIntResult intPartParsed = parsePositiveInt(str, lengthPointer);
|
||||
if (intPartParsed.valid) {
|
||||
result.result = (real32)intPartParsed.result;
|
||||
result.valid = true;
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user