package st.gravel.support.jvm; import java.nio.CharBuffer; public class ReadStreamExtensions { public static boolean atEnd(CharBuffer receiver) { return receiver.remaining() == 0; } public static Character next(CharBuffer receiver) { if (atEnd(receiver)) return null; return receiver.get(); } public static boolean peekFor_(CharBuffer receiver, char ch) { if (atEnd(receiver)) return false; receiver.mark(); if (receiver.get() == ch) { return true; } receiver.reset(); return false; } public static Character peek(CharBuffer receiver) { if (atEnd(receiver)) return null; return receiver.get(receiver.position()); } public static Object skip_(CharBuffer receiver, int size) { receiver.position(receiver.position() + size); return receiver; } public static String next_(CharBuffer receiver, int count) { StringBuilder builder = new StringBuilder(); for (int i = 0; i < count; i++) { builder.append(receiver.get()); } return builder.toString(); } public static String upTo_(CharBuffer receiver, char c) { final StringBuilder builder = new StringBuilder(); while (!atEnd(receiver)) { final Character next = next(receiver); if (c == next) return builder.toString(); builder.append(next); } return builder.toString(); } public static String upToEnd(CharBuffer receiver) { final StringBuilder builder = new StringBuilder(); while (!atEnd(receiver)) { final Character next = next(receiver); builder.append(next); } return builder.toString(); } public static int position(CharBuffer receiver) { return receiver.position(); } public static CharBuffer position_(CharBuffer receiver, int newPosition) { receiver.position(newPosition); return receiver; } public static CharBuffer setToEnd(CharBuffer receiver) { receiver.position(receiver.limit()); return receiver; } public static String contents(CharBuffer receiver) { int oldPos = receiver.position(); receiver.rewind(); String string = receiver.toString(); receiver.position(oldPos); return string; } public static CharBuffer reset(CharBuffer receiver) { receiver.rewind(); return receiver; } }