jxl.write.biff.IndexRecord Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of jxl Show documentation
Show all versions of jxl Show documentation
JExcelApi is a java library which provides the ability to read, write, and modify Microsoft Excel spreadsheets.
The newest version!
/*********************************************************************
*
* Copyright (C) 2002 Andrew Khan
*
* 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 2.1 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 library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
***************************************************************************/
package jxl.write.biff;
import jxl.biff.Type;
import jxl.biff.IntegerHelper;
import jxl.biff.WritableRecordData;
/**
* Index into the cell rows in an worksheet
*/
class IndexRecord extends WritableRecordData
{
/**
* The binary data
*/
private byte[] data;
/**
* The numbe of rows served by this index record
*/
private int rows;
/**
* The position of the BOF record in the excel output stream
*/
private int bofPosition;
/**
* The number of blocks needed to hold all the rows
*/
private int blocks;
/**
* The position of the current 'pointer' within the byte array
*/
private int dataPos;
/**
* Constructor
*
* @param pos the position of the BOF record
* @param bl the number of blocks
* @param r the number of rows
*/
public IndexRecord(int pos, int r, int bl)
{
super(Type.INDEX);
bofPosition = pos;
rows = r;
blocks = bl;
// Allocate the amount of bytes required to hold all the blocks
data = new byte[16 + 4 * blocks];
dataPos = 16;
}
/**
* Gets the binary data for output. This writes out an empty data block, and
* the information is filled in later on when the information becomes
* available
*
* @return the binary data
*/
protected byte[] getData()
{
IntegerHelper.getFourBytes(rows, data, 8);
return data;
}
/**
* Adds another index record into the array
*
* @param pos the position in the output file
*/
void addBlockPosition(int pos)
{
IntegerHelper.getFourBytes(pos - bofPosition, data, dataPos);
dataPos += 4;
}
/**
* Sets the position of the data start. This happens to be the position
* of the DEFCOLWIDTH record
*/
void setDataStartPosition(int pos)
{
IntegerHelper.getFourBytes(pos - bofPosition, data, 12);
}
}