view interpreter.h @ 7:04867eba6428

function objects and signals/slots for errors and results
author John W. Eaton <jwe@octave.org>
date Thu, 23 May 2019 09:27:09 -0400
parents 1b575145197e
children 894be158b32d
line wrap: on
line source

#if ! defined (calc_interpreter_h)
#define calc_interpreter_h 1

#include <functional>

namespace calc
{
  class interpreter
  {
  public:

    static interpreter *the_interpreter;

    interpreter (void);

    interpreter (const interpreter&) = delete;

    interpreter& operator = (const interpreter&) = delete;

    ~interpreter (void);

    int parse_and_execute (const std::string& line);

    std::function<void (const char *)>
    set_error_handler (const std::function<void (const char *)>& error_handler)
    {
      std::function<void (const char *)> tmp = m_error_handler;
      m_error_handler = error_handler;
      return tmp;
    }

    std::function<void (double)>
    set_result_handler (const std::function<void (double)>& result_handler)
    {
      std::function<void (double)> tmp = m_result_handler;
      m_result_handler = result_handler;
      return tmp;
    }

    void emit_error (const char *msg);

    void emit_result (double value);

  private:

    std::function<void (const char *)> m_error_handler;
    std::function<void (double)> m_result_handler;
  };
}

#endif