pykd/pykd_ext/pyinterpret.h

70 lines
1.4 KiB
C
Raw Normal View History

#pragma once
#include <string>
#include <list>
#include "pymodule.h"
class PythonInterpreter;
PythonInterpreter* activateInterpreter(bool global = true, int majorVersion = -1, int minorVersion = -1);
void releaseInterpretor(PythonInterpreter* interpret);
struct InterpreterDesc {
int majorVersion;
int minorVersion;
std::string imagePath;
};
inline bool operator < (const InterpreterDesc& d1, const InterpreterDesc& d2)
{
if (d1.majorVersion != d2.majorVersion)
return d1.majorVersion < d2.majorVersion;
if (d1.minorVersion != d2.minorVersion)
return d1.minorVersion < d2.minorVersion;
return d1.imagePath < d2.imagePath;
}
std::list<InterpreterDesc> getInstalledInterpreter();
void getDefaultInterpreter(int majorVersion, int minorVersion);
bool isInterpreterLoaded(int majorVersion, int minorVersion);
void stopAllInterpreter();
void checkPykd();
class AutoInterpreter
{
public:
explicit AutoInterpreter(bool global = true, int majorVersion = -1, int minorVersion = -1)
{
m_interpreter = activateInterpreter(global, majorVersion, minorVersion);
}
~AutoInterpreter()
{
if (m_interpreter)
releaseInterpretor(m_interpreter);
}
private:
AutoInterpreter(const AutoInterpreter&) = delete;
PythonInterpreter* m_interpreter;
};