#ifndef _PERLOGRE_CALLBACK_H_
#define _PERLOGRE_CALLBACK_H_

#include "perlOGRE.h"
#include <map>
#include <string>
#include <vector>

using namespace std;

// this is a baseclass for the other listeners

class PerlOGRECallback
{
 public:
    PerlOGRECallback(SV *pobj);
    ~PerlOGRECallback();

 protected:
    bool perlCallbackCan(string const &cbmeth);
    bool callPerlCallback(string const &cbmeth) const;
    Ogre::Real callPerlCallbackReal(string const &cbmeth) const;
    void callPerlCallbackVoid(string const &cbmeth) const;

    SV * mPerlObj;

    typedef vector<SV *> CBArgList;
    mutable CBArgList mCallbackArgs;

    typedef map<string, bool> CBCanMap;
    mutable CBCanMap mCanMap;
};


#endif  /* define _PERLOGRE_CALLBACK_H_ */