package org.khelekore.prtree;

/**
 * @param N the type of the child entries
 * @param T the type of the data entries
 */
abstract class NodeBase<N, T> implements Node<T> {
    private MBR mbr;
    private Object[] data;

    public NodeBase (Object[] data) {
	this.data = data;
    }

    public int size () {
	return data.length;
    }

    @SuppressWarnings("unchecked")
    public N get (int i) {
	return (N)data[i];
    }
    
    public MBR getMBR (MBRConverter<T> converter) {
	if (mbr == null)
	    mbr = computeMBR (converter);
	return mbr;
    }
    
    public abstract MBR computeMBR (MBRConverter<T> converter);
    
    public MBR getUnion (MBR m1, MBR m2) {
	if (m1 == null)
	    return m2;
	return m1.union (m2);
    }
}

