/*
* #%L
* OME library for reading the JPEG XR file format.
* %%
* Copyright (C) 2013 - 2015 Open Microscopy Environment:
* - Board of Regents of the University of Wisconsin-Madison
* - Glencoe Software, Inc.
* - University of Dundee
* %%
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as
* published by the Free Software Foundation, either version 2 of the
* License, or (at your option) any later version.
*
* This program 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public
* License along with this program. If not, see
* <http://www.gnu.org/licenses/gpl-2.0.html>.
* #L%
*/
package ome.jxr.ifd;
import java.util.ArrayList;
import java.util.List;
import ome.jxr.constants.IFD;
/**
* Container holding information about IFD entries. Each individual IFD
* container is a unique group of IFD entries and the object of this class is
* aware of the count of entries in itself.
*
* <dl>
*
* @author Blazej Pindelski bpindelski at dundee.ac.uk
*/
public class IFDContainer {
private long offset;
private short numberOfEntries;
private List<Long> entryOffsets = new ArrayList<Long>();
public IFDContainer(long offset, short numberOfEntries) {
this.offset = offset;
this.numberOfEntries = numberOfEntries;
for (int i=0; i<numberOfEntries; i++) {
entryOffsets.add(getOffsetOfFirstEntry() + i*IFD.ENTRY_SIZE);
}
}
/**
* Returns the offset from the start of a data stream to the address where
* this IFD Container begins.
*
* @return See above.
*/
public long getOffsetOfContainer() {
return offset;
}
/**
* Returns the offset from the start of a data stream to the address where
* this IFD Container begins, skipping {@link IFD#ENTRIES_COUNT_SIZE} bytes
* that hold the Entry count for this container.
*
* @return See above.
*/
public long getOffsetOfFirstEntry() {
return offset + IFD.ENTRIES_COUNT_SIZE;
}
/**
* Returns the list of offsets counted from the beginning of a data stream.
* Each offset points to an individual IFD Entry in this Container.
*
* @return See above.
*/
public List<Long> getEntryOffsets() {
return entryOffsets;
}
/**
* Returns the number of entries in this IFD Container.
*
* @return See above.
*/
public short getNumberOfEntries() {
return numberOfEntries;
}
@Override
public String toString() {
return "IFDContainer [offset=" + offset + ", numberOfEntries="
+ numberOfEntries + "]";
}
}