/****************************************************************************
** GMAF - The Geometry Modeling Algorithms Framework
**
** Created : 03112000
**
** Copyright (C) 2000 by Le-Jeng Shiue.  All rights reserved.
**
****************************************************************************/
#ifndef gmafAlgorithm_H
#define gmafAlgorithm_H

#include <string>

class gmafDataStructureManager;
class gmafVisualObject;

/**
  gmafAlgorithm is the base class for all algorithm class 
*/
class gmafAlgorithm {
// ENUMS
public:
  const std::string ID;

// VARIABLES
/**@name Class Variables */
//@{
protected:
  /**
     The data structure (object) repository
   */
  gmafDataStructureManager* mpDSM;

  gmafVisualObject* mpVisualObject;
private:

//@}

// METHODS
/**@name Class Methods */
//@{
public:
  /**
     Constructor of gmafAlgorithm.
  */    
  gmafAlgorithm(gmafDataStructureManager* dsm, const char* id);
  /**
     Destructor of gmafAlgorithm.
  */    
  virtual ~gmafAlgorithm();

  /**
     All algorithm MUST overwrite this function. Main window will ONLY call 
     this function to start the algorithm.
   */
  virtual void run() = 0;

  virtual gmafVisualObject* visualize() = 0;

protected:

private:
};


#endif gmafAlgorithm_H

