// This file is generated by WOK (CPPExt).
// Please do not edit this file; modify original file instead.
// The copyright and license terms as defined for the original file apply to 
// this header file considered to be the "object code" form of the original source.

#ifndef _Interface_EntityIterator_HeaderFile
#define _Interface_EntityIterator_HeaderFile

#include <Standard.hxx>
#include <Standard_DefineAlloc.hxx>
#include <Standard_Macro.hxx>

#include <Handle_Interface_IntVal.hxx>
#include <Handle_TColStd_HSequenceOfTransient.hxx>
#include <Handle_Standard_Transient.hxx>
#include <Handle_Standard_Type.hxx>
#include <Standard_Boolean.hxx>
#include <Standard_Integer.hxx>
class Interface_IntVal;
class TColStd_HSequenceOfTransient;
class Standard_NoMoreObject;
class Standard_NoSuchObject;
class Standard_Transient;
class Standard_Type;


//! Defines an Iterator on Entities.
//! Allows considering of various criteria
class Interface_EntityIterator 
{
public:

  DEFINE_STANDARD_ALLOC

  
  //! Defines an empty iterator (see AddList & AddItem)
  Standard_EXPORT Interface_EntityIterator();
  
  //! Defines an iterator on a list, directly i.e. without copying it
  Standard_EXPORT Interface_EntityIterator(const Handle(TColStd_HSequenceOfTransient)& list);
  
  //! Gets a list of entities and adds its to the iteration list
  Standard_EXPORT   void AddList (const Handle(TColStd_HSequenceOfTransient)& list) ;
  
  //! Adds to the iteration list a defined entity
  Standard_EXPORT   void AddItem (const Handle(Standard_Transient)& anentity) ;
  
  //! same as AddItem (kept for compatibility)
  Standard_EXPORT   void GetOneItem (const Handle(Standard_Transient)& anentity) ;
  
  //! Selects entities with are Kind of a given type,  keep only
  //! them (is keep is True) or reject only them (if keep is False)
  Standard_EXPORT   void SelectType (const Handle(Standard_Type)& atype, const Standard_Boolean keep) ;
  
  //! Returns count of entities which will be iterated on
  //! Calls Start if not yet done
  Standard_EXPORT   Standard_Integer NbEntities()  const;
  
  //! Returns count of entities of a given type (kind of)
  Standard_EXPORT   Standard_Integer NbTyped (const Handle(Standard_Type)& type)  const;
  
  //! Returns the list of entities of a given type (kind of)
  Standard_EXPORT   Interface_EntityIterator Typed (const Handle(Standard_Type)& type)  const;
  
  //! Allows re-iteration (useless for the first iteration)
  Standard_EXPORT virtual   void Start()  const;
  
  //! Says if there are other entities (vertices) to iterate
  //! the first time, calls Start
  Standard_EXPORT   Standard_Boolean More()  const;
  
  //! Sets iteration to the next entity (vertex) to give
  Standard_EXPORT   void Next()  const;
  
  //! Returns the current Entity iterated, to be used by Interface
  //! tools
  Standard_EXPORT  const  Handle(Standard_Transient)& Value()  const;
  
  //! Returns the content of the Iterator, accessed through a Handle
  //! to be used by a frontal-engine logic
  //! Returns an empty Sequence if the Iterator is empty
  //! Calls Start if not yet done
  Standard_EXPORT   Handle(TColStd_HSequenceOfTransient) Content()  const;
  
  //! Clears data of iteration
  Standard_EXPORT virtual   void Destroy() ;
Standard_EXPORT virtual ~Interface_EntityIterator() { Destroy();}




protected:

  
  //! Allows subclasses of EntityIterator to reevaluate an iteration
  Standard_EXPORT   void Reset() ;




private:



  Handle(Interface_IntVal) thecurr;
  Handle(TColStd_HSequenceOfTransient) thelist;


};







#endif // _Interface_EntityIterator_HeaderFile
