// -*- C++ -*-
// AID-GENERATED
// =========================================================================
// This class was generated by AID - Abstract Interface Definition          
// DO NOT MODIFY, but use the org.freehep.aid.Aid utility to regenerate it. 
// =========================================================================
#ifndef HEPREP_HEPREPTYPETREE_H
#define HEPREP_HEPREPTYPETREE_H 1

// Copyright 2000-2005, FreeHEP.

#include <string>
#include <vector>

#include "HEPREP/HepRepTreeID.h"

namespace HEPREP {

class HepRepType;

/**
 * HepRepTypeTree interface.
 *
 * @author Mark Donszelmann
 */
class HepRepTypeTree : virtual public HepRepTreeID {

public: 
    /// Destructor.
    virtual ~HepRepTypeTree() { /* nop */; }

    /**
     * Adds a type to this typetree.
     *
     * @param type to be added.
     */
    virtual void addType(HepRepType * type) = 0;

    /**
     * Returns a collection of all types in this tree.
     *
     * @return collection of HepRepTypes.
     */
    virtual std::vector<HepRepType *>  getTypeList() = 0;

    /**
     * Returns type
     */
    virtual HepRepType * getType(std::string fullName) = 0;

    /**
     * Returns a deep copy of this typetree.
     *
     * @return copy of this typetree.
     */
    virtual HepRepTypeTree * copy() = 0;

//          
// To be enable in g++ 3.0
//    using HepRep::HepRepTreeID::copy;
// To be disabled in g++ 3.0
//    HepRepTreeID * copy();
//      
}; // class
} // namespace HEPREP
#endif /* ifndef HEPREP_HEPREPTYPETREE_H */
