package com.github.ruediste1.btrbck; public class CyclicCharacterBuffer { boolean filled; private int pos; private char[] buffer; public CyclicCharacterBuffer(int size) { buffer = new char[size]; } public String getTail() { StringBuilder sb = new StringBuilder(); if (filled) { sb.append(buffer, pos, buffer.length - pos); } sb.append(buffer, 0, pos); return sb.toString(); } public void append(char[] chars, int charsLength) { int countToAdd = charsLength; if (countToAdd > buffer.length) { countToAdd = buffer.length; } int charsOffset = charsLength - countToAdd; // add the part from the current position to the end of the buffer int firstCount = countToAdd; int remaining = buffer.length - pos; if (firstCount > remaining) { firstCount = buffer.length - pos; } System.arraycopy(chars, charsOffset, buffer, pos, firstCount); pos += firstCount; // add the remaining characters if (countToAdd > firstCount) { remaining = countToAdd - firstCount; System.arraycopy(chars, charsOffset + firstCount, buffer, 0, remaining); pos = remaining; filled = true; } } public void append(String string) { append(string.toCharArray()); } public void append(char[] buf) { append(buf, buf.length); } }