Listing 1

class CInterpreter
{
public:
    typedef std::list<std::string> STRING_ARRAY;
    typedef std::map<std::string, std::string> STRING_HASH;

    virtual std::string Call(const std::string subroutine) = 0;
    virtual std::string Call(const std::string subroutine, 
                               const std::string argument) = 0;
    virtual std::string Call(const std::string subroutine, 
                               const std::string argument1, 
                               const std::string argument2) = 0;
    virtual std::auto_ptr<STRING_ARRAY> Call(const std::string perlSubroutine, 
                std::auto_ptr<STRING_ARRAY>& arrayOfString) = 0;

    virtual void CallVoid(const std::string subroutine) = 0;
    virtual void Eval(const std::string codeBlock) = 0;

    virtual void SetFloat(const std::string variable, const double value) = 0;
    virtual double GetFloat(const std::string variable) = 0;

    virtual void SetInt(const std::string variable, const int value) = 0;
    virtual int GetInt(const std::string variable) = 0;

    virtual void SetString(const std::string variable, 
                                   const std::string value) = 0;
    virtual std::string GetString(const std::string variable, 
                                          const int length) = 0;
    virtual void SetArray(const std::string array, 
                         const STRING_ARRAY& arrayOfString) = 0;
    virtual std::auto_ptr<STRING_ARRAY> 
                  GetArray(const std::string arrayOfString) = 0;
    virtual void SetHash(const std::string hash, 
                           const STRING_HASH& hashOfString) = 0;
    virtual std::auto_ptr<STRING_HASH> 
                    GetHash(const std::string hashOfString) = 0;
    virtual void RedirectOutputStreams() = 0;
    virtual void RestoreOutputStreams() = 0;
    virtual void ClearOutputBuffers() = 0;
    virtual std::string ReadStdoutBuffer() = 0;
    virtual std::string ReadStderrBuffer() = 0;
};