All Downloads are FREE. Search and download functionalities are using the official Maven repository.

src.it.unimi.dsi.io.DebugInputBitStream Maven / Gradle / Ivy

Go to download

The DSI utilities are a mishmash of classes accumulated during the last twenty years in projects developed at the DSI (Dipartimento di Scienze dell'Informazione, i.e., Information Sciences Department), now DI (Dipartimento di Informatica, i.e., Informatics Department), of the Universita` degli Studi di Milano.

There is a newer version: 2.7.3
Show newest version
/*
 * DSI utilities
 *
 * Copyright (C) 2006-2020 Sebastiano Vigna
 *
 *  This library is free software; you can redistribute it and/or modify it
 *  under the terms of the GNU Lesser General Public License as published by the Free
 *  Software Foundation; either version 3 of the License, or (at your option)
 *  any later version.
 *
 *  This library is distributed in the hope that it will be useful, but
 *  WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
 *  or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License
 *  for more details.
 *
 *  You should have received a copy of the GNU Lesser General Public License
 *  along with this program; if not, see .
 *
 */

package it.unimi.dsi.io;

import java.io.IOException;
import java.io.PrintStream;

import it.unimi.dsi.lang.MutableString;


/** A debugging wrapper for input bit streams.
 *
 * 

This class can be used to wrap an input bit stream. The semantics of the * resulting read operations is unchanged, but each operation will be logged. The * conventions are the same as those of {@link it.unimi.dsi.io.DebugOutputBitStream}, * with the following additions: * *

*
! *
{@link InputBitStream#reset() reset()}; *
+> *
{@link InputBitStream#skip(long) skip()}. *
* * @author Sebastiano Vigna * @since 1.1 */ public class DebugInputBitStream extends InputBitStream { private final PrintStream pw; private final InputBitStream ibs; /** Creates a new debug input bit stream wrapping a given input bit stream and logging on a given writer. * * @param ibs the input bit stream to wrap. * @param pw a print stream that will receive the logging data. */ public DebugInputBitStream(final InputBitStream ibs, final PrintStream pw) { this.ibs = ibs; this.pw = pw; pw.print("["); } /** Creates a new debug input bit stream wrapping a given input bit stream and logging on standard error. * * @param ibs the input bit stream to wrap. */ public DebugInputBitStream(final InputBitStream ibs) { this(ibs, System.err); } @Override public void align() { pw.print(" |"); ibs.align(); } @Override public long available() throws IOException { return ibs.available(); } @Override public void close() throws IOException { pw.print(" |]"); ibs.close(); } @Override public void flush() { pw.print(" |"); ibs.flush(); } @Override public void position(final long position) throws IOException { pw.print(" ->" + position); ibs.position(position); } @Override public void read(final byte[] bits, final int len) throws IOException { ibs.read(bits, len); final MutableString s = new MutableString(" {"); for (final byte bit : bits) s.append(DebugOutputBitStream.byte2Binary(bit)); pw.print(s.length(len).append("}")); } @Override public int readBit() throws IOException { final int bit = ibs.readBit(); pw.print(" {" + bit + "}"); return bit; } @Override public long readBits() { return ibs.readBits(); } @Override public void readBits(final long readBits) { ibs.readBits(readBits); } @Override public int readDelta() throws IOException { final int x = ibs.readDelta(); pw.print(" {d:" + x + "}"); return x; } @Override public int readGamma() throws IOException { final int x = ibs.readGamma(); pw.print(" {g:" + x + "}"); return x; } @Override public int readGolomb(final int b, final int log2b) throws IOException { final int x = ibs.readGolomb(b, log2b); pw.print(" {G:" + x + ":" + b + "}"); return x; } @Override public int readGolomb(final int b) throws IOException { final int x = ibs.readGolomb(b); pw.print(" {G:" + x + ":" + b + "}"); return x; } @Override public int readInt(final int len) throws IOException { final int x = ibs.readInt(len); pw.print(" {" + DebugOutputBitStream.int2Binary(x, len) + "}"); return x; } @Override public long readLong(final int len) throws IOException { final long x = ibs.readLong(len); pw.print(" {" + DebugOutputBitStream.int2Binary(x, len) + "}"); return x; } @Override public long readLongDelta() throws IOException { final long x = ibs.readLongDelta(); pw.print(" {d:" + x + "}"); return x; } @Override public long readLongGamma() throws IOException { final long x = ibs.readLongGamma(); pw.print(" {g:" + x + "}"); return x; } @Override public long readLongGolomb(final long b, final int log2b) throws IOException { final long x = ibs.readLongGolomb(b, log2b); pw.print(" {G:" + x + ":" + b + "}"); return x; } @Override public long readLongGolomb(final long b) throws IOException { final long x = ibs.readLongGolomb(b); pw.print(" {G:" + x + ":" + b + "}"); return x; } @Override public long readLongMinimalBinary(final long b, final int log2b) throws IOException { final long x = ibs.readLongMinimalBinary(b, log2b); pw.print(" {m:" + x + "<" + b + "}"); return x; } @Override public long readLongMinimalBinary(final long b) throws IOException { final long x = ibs.readLongMinimalBinary(b); pw.print(" {m:" + x + "<" + b + "}"); return x; } @Override public long readLongNibble() throws IOException { final long x = ibs.readLongNibble(); pw.print(" {N:" + x + "}"); return x; } @Override public long readLongSkewedGolomb(final long b) throws IOException { final long x = ibs.readLongSkewedGolomb(b); pw.print(" {SG:" + x + ":" + b + "}"); return x; } @Override public long readLongUnary() throws IOException { final long x = ibs.readLongUnary(); pw.print(" {U:" + x + "}"); return x; } @Override public long readLongZeta(final int k) throws IOException { final long x = ibs.readLongZeta(k); pw.print(" {z" + k + ":" + x + "}"); return x; } @Override public int readMinimalBinary(final int b, final int log2b) throws IOException { final int x = ibs.readMinimalBinary(b, log2b); pw.print(" {m:" + x + "<" + b + "}"); return x; } @Override public int readMinimalBinary(final int b) throws IOException { final int x = ibs.readMinimalBinary(b); pw.print(" {m:" + x + "<" + b + "}"); return x; } @Override public int readNibble() throws IOException { final int x = ibs.readNibble(); pw.print(" {N:" + x + "}"); return x; } @Override public int readSkewedGolomb(final int b) throws IOException { final int x = ibs.readSkewedGolomb(b); pw.print(" {SG:" + x + ":" + b + "}"); return x; } @Override public int readUnary() throws IOException { final int x = ibs.readUnary(); pw.print(" {U:" + x + "}"); return x; } @Override public int readZeta(final int k) throws IOException { final int x = ibs.readZeta(k); pw.print(" {z" + k + ":" + x + "}"); return x; } @Override public void reset() throws IOException { pw.print(" {!}"); ibs.reset(); } @Override @Deprecated public int skip(final int n) { pw.print(" {+>" + n + "}"); return ibs.skip(n); } @Override public long skip(final long n) throws IOException { pw.print(" {+>" + n + "}"); return ibs.skip(n); } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy