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); } *(S *s, int *i, int *l) {} // no check because of method contract CharacterClassIterator acceptChar(char c) { ++i; this; } 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)); } CharacterClassIterator cloneCCI() { ret new stringToCharacterClassIterator_C(s, i, l); } }