package xxl.indexStructures;

import java.io.DataInput;
import java.io.DataOutput;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Map.Entry;
import java.util.Stack;
import xxl.collections.Container;
import xxl.collections.Queue;
import xxl.collections.ReversedList;
import xxl.comparators.FeatureComparator;
import xxl.cursors.ArrayCursor;
import xxl.cursors.Cursors;
import xxl.cursors.Enumerator;
import xxl.cursors.Mapper;
import xxl.cursors.Taker;
import xxl.functions.Constant;
import xxl.functions.Function;
import xxl.io.ConvertableConverter;
import xxl.io.Converter;
import xxl.spatial.Rectangle;

public class LinearRTree extends RTree {
	public Tree.Node createNode (int level) {
		return new Node().initialize(level, new LinkedList());
	}

	public class Node extends RTree.Node {
		protected Tree.Node.SplitInfo split (Stack path) {
			// this: neuer, noch leerer Knoten.
			Node node = (Node)node(path);	// node: alter, uebervoller Knoten.
			int min = node.splitMinNumber();// kleinste Zahl im alten Knoten zu verbleibender Eintraege.
			int max = node.splitMaxNumber();// groesste Zahl im alten Knoten zu verbleibender Eintraege.
			List oldNodesEntries;			// zu fuellende List derjenigen Eintraege,
											// die nach dem Split im alten Knoten bleiben sollen.
			List newNodesEntries; 			// zu fuellende List derjenigen Eintraege,
											// die nach dem Split im neuen Knoten sein sollen.
			Rectangle oldNodesMBR;			// MBR der Objekte aus oldNodesEntries.
			Rectangle newNodesMBR;			// MBR der Objekte aus newNodesEntries.

			// TODO!!!

			// Fuelle Seiten mit neuen Eintraegen, update des Deskriptors des alten Indexeintrages
			node.entries.clear();
			node.entries.addAll(oldNodesEntries);
			entries.addAll(newNodesEntries);
			((IndexEntry)indexEntry(path)).descriptor = oldNodesMBR;
			return new SplitInfo(path).initialize(newNodesMBR);
		}
	}
}
