// Decompiled by Jad v1.5.8e. Copyright 2001 Pavel Kouznetsov.
// Jad home page: http://www.geocities.com/kpdus/jad.html
// Decompiler options: packimports(3) 
// Source File Name:   AbstractRootObject.java

package hep.rootio.implementation;

import hep.rootio.*;

import java.io.IOException;
import java.io.PrintStream;
import java.util.Enumeration;
import java.util.Hashtable;

public abstract class AbstractRootObject
    implements RootObjectRepresentation
{

    public AbstractRootObject()
    {
        expectedEnd = 0L;
        hash = new Hashtable();
        mangledHash = new Hashtable();
        superClasses = new RootObjectRepresentation[10];
    }

    public void init(RootClass rootClass)
    {
        this.rootClass = rootClass;
        superClasses = createSuperClasses();
    }

    private RootObjectRepresentation[] createSuperClasses()
    {
        RootClass superClasses[] = rootClass.getSuperClasses();
        if(superClasses.length == 0)
            return noSuperClasses;
        RootObjectRepresentation result[] = new RootObjectRepresentation[superClasses.length];
        for(int i = 0; i < result.length; i++)
            result[i] = superClasses[i].newInstance();

        return result;
    }

    public void read(RootInput in)
        throws IOException
    {
        try
        {
            int v = in.readVersion(this);
            RootObjectRepresentation superClasses[] = getSuperClasses();
            for(int i = 0; i < superClasses.length; i++)
                superClasses[i].read(in);

            readMembers(in, v);
            in.checkLength(this);
        }
        catch(IOException x)
        {
            System.err.println("Error occured while reading " + getRootClass());
            dump();
            throw x;
        }
    }

    protected abstract void readMembers(RootInput rootinput, int i)
        throws IOException;

    protected void put(String name, Object s)
    {
        if(s != null)
        {
            hash.put(name, s);
            mangledHash.put(nameMangler.mangleMember(name), s);
        }
    }

    public Enumeration members()
    {
        return hash.keys();
    }

    public int nMembers()
    {
        return hash.size();
    }

    public Object get(String name)
    {
        Object result = hash.get(name);
        if(result != null)
            return result;
        RootObjectRepresentation superClasses[] = getSuperClasses();
        for(int i = superClasses.length - 1; i >= 0; i--)
        {
            result = superClasses[i].get(name);
            if(result != null)
                return result;
        }

        return null;
    }

    public Object getMangled(String name)
    {
        Object result = mangledHash.get(name);
        if(result != null)
            return result;
        RootObjectRepresentation superClasses[] = getSuperClasses();
        for(int i = superClasses.length - 1; i >= 0; i--)
        {
            result = superClasses[i].getMangled(name);
            if(result != null)
                return result;
        }

        return null;
    }

    public void dump()
    {
        dump(System.out);
    }

    public void dump(PrintStream out)
    {
        out.println("Object Class " + getRootClass());
        Object key;
        Object value;
        for(Enumeration keys = hash.keys(); keys.hasMoreElements(); out.println("  " + key + "=" + value))
        {
            key = keys.nextElement();
            value = hash.get(key);
        }

    }

    void setExpectedLength(long start, int len)
    {
        length = len;
        expectedEnd = start + (long)len;
    }

    void checkLength(long end)
        throws IOException
    {
        if(expectedEnd != 0L && expectedEnd != end)
            throw new IOException("Error reading " + getRootClass().getClassName() + ": Unexpected length (expected " + length + " got " + ((end - expectedEnd) + (long)length) + ")");
        else
            return;
    }

    public RootObjectRepresentation[] getSuperClasses()
    {
        return superClasses;
    }

    public RootClass getRootClass()
    {
        return rootClass;
    }

    public RootObjectRepresentation getSuperClass(String name)
    {
        if(rootClass.getClassName().equals(name))
            return this;
        for(int i = superClasses.length; i-- > 0;)
            if(superClasses[i].getRootClass().getClassName().equals(name))
                return superClasses[i];

        return null;
    }

    public abstract Object getProxy();

    private long expectedEnd;
    private int length;
    private Hashtable hash;
    private Hashtable mangledHash;
    private static final RootObjectRepresentation noSuperClasses[] = new RootObjectRepresentation[0];
    private RootClass rootClass;
    private RootObjectRepresentation superClasses[];
    private static final NameMangler nameMangler = NameMangler.instance();

}

 

Ads help maintain this website.