Class TruffleStringIterator

java.lang.Object
com.oracle.truffle.api.strings.TruffleStringIterator

public final class TruffleStringIterator extends Object
An iterator object that allows iterating over a TruffleString's codepoints, without having to re-calculate codepoint indices on every access.

Usage Example:



abstract static class SomeNode extends Node {

    @Specialization
    static void someSpecialization(
                    TruffleString string,
                    @Cached TruffleString.CreateCodePointIteratorNode createCodePointIteratorNode,
                    @Cached TruffleStringIterator.NextNode nextNode,
                    @Cached TruffleString.CodePointLengthNode codePointLengthNode,
                    @Cached TruffleString.CodePointAtIndexNode codePointAtIndexNode) {

        // iterating over a string's code points using TruffleStringIterator
        TruffleStringIterator iterator = createCodePointIteratorNode.execute(string, Encoding.UTF_8);
        while (iterator.hasNext()) {
            System.out.printf("%x%n", nextNode.execute(iterator));
        }

        // uncached variant:
        TruffleStringIterator iterator2 = string.createCodePointIteratorUncached(Encoding.UTF_8);
        while (iterator2.hasNext()) {
            System.out.printf("%x%n", iterator2.nextUncached());
        }

        // suboptimal variant: using CodePointAtIndexNode in a loop
        int codePointLength = codePointLengthNode.execute(string, Encoding.UTF_8);
        for (int i = 0; i < codePointLength; i++) {
            // performance problem: codePointAtIndexNode may have to calculate the byte index
            // corresponding
            // to codepoint index i for every loop iteration
            System.out.printf("%x%n", codePointAtIndexNode.execute(string, i, Encoding.UTF_8));
        }
    }
}


Since:
22.1
  • Method Details