Skip to content

Commit ac589a3

Browse files
committed
add bytearray.rstrip
1 parent b0e08fe commit ac589a3

File tree

1 file changed

+52
-0
lines changed

1 file changed

+52
-0
lines changed

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/bytes/ByteArrayBuiltins.java

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -708,4 +708,56 @@ Object doGeneric(@SuppressWarnings("unused") Object self) {
708708
return PNotImplemented.NOT_IMPLEMENTED;
709709
}
710710
}
711+
712+
@Builtin(name = "rstrip", minNumOfPositionalArgs = 1, maxNumOfPositionalArgs = 2, keywordArguments = {"bytes"})
713+
@GenerateNodeFactory
714+
abstract static class RStripNode extends PythonBuiltinNode {
715+
@Specialization
716+
@TruffleBoundary
717+
PByteArray strip(PByteArray self, @SuppressWarnings("unused") PNone bytes,
718+
@Cached("create()") BytesNodes.ToBytesNode toBytesNode) {
719+
byte[] bs = toBytesNode.execute(self);
720+
int len = bs.length;
721+
for (int i = bs.length - 1; i >= 0; i--) {
722+
if (Character.isWhitespace(bs[i])) {
723+
len--;
724+
} else {
725+
break;
726+
}
727+
}
728+
return newBytesUpTo(bs, len);
729+
}
730+
731+
@Specialization
732+
@TruffleBoundary
733+
PByteArray strip(PByteArray self, PBytes bytes,
734+
@Cached("create()") BytesNodes.ToBytesNode selfToBytesNode,
735+
@Cached("create()") BytesNodes.ToBytesNode otherToBytesNode) {
736+
byte[] stripBs = selfToBytesNode.execute(bytes);
737+
byte[] bs = otherToBytesNode.execute(self);
738+
int len = bs.length;
739+
outer: for (int i = bs.length - 1; i >= 0; i--) {
740+
for (byte b : stripBs) {
741+
if (b == bs[i]) {
742+
len--;
743+
} else {
744+
break outer;
745+
}
746+
}
747+
}
748+
return newBytesUpTo(bs, len);
749+
}
750+
751+
private PByteArray newBytesUpTo(byte[] bs, int len) {
752+
byte[] out;
753+
if (len != bs.length) {
754+
out = new byte[len];
755+
System.arraycopy(bs, 0, out, 0, len);
756+
} else {
757+
out = bs;
758+
}
759+
return factory().createByteArray(out);
760+
}
761+
}
762+
711763
}

0 commit comments

Comments
 (0)