text: /**********************************************************************
   *<
  	FILE: hierclas.h
  
  	DESCRIPTION: Simple utility class for describing hierarchies
  
  	CREATED BY: Tom Hudson
  
  	HISTORY: Created 3 July 1995
  
   *>	Copyright (c) 1995, All Rights Reserved.
   **********************************************************************/
  
  #ifndef __HIERCLAS__H
  #define __HIERCLAS__H
  #include "maxheap.h"
  
  #define INVALID_HIERARCHY -1
  
  class HierarchyEntry: public MaxHeapOperators {
  	public:
  		int data;
  		int children;
  		HierarchyEntry *parent;
  		HierarchyEntry *sibling;
  		HierarchyEntry *child;
  		TSTR sortKey;
  		UtilExport HierarchyEntry();
  		UtilExport HierarchyEntry(int d, HierarchyEntry *p, HierarchyEntry *s);
  		UtilExport int HierarchyLevel();
  		UtilExport void AddChild(int d);
  		UtilExport int GetChild(int index);
  		int Children() { return children; }
  		UtilExport void Sort();
  	};
  
  class GenericHierarchy: public MaxHeapOperators {
  	private:
  		HierarchyEntry root;
  		void FreeTree(HierarchyEntry* start = NULL);
  		BOOL isSorted;
  		void CopyTree(int parent, HierarchyEntry* ptr);
  	public:
  		GenericHierarchy() { root = HierarchyEntry(-1,NULL,NULL); isSorted = FALSE; }
  		UtilExport ~GenericHierarchy();
  		UtilExport void AddEntry(int data, int parent = -1);		// Add one entry, given its parent
  		UtilExport int Entries();									// Total number of members in the hierarchy
  		UtilExport HierarchyEntry* GetStart() { return root.child; } // Get the first item under the root
  		UtilExport HierarchyEntry* FindEntry(int data, HierarchyEntry* start = NULL);
  		UtilExport int NumberOfChildren(int data);					// The number of children for this item
  		UtilExport int GetChild(int data, int index);				// Get the nth child of this item
  		UtilExport void New();										// Clear out the hierarchy tree
  		UtilExport void Sort();										// Sort tree by children/siblings
  		UtilExport BOOL IsCompatible(GenericHierarchy& hier);		// Are they compatible?
  		UtilExport void Dump(HierarchyEntry* start = NULL);			// DebugPrint the tree
  		UtilExport GenericHierarchy& operator=(GenericHierarchy& from);	// Copy operator
  		UtilExport TSTR& SortKey();									// Get the sort key for the hierarchy
  	};
  
  #endif __HIERCLAS__H
  