// __author__ = Juan Carlos De Abreu (jcabreur@gmail.com)

#ifndef DATA_FUNCTION_H__
#define DATA_FUNCTION_H__
 
#include "../DataTypes/Data.h"

BEGIN_TEG_NAMESPACE();

class Function : public IData {
public:
  // Attributes.
  std::vector<std::string> param;         // Vector with the name of each variable
  std::vector<SmartPointer<IData>>  inst; // 

  // Function constructor.
  Function() : IData(DATA_FUNCTION) { }
  
  // Function destructor.
  ~Function() { }

  // Methods.
  SmartPointer<IData> call(std::vector<SmartPointer<IData>> param_);
  SmartPointer<IData> resolve(
      std::map<std::string, SmartPointer<IData>>& variables);
  AUTO_SIZE();
};

END_TEG_NAMESPACE();

#endif  // DATA_FUNCTION_H_
