/*
* TClonesArray.java
*
* Created on January 14, 2001, 5:28 PM
*/
package hep.io.root.reps;
import hep.io.root.RootObject;
import hep.io.root.core.AbstractRootObject;
import hep.io.root.core.Clone;
import hep.io.root.core.Clones;
import hep.io.root.core.RootInput;
import hep.io.root.interfaces.TObjArray;
import hep.io.root.interfaces.TObject;
import java.io.IOException;
/**
*
* @author tonyj
* @version $Id: TClonesArrayRep.java 8584 2006-08-10 23:06:37Z duns $
*/
public abstract class TClonesArrayRep extends AbstractRootObject implements TObjArray
{
private String fClassName;
private String fName;
private TObject fObject;
private RootObject[] fArray;
private int fLowerBound;
private int fNobjects;
private int fSize;
public void readMembers(RootInput in) throws IOException
{
int v = in.readVersion(this);
fObject = (TObject) in.readObject("TObject");
//System.out.println("TClonesArray Version="+v+" fBits="+Integer.toHexString(fObject.getBits()));
fName = in.readObject("TString").toString();
fClassName = in.readObject("TString").toString();
fNobjects = in.readInt();
if (fNobjects < 0)
fNobjects = -fNobjects;
fLowerBound = in.readInt();
fArray = new RootObject[fNobjects];
//for (int i=0; i<500; i++)
//{
// int b = in.readByte();
// Character c = new Character((char) b);
// System.out.println("["+i+"] "+b+" "+Integer.toHexString(b)+" "+c);
//}
//System.exit(0);
if (in.getRootVersion() >= 30200)
in.skipBytes(4 * fNobjects);
try
{
String className = fClassName;
int pos = className.indexOf(';');
if (pos > 0)
className = className.substring(0, pos);
Class clcl = in.getFactory().getLoader().loadClass("hep.io.root.clones." + className);
Clones clones = (Clones) clcl.newInstance();
clones.read(in, fNobjects);
clcl = in.getFactory().getLoader().loadClass("hep.io.root.clone." + className);
for (int i = 0; i < fNobjects; i++)
{
Clone clone = (Clone) clcl.newInstance();
clone.setData(i, clones);
fArray[i] = clone;
}
fSize = fArray.length;
while ((fSize > 0) && (fArray[fSize - 1] == null))
fSize--; // trim trailing nulls
}
catch (ClassNotFoundException x)
{
throw new IOException("TClonesArray class not found: " + fClassName);
}
catch (Throwable x)
{
x.printStackTrace();
System.exit(0);
throw new IOException("TClonesArray instantiation exception: " + fClassName);
}
in.checkLength(this);
}
}