static CharacterClassIterator stringToCharacterClassIterator(S s) { ret new stringToCharacterClassIterator_C(s); } sclass stringToCharacterClassIterator_C extends CharacterClassIterator { S s; int i, l; *() {} *(S *s) { l = l(s); } // no check because of method contract void acceptChar(char c) { ++i; } bool canEndHere() { ret i >= l; } bool canAcceptChar(char c) { ret i < l && s.charAt(i) == c; } CharRange acceptedCharRange() { ret i >= l ? null : singletonCharRange(s.charAt(i)); } }