/*******************************************************************************
 * Copyright (c) 2007, 2009 Wind River Systems and others.
 *
 * This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License 2.0
 * which accompanies this distribution, and is available at
 * https://www.eclipse.org/legal/epl-2.0/
 *
 * SPDX-License-Identifier: EPL-2.0
 *
 * Contributors:
 *     Wind River Systems - initial API and implementation
 *******************************************************************************/
package org.eclipse.cdt.dsf.debug.internal.ui.disassembly.text;

import java.io.IOException;

/**
 * IFileRider
 */
public interface IFileRider {

	/** Set rider to position
	 * @param pos is normalized to be in range [0, f.length()]
	 */
	public abstract void seek(int pos) throws IOException;

	/**
	 * Write a char.
	 * @param c
	 */
	public abstract void writeChar(char c) throws IOException;

	/**
	 * Write a character array.
	 * @param buf
	 * @throws IOException
	 */
	public abstract void writeChars(char[] buf) throws IOException;

	/**
	 * Write n characters of an array of characters.
	 * @param buf
	 * @param n
	 * @throws IOException
	 */
	public abstract void writeChars(char[] buf, int n) throws IOException;

	/**
	 * Write n characters of an array of characters starting at an offset.
	 * @param buf
	 * @param off
	 * @param n
	 * @throws IOException
	 */
	public abstract void writeChars(char[] buf, int off, int n) throws IOException;

	/**
	 * Write n characters of a String starting at an offset.
	 * @param buf
	 * @param off
	 * @param n
	 * @throws IOException
	 */
	public abstract void writeChars(String buf, int off, int n) throws IOException;

	/**
	 * Read next character.
	 * @return next char in buffer.
	 * @throws IOException
	 */
	public abstract char readChar() throws IOException;

	/**
	 * Read as much characters as possible into a char array.
	 * @param buf
	 * @throws IOException
	 */
	public abstract void readChars(char[] buf) throws IOException;

	/**
	 * Read n characters into character array.
	 * @param buf
	 * @param n
	 * @throws IOException
	 */
	public abstract void readChars(char[] buf, int n) throws IOException;

	/**
	 * Read n characters into char array.
	 * @param buf
	 * @param off
	 * @param n
	 * @throws IOException
	 */
	public abstract void readChars(char[] buf, int off, int n) throws IOException;

	/**
	 * Read n characters into StringBuffer.
	 * @param buf
	 * @param from
	 * @param n
	 * @throws IOException
	 */
	public abstract void readChars(StringBuffer buf, int n) throws IOException;

	/**
	 * @return length of file
	 */
	public abstract int length();

	/**
	 * @return length limit of file
	 */
	public abstract int limit();

	/**
	 * @return whether this rider is readonly or not
	 */
	public abstract boolean isReadonly();

}
