by Talon1024 » Wed Aug 22, 2018 3:58 am
Why? FString::LastIndexOf is weird. For example, if you run this ZScript code:
Code: Select all
class StringTestEventHandler : EventHandler {
override void PlayerEntered(PlayerEvent e) {
static const String testStrings[] = { "hello", "hello.obj", "hello.obj.world", "hello.obj.obj.obj", "hello.obj.obj.obj.world" };
for (int i = 0; i < 5; i++) {
String test = testStrings[i];
Console.Printf("Test string: \"%s\"\n", test);
Console.Printf("LastIndexOf(\".obj\"): %d\n", test.LastIndexOf(".obj"));
Console.Printf("LastIndexOf(\".\"): %d\n", test.LastIndexOf("."));
Console.Printf("LastIndexOf(\"eeee\"): %d\n", test.LastIndexOf("eeee"));
Console.Printf("LastIndexOf(\"eeeeeeeeeeeeeeeeeeeeeeeeeeeeee\"): %d\n", test.LastIndexOf("eeeeeeeeeeeeeeeeeeeeeeeeeeeeee"));
}
}
}
The results from the current master branch are:
Code: Select all
Test string: "hello"
LastIndexOf(".obj"): -1
LastIndexOf("."): -1
LastIndexOf("eeee"): -1
LastIndexOf("eeeeeeeeeeeeeeeeeeeeeeeeeeeeee"): -1
Test string: "hello.obj"
LastIndexOf(".obj"): 8
LastIndexOf("."): 5
LastIndexOf("eeee"): -1
LastIndexOf("eeeeeeeeeeeeeeeeeeeeeeeeeeeeee"): -1
Test string: "hello.obj.world"
LastIndexOf(".obj"): 8
LastIndexOf("."): 9
LastIndexOf("eeee"): -1
LastIndexOf("eeeeeeeeeeeeeeeeeeeeeeeeeeeeee"): -1
Test string: "hello.obj.obj.obj"
LastIndexOf(".obj"): 16
LastIndexOf("."): 13
LastIndexOf("eeee"): -1
LastIndexOf("eeeeeeeeeeeeeeeeeeeeeeeeeeeeee"): -1
Test string: "hello.obj.obj.obj.world"
LastIndexOf(".obj"): 16
LastIndexOf("."): 17
LastIndexOf("eeee"): -1
LastIndexOf("eeeeeeeeeeeeeeeeeeeeeeeeeeeeee"): -1
I'm used to the way String.lastIndexOf works in JavaScript, and I'm sure most other developers are as well. The results from this code submission are:
Code: Select all
Test string: "hello"
LastIndexOf(".obj"): -1
LastIndexOf("."): -1
LastIndexOf("eeee"): -1
LastIndexOf("eeeeeeeeeeeeeeeeeeeeeeeeeeeeee"): -1
Test string: "hello.obj"
LastIndexOf(".obj"): 5
LastIndexOf("."): 5
LastIndexOf("eeee"): -1
LastIndexOf("eeeeeeeeeeeeeeeeeeeeeeeeeeeeee"): -1
Test string: "hello.obj.world"
LastIndexOf(".obj"): 5
LastIndexOf("."): 9
LastIndexOf("eeee"): -1
LastIndexOf("eeeeeeeeeeeeeeeeeeeeeeeeeeeeee"): -1
Test string: "hello.obj.obj.obj"
LastIndexOf(".obj"): 13
LastIndexOf("."): 13
LastIndexOf("eeee"): -1
LastIndexOf("eeeeeeeeeeeeeeeeeeeeeeeeeeeeee"): -1
Test string: "hello.obj.obj.obj.world"
LastIndexOf(".obj"): 13
LastIndexOf("."): 17
LastIndexOf("eeee"): -1
LastIndexOf("eeeeeeeeeeeeeeeeeeeeeeeeeeeeee"): -1
I just want to make sure I'm not breaking anything by making these changes.
Pull request:
https://github.com/coelckers/gzdoom/pull/555
Why? FString::LastIndexOf is weird. For example, if you run this ZScript code:
[code]
class StringTestEventHandler : EventHandler {
override void PlayerEntered(PlayerEvent e) {
static const String testStrings[] = { "hello", "hello.obj", "hello.obj.world", "hello.obj.obj.obj", "hello.obj.obj.obj.world" };
for (int i = 0; i < 5; i++) {
String test = testStrings[i];
Console.Printf("Test string: \"%s\"\n", test);
Console.Printf("LastIndexOf(\".obj\"): %d\n", test.LastIndexOf(".obj"));
Console.Printf("LastIndexOf(\".\"): %d\n", test.LastIndexOf("."));
Console.Printf("LastIndexOf(\"eeee\"): %d\n", test.LastIndexOf("eeee"));
Console.Printf("LastIndexOf(\"eeeeeeeeeeeeeeeeeeeeeeeeeeeeee\"): %d\n", test.LastIndexOf("eeeeeeeeeeeeeeeeeeeeeeeeeeeeee"));
}
}
}
[/code]
The results from the current master branch are:
[code]
Test string: "hello"
LastIndexOf(".obj"): -1
LastIndexOf("."): -1
LastIndexOf("eeee"): -1
LastIndexOf("eeeeeeeeeeeeeeeeeeeeeeeeeeeeee"): -1
Test string: "hello.obj"
LastIndexOf(".obj"): 8
LastIndexOf("."): 5
LastIndexOf("eeee"): -1
LastIndexOf("eeeeeeeeeeeeeeeeeeeeeeeeeeeeee"): -1
Test string: "hello.obj.world"
LastIndexOf(".obj"): 8
LastIndexOf("."): 9
LastIndexOf("eeee"): -1
LastIndexOf("eeeeeeeeeeeeeeeeeeeeeeeeeeeeee"): -1
Test string: "hello.obj.obj.obj"
LastIndexOf(".obj"): 16
LastIndexOf("."): 13
LastIndexOf("eeee"): -1
LastIndexOf("eeeeeeeeeeeeeeeeeeeeeeeeeeeeee"): -1
Test string: "hello.obj.obj.obj.world"
LastIndexOf(".obj"): 16
LastIndexOf("."): 17
LastIndexOf("eeee"): -1
LastIndexOf("eeeeeeeeeeeeeeeeeeeeeeeeeeeeee"): -1
[/code]
I'm used to the way String.lastIndexOf works in JavaScript, and I'm sure most other developers are as well. The results from this code submission are:
[code]Test string: "hello"
LastIndexOf(".obj"): -1
LastIndexOf("."): -1
LastIndexOf("eeee"): -1
LastIndexOf("eeeeeeeeeeeeeeeeeeeeeeeeeeeeee"): -1
Test string: "hello.obj"
LastIndexOf(".obj"): 5
LastIndexOf("."): 5
LastIndexOf("eeee"): -1
LastIndexOf("eeeeeeeeeeeeeeeeeeeeeeeeeeeeee"): -1
Test string: "hello.obj.world"
LastIndexOf(".obj"): 5
LastIndexOf("."): 9
LastIndexOf("eeee"): -1
LastIndexOf("eeeeeeeeeeeeeeeeeeeeeeeeeeeeee"): -1
Test string: "hello.obj.obj.obj"
LastIndexOf(".obj"): 13
LastIndexOf("."): 13
LastIndexOf("eeee"): -1
LastIndexOf("eeeeeeeeeeeeeeeeeeeeeeeeeeeeee"): -1
Test string: "hello.obj.obj.obj.world"
LastIndexOf(".obj"): 13
LastIndexOf("."): 17
LastIndexOf("eeee"): -1
LastIndexOf("eeeeeeeeeeeeeeeeeeeeeeeeeeeeee"): -1[/code]
I just want to make sure I'm not breaking anything by making these changes.
Pull request: https://github.com/coelckers/gzdoom/pull/555