view dwt/internal/image/PngInputStream.d @ 6:b903c16b6f48

Removed throws decls
author Frank Benoit <benoit@tionex.de>
date Wed, 27 Aug 2008 14:10:03 +0200
parents 1a8b3cb347e0
children 5123b17c98ef
line wrap: on
line source

/*******************************************************************************
 * Copyright (c) 2000, 2006 IBM Corporation and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *     IBM Corporation - initial API and implementation
 *******************************************************************************/
module dwt.internal.image;

import java.io.IOException;
import java.io.InputStream;

public class PngInputStream : InputStream {
    PngChunkReader reader;
    PngChunk chunk;
    int offset, length;
    
    final static int DATA_OFFSET = 8; 
    
public this(PngIdatChunk chunk, PngChunkReader reader) {
    this.chunk = chunk;
    this.reader = reader;
    length = chunk.getLength();
    offset = 0;
}

private bool checkChunk() {
    while (offset is length) {
        chunk = reader.readNextChunk();
        if (chunk is null) throw new IOException();
        if (chunk.getChunkType() is PngChunk.CHUNK_IEND) return false;
        if (chunk.getChunkType() !is PngChunk.CHUNK_IDAT) throw new IOException();
        length = chunk.getLength();
        offset = 0;
    }
    return true;
}

public void close() {
    chunk = null;
}

public int read() {
    if (chunk is null) throw new IOException();
    if (offset is length && !checkChunk()) return -1;
    int b = chunk.reference[DATA_OFFSET + offset] & 0xFF;
    offset++;
    return b;
}

public int read(byte[] b, int off, int len) {
    if (chunk is null) throw new IOException();
    if (offset is length && !checkChunk()) return -1;
    len = Math.min(len, length - offset);
    System.arraycopy(chunk.reference, DATA_OFFSET + offset, b, off, len);
    offset += len;
    return len;
}
}