mirror of
https://github.com/fluencelabs/assemblyscript
synced 2025-06-22 19:21:47 +00:00
same for padStart
This commit is contained in:
@ -303,27 +303,24 @@ export class String extends StringBase {
|
||||
return REGISTER<String>(out);
|
||||
}
|
||||
|
||||
padStart(targetLength: i32, padString: String = changetype<String>(" ")): String {
|
||||
padStart(targetLength: i32, padString: string = " "): String {
|
||||
assert(this !== null);
|
||||
var length = this.length;
|
||||
var padLen = padString.length;
|
||||
if (targetLength < length || !padLen) return this;
|
||||
var len = targetLength - length;
|
||||
var out = ALLOC(<usize>targetLength << 1);
|
||||
if (len > padLen) {
|
||||
let count = (len - 1) / padLen;
|
||||
let base = count * padLen;
|
||||
let rest = len - base;
|
||||
memory.repeat(out, changetype<usize>(padString), <usize>padString.length << 1, count);
|
||||
if (rest) {
|
||||
memory.copy(out + (<usize>base << 1), changetype<usize>(padString), <usize>rest << 1);
|
||||
}
|
||||
var thisSize = <usize>this.length << 1;
|
||||
var targetSize = <usize>targetLength << 1;
|
||||
var padSize = <usize>padString.length << 1;
|
||||
if (targetSize < thisSize || !padSize) return this;
|
||||
var prependSize = targetSize - thisSize;
|
||||
var out = ALLOC(targetSize);
|
||||
if (prependSize > padSize) {
|
||||
let repeatCount = (prependSize - 2) / padSize;
|
||||
let restBase = repeatCount * padSize;
|
||||
let restSize = prependSize - restBase;
|
||||
memory.repeat(out, changetype<usize>(padString), padSize, repeatCount);
|
||||
memory.copy(out + restBase, changetype<usize>(padString), restSize);
|
||||
} else {
|
||||
memory.copy(out, changetype<usize>(padString), <usize>len << 1);
|
||||
}
|
||||
if (length) {
|
||||
memory.copy(out + (<usize>len << 1), changetype<usize>(this), <usize>length << 1);
|
||||
memory.copy(out, changetype<usize>(padString), prependSize);
|
||||
}
|
||||
memory.copy(out + prependSize, changetype<usize>(this), thisSize);
|
||||
return REGISTER<String>(out);
|
||||
}
|
||||
|
||||
@ -341,9 +338,7 @@ export class String extends StringBase {
|
||||
let restBase = repeatCount * padSize;
|
||||
let restSize = appendSize - restBase;
|
||||
memory.repeat(out + thisSize, changetype<usize>(padString), padSize, repeatCount);
|
||||
if (restSize) {
|
||||
memory.copy(out + thisSize + restBase, changetype<usize>(padString), restSize);
|
||||
}
|
||||
memory.copy(out + thisSize + restBase, changetype<usize>(padString), restSize);
|
||||
} else {
|
||||
memory.copy(out + thisSize, changetype<usize>(padString), appendSize);
|
||||
}
|
||||
|
Reference in New Issue
Block a user