mirror of
https://github.com/fluencelabs/assemblyscript
synced 2025-05-10 14:18:01 +00:00
Add string comparison operator overloads (#64)
This commit is contained in:
parent
5e20bed09a
commit
e790eb757f
@ -127,6 +127,91 @@ export class String {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@operator("!=")
|
||||||
|
private static __ne(left: String, right: String): bool {
|
||||||
|
return !this.__eq(left, right);
|
||||||
|
}
|
||||||
|
|
||||||
|
@operator(">")
|
||||||
|
private static __gt(left: String, right: String): bool {
|
||||||
|
if (!changetype<usize>(left) || !changetype<usize>(right)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
var leftLength = left.length;
|
||||||
|
var rightLength = right.length;
|
||||||
|
|
||||||
|
if (!leftLength) return false;
|
||||||
|
if (!rightLength) return true;
|
||||||
|
|
||||||
|
var length = <usize>min<i32>(leftLength, rightLength);
|
||||||
|
return compare_memory(
|
||||||
|
changetype<usize>(left) + HEADER_SIZE,
|
||||||
|
changetype<usize>(right) + HEADER_SIZE,
|
||||||
|
length << 1
|
||||||
|
) > 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@operator(">=")
|
||||||
|
private static __gte(left: String, right: String): bool {
|
||||||
|
if (!changetype<usize>(left) || !changetype<usize>(right)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
var leftLength = left.length;
|
||||||
|
var rightLength = right.length;
|
||||||
|
|
||||||
|
if (!leftLength) return !rightLength;
|
||||||
|
if (!rightLength) return true;
|
||||||
|
|
||||||
|
var length = <usize>min<i32>(leftLength, rightLength);
|
||||||
|
return compare_memory(
|
||||||
|
changetype<usize>(left) + HEADER_SIZE,
|
||||||
|
changetype<usize>(right) + HEADER_SIZE,
|
||||||
|
length << 1
|
||||||
|
) >= 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@operator("<")
|
||||||
|
private static __lt(left: String, right: String): bool {
|
||||||
|
if (!changetype<usize>(left) || !changetype<usize>(right)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
var leftLength = left.length;
|
||||||
|
var rightLength = right.length;
|
||||||
|
|
||||||
|
if (!rightLength) return false;
|
||||||
|
if (!leftLength) return true;
|
||||||
|
|
||||||
|
var length = <usize>min<i32>(leftLength, rightLength);
|
||||||
|
return compare_memory(
|
||||||
|
changetype<usize>(left) + HEADER_SIZE,
|
||||||
|
changetype<usize>(right) + HEADER_SIZE,
|
||||||
|
length << 1
|
||||||
|
) < 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@operator("<=")
|
||||||
|
private static __lte(left: String, right: String): bool {
|
||||||
|
if (!changetype<usize>(left) || !changetype<usize>(right)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
var leftLength = left.length;
|
||||||
|
var rightLength = right.length;
|
||||||
|
|
||||||
|
if (!rightLength) return !leftLength;
|
||||||
|
if (!leftLength) return true;
|
||||||
|
|
||||||
|
var length = <usize>min<i32>(leftLength, rightLength);
|
||||||
|
return compare_memory(
|
||||||
|
changetype<usize>(left) + HEADER_SIZE,
|
||||||
|
changetype<usize>(right) + HEADER_SIZE,
|
||||||
|
length << 1
|
||||||
|
) <= 0;
|
||||||
|
}
|
||||||
|
|
||||||
includes(searchString: String, position: i32 = 0): bool {
|
includes(searchString: String, position: i32 = 0): bool {
|
||||||
return this.indexOf(searchString, position) != -1;
|
return this.indexOf(searchString, position) != -1;
|
||||||
}
|
}
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -3,6 +3,7 @@ import "allocator/arena";
|
|||||||
// preliminary
|
// preliminary
|
||||||
|
|
||||||
var str: string = "hi, I'm a string";
|
var str: string = "hi, I'm a string";
|
||||||
|
var nullStr: String;
|
||||||
|
|
||||||
// exactly once in static memory
|
// exactly once in static memory
|
||||||
assert(changetype<usize>(str) == changetype<usize>("hi, I'm a string"));
|
assert(changetype<usize>(str) == changetype<usize>("hi, I'm a string"));
|
||||||
@ -36,3 +37,26 @@ assert(parseFloat(".1foobar") == 0.1);
|
|||||||
|
|
||||||
var c = "a" + "b";
|
var c = "a" + "b";
|
||||||
assert(c == "ab");
|
assert(c == "ab");
|
||||||
|
assert(c != "a");
|
||||||
|
assert("" == "");
|
||||||
|
assert("" != nullStr);
|
||||||
|
|
||||||
|
assert("b" > "a");
|
||||||
|
assert("ba" > "a");
|
||||||
|
assert("ba" >= "aa");
|
||||||
|
assert("ba" > "ab");
|
||||||
|
assert(!("ba" < "ab"));
|
||||||
|
|
||||||
|
assert(!("b" < nullStr));
|
||||||
|
assert(!(nullStr < "b"));
|
||||||
|
|
||||||
|
assert("abc" > "");
|
||||||
|
assert("" < "abc");
|
||||||
|
assert("abc" >= "");
|
||||||
|
assert("" <= "abc");
|
||||||
|
assert(!("abc" < ""));
|
||||||
|
assert(!("" > "abc"));
|
||||||
|
assert(!("" < ""));
|
||||||
|
assert(!("" > ""));
|
||||||
|
assert("" >= "");
|
||||||
|
assert("" <= "");
|
||||||
|
File diff suppressed because it is too large
Load Diff
Loading…
x
Reference in New Issue
Block a user