using System; using System.Runtime.InteropServices; using System.Security; using System.Text; using System.Threading; using System.Collections.Generic; namespace Python.Runtime.Interfaces { public interface ILibPython { /// /// Export of Macro Py_XIncRef. Use XIncref instead. /// Limit this function usage for Testing and Py_Debug builds /// /// PyObject Ptr void Py_IncRef(IntPtr ob); /// /// Export of Macro Py_XDecRef. Use XDecref instead. /// Limit this function usage for Testing and Py_Debug builds /// /// PyObject Ptr void Py_DecRef(IntPtr ob); void Py_InitializeEx(int initsigs); int Py_IsInitialized(); void Py_Finalize(); IntPtr PyGILState_Ensure(); void PyGILState_Release(IntPtr gs); void PyEval_InitThreads(); int PyEval_ThreadsInitialized(); void PyEval_AcquireLock(); void PyEval_ReleaseLock(); IntPtr PyEval_SaveThread(); void PyEval_RestoreThread(IntPtr tstate); IntPtr PyEval_GetBuiltins(); IntPtr PyEval_GetGlobals(); IntPtr PyEval_GetLocals(); IntPtr Py_GetProgramName(); void Py_SetProgramName(IntPtr name); IntPtr Py_GetPythonHome(); void Py_SetPythonHome(IntPtr home); IntPtr Py_GetPath(); void Py_SetPath(IntPtr home); IntPtr Py_GetVersion(); IntPtr Py_GetPlatform(); IntPtr Py_GetCopyright(); IntPtr Py_GetCompiler(); IntPtr Py_GetBuildInfo(); int PyRun_SimpleString(string code); IntPtr PyRun_String(string code, IntPtr st, IntPtr globals, IntPtr locals); IntPtr PyEval_EvalCode(IntPtr co, IntPtr globals, IntPtr locals); IntPtr Py_CompileString(string code, string file, IntPtr tok); IntPtr PyImport_ExecCodeModule(string name, IntPtr code); IntPtr PyCFunction_NewEx(IntPtr ml, IntPtr self, IntPtr mod); IntPtr PyCFunction_Call(IntPtr func, IntPtr args, IntPtr kw); #if PYTHON2 IntPtr PyClass_New(IntPtr bases, IntPtr dict, IntPtr name); #endif IntPtr PyInstance_New(IntPtr cls, IntPtr args, IntPtr kw); IntPtr PyInstance_NewRaw(IntPtr cls, IntPtr dict); IntPtr PyMethod_New(IntPtr func, IntPtr self, IntPtr cls); //==================================================================== // Python abstract object API //==================================================================== int PyObject_HasAttrString(IntPtr pointer, string name); IntPtr PyObject_GetAttrString(IntPtr pointer, string name); int PyObject_SetAttrString(IntPtr pointer, string name, IntPtr value); int PyObject_HasAttr(IntPtr pointer, IntPtr name); IntPtr PyObject_GetAttr(IntPtr pointer, IntPtr name); int PyObject_SetAttr(IntPtr pointer, IntPtr name, IntPtr value); IntPtr PyObject_GetItem(IntPtr pointer, IntPtr key); int PyObject_SetItem(IntPtr pointer, IntPtr key, IntPtr value); int PyObject_DelItem(IntPtr pointer, IntPtr key); IntPtr PyObject_GetIter(IntPtr op); IntPtr PyObject_Call(IntPtr pointer, IntPtr args, IntPtr kw); IntPtr PyObject_CallObject(IntPtr pointer, IntPtr args); int PyObject_RichCompareBool(IntPtr value1, IntPtr value2, int opid); int PyObject_IsInstance(IntPtr ob, IntPtr type); int PyObject_IsSubclass(IntPtr ob, IntPtr type); int PyCallable_Check(IntPtr pointer); int PyObject_IsTrue(IntPtr pointer); int PyObject_Not(IntPtr pointer); IntPtr _PyObject_Size(IntPtr pointer); IntPtr PyObject_Hash(IntPtr op); IntPtr PyObject_Repr(IntPtr pointer); IntPtr PyObject_Str(IntPtr pointer); IntPtr PyObject_Unicode(IntPtr pointer); IntPtr PyObject_Dir(IntPtr pointer); //==================================================================== // Python number API //==================================================================== IntPtr PyNumber_Int(IntPtr ob); IntPtr PyNumber_Long(IntPtr ob); IntPtr PyNumber_Float(IntPtr ob); bool PyNumber_Check(IntPtr ob); IntPtr PyInt_FromLong(IntPtr value); int PyInt_AsLong(IntPtr value); IntPtr PyInt_FromString(string value, IntPtr end, int radix); IntPtr PyLong_FromLong(long value); IntPtr PyLong_FromUnsignedLong32(uint value); IntPtr PyLong_FromUnsignedLong64(ulong value); IntPtr PyLong_FromDouble(double value); IntPtr PyLong_FromLongLong(long value); IntPtr PyLong_FromUnsignedLongLong(ulong value); IntPtr PyLong_FromString(string value, IntPtr end, int radix); int PyLong_AsLong(IntPtr value); uint PyLong_AsUnsignedLong32(IntPtr value); ulong PyLong_AsUnsignedLong64(IntPtr value); long PyLong_AsLongLong(IntPtr value); ulong PyLong_AsUnsignedLongLong(IntPtr value); IntPtr PyFloat_FromDouble(double value); IntPtr PyFloat_FromString(IntPtr value, IntPtr junk); double PyFloat_AsDouble(IntPtr ob); IntPtr PyNumber_Add(IntPtr o1, IntPtr o2); IntPtr PyNumber_Subtract(IntPtr o1, IntPtr o2); IntPtr PyNumber_Multiply(IntPtr o1, IntPtr o2); IntPtr PyNumber_TrueDivide(IntPtr o1, IntPtr o2); IntPtr PyNumber_And(IntPtr o1, IntPtr o2); IntPtr PyNumber_Xor(IntPtr o1, IntPtr o2); IntPtr PyNumber_Or(IntPtr o1, IntPtr o2); IntPtr PyNumber_Lshift(IntPtr o1, IntPtr o2); IntPtr PyNumber_Rshift(IntPtr o1, IntPtr o2); IntPtr PyNumber_Power(IntPtr o1, IntPtr o2); IntPtr PyNumber_Remainder(IntPtr o1, IntPtr o2); IntPtr PyNumber_InPlaceAdd(IntPtr o1, IntPtr o2); IntPtr PyNumber_InPlaceSubtract(IntPtr o1, IntPtr o2); IntPtr PyNumber_InPlaceMultiply(IntPtr o1, IntPtr o2); IntPtr PyNumber_InPlaceTrueDivide(IntPtr o1, IntPtr o2); IntPtr PyNumber_InPlaceAnd(IntPtr o1, IntPtr o2); IntPtr PyNumber_InPlaceXor(IntPtr o1, IntPtr o2); IntPtr PyNumber_InPlaceOr(IntPtr o1, IntPtr o2); IntPtr PyNumber_InPlaceLshift(IntPtr o1, IntPtr o2); IntPtr PyNumber_InPlaceRshift(IntPtr o1, IntPtr o2); IntPtr PyNumber_InPlacePower(IntPtr o1, IntPtr o2); IntPtr PyNumber_InPlaceRemainder(IntPtr o1, IntPtr o2); IntPtr PyNumber_Negative(IntPtr o1); IntPtr PyNumber_Positive(IntPtr o1); IntPtr PyNumber_Invert(IntPtr o1); //==================================================================== // Python sequence API //==================================================================== bool PySequence_Check(IntPtr pointer); IntPtr PySequence_GetItem(IntPtr pointer, IntPtr index); int PySequence_SetItem(IntPtr pointer, IntPtr index, IntPtr value); int PySequence_DelItem(IntPtr pointer, IntPtr index); IntPtr PySequence_GetSlice(IntPtr pointer, IntPtr i1, IntPtr i2); int PySequence_SetSlice(IntPtr pointer, IntPtr i1, IntPtr i2, IntPtr v); int PySequence_DelSlice(IntPtr pointer, IntPtr i1, IntPtr i2); IntPtr _PySequence_Size(IntPtr pointer); int PySequence_Contains(IntPtr pointer, IntPtr item); IntPtr PySequence_Concat(IntPtr pointer, IntPtr other); IntPtr PySequence_Repeat(IntPtr pointer, IntPtr count); int PySequence_Index(IntPtr pointer, IntPtr item); IntPtr _PySequence_Count(IntPtr pointer, IntPtr value); IntPtr PySequence_Tuple(IntPtr pointer); IntPtr PySequence_List(IntPtr pointer); //==================================================================== // Python string API //==================================================================== #if !PYTHON2 IntPtr PyBytes_FromString(string op); IntPtr _PyBytes_Size(IntPtr op); IntPtr _PyString_FromStringAndSize(string value, IntPtr size); IntPtr PyUnicode_FromStringAndSize(IntPtr value, IntPtr size); #else IntPtr PyString_FromStringAndSize(string value, IntPtr size); IntPtr PyString_AsString(IntPtr op); int PyString_Size(IntPtr pointer); #endif IntPtr PyUnicode_FromOrdinal(int c); IntPtr PyUnicode_AsUnicode(IntPtr ob); IntPtr PyUnicode_FromObject(IntPtr ob); IntPtr PyUnicode_FromEncodedObject(IntPtr ob, IntPtr enc, IntPtr err); IntPtr _PyUnicode_GetSize(IntPtr ob); #if !PYTHON2 IntPtr PyUnicode_FromKindAndData(int kind, string s, IntPtr size); #else IntPtr PyUnicode_FromUnicode(string s, IntPtr size); #endif //==================================================================== // Python dictionary API //==================================================================== IntPtr PyDict_New(); IntPtr PyDictProxy_New(IntPtr dict); IntPtr PyDict_GetItem(IntPtr pointer, IntPtr key); IntPtr PyDict_GetItemString(IntPtr pointer, string key); int PyDict_SetItem(IntPtr pointer, IntPtr key, IntPtr value); int PyDict_SetItemString(IntPtr pointer, string key, IntPtr value); int PyDict_DelItem(IntPtr pointer, IntPtr key); int PyDict_DelItemString(IntPtr pointer, string key); int PyMapping_HasKey(IntPtr pointer, IntPtr key); IntPtr PyDict_Keys(IntPtr pointer); IntPtr PyDict_Values(IntPtr pointer); IntPtr PyDict_Items(IntPtr pointer); IntPtr PyDict_Copy(IntPtr pointer); int PyDict_Update(IntPtr pointer, IntPtr other); void PyDict_Clear(IntPtr pointer); IntPtr _PyDict_Size(IntPtr pointer); //==================================================================== // Python list API //==================================================================== IntPtr PyList_New(IntPtr size); IntPtr PyList_AsTuple(IntPtr pointer); IntPtr PyList_GetItem(IntPtr pointer, IntPtr index); int PyList_SetItem(IntPtr pointer, IntPtr index, IntPtr value); int PyList_Insert(IntPtr pointer, IntPtr index, IntPtr value); int PyList_Append(IntPtr pointer, IntPtr value); int PyList_Reverse(IntPtr pointer); int PyList_Sort(IntPtr pointer); IntPtr PyList_GetSlice(IntPtr pointer, IntPtr start, IntPtr end); int PyList_SetSlice(IntPtr pointer, IntPtr start, IntPtr end, IntPtr value); IntPtr _PyList_Size(IntPtr pointer); //==================================================================== // Python tuple API //==================================================================== IntPtr PyTuple_New(IntPtr size); IntPtr PyTuple_GetItem(IntPtr pointer, IntPtr index); int PyTuple_SetItem(IntPtr pointer, IntPtr index, IntPtr value); IntPtr PyTuple_GetSlice(IntPtr pointer, IntPtr start, IntPtr end); IntPtr _PyTuple_Size(IntPtr pointer); //==================================================================== // Python iterator API //==================================================================== IntPtr PyIter_Next(IntPtr pointer); //==================================================================== // Python module API //==================================================================== IntPtr PyModule_New(string name); string PyModule_GetName(IntPtr module); IntPtr PyModule_GetDict(IntPtr module); string PyModule_GetFilename(IntPtr module); #if !PYTHON2 IntPtr PyModule_Create2(IntPtr module, int apiver); #endif IntPtr PyImport_Import(IntPtr name); IntPtr PyImport_ImportModule(string name); IntPtr PyImport_ReloadModule(IntPtr module); IntPtr PyImport_AddModule(string name); IntPtr PyImport_GetModuleDict(); void PySys_SetArgvEx(int argc, string[] argv, int updatepath); IntPtr PySys_GetObject(string name); int PySys_SetObject(string name, IntPtr ob); //==================================================================== // Python type object API //==================================================================== void PyType_Modified(IntPtr type); bool PyType_IsSubtype(IntPtr t1, IntPtr t2); IntPtr PyType_GenericNew(IntPtr type, IntPtr args, IntPtr kw); IntPtr PyType_GenericAlloc(IntPtr type, IntPtr n); int PyType_Ready(IntPtr type); IntPtr _PyType_Lookup(IntPtr type, IntPtr name); IntPtr PyObject_GenericGetAttr(IntPtr obj, IntPtr name); int PyObject_GenericSetAttr(IntPtr obj, IntPtr name, IntPtr value); IntPtr _PyObject_GetDictPtr(IntPtr obj); IntPtr PyObject_GC_New(IntPtr tp); void PyObject_GC_Del(IntPtr tp); void PyObject_GC_Track(IntPtr tp); void PyObject_GC_UnTrack(IntPtr tp); //==================================================================== // Python memory API //==================================================================== IntPtr PyMem_Malloc(IntPtr size); IntPtr PyMem_Realloc(IntPtr ptr, IntPtr size); void PyMem_Free(IntPtr ptr); //==================================================================== // Python exception API //==================================================================== void PyErr_SetString(IntPtr ob, string message); void PyErr_SetObject(IntPtr ob, IntPtr message); IntPtr PyErr_SetFromErrno(IntPtr ob); void PyErr_SetNone(IntPtr ob); int PyErr_ExceptionMatches(IntPtr exception); int PyErr_GivenExceptionMatches(IntPtr ob, IntPtr val); void PyErr_NormalizeException(IntPtr ob, IntPtr val, IntPtr tb); IntPtr PyErr_Occurred(); void PyErr_Fetch(ref IntPtr ob, ref IntPtr val, ref IntPtr tb); void PyErr_Restore(IntPtr ob, IntPtr val, IntPtr tb); void PyErr_Clear(); void PyErr_Print(); //==================================================================== // Miscellaneous //==================================================================== IntPtr PyMethod_Self(IntPtr ob); IntPtr PyMethod_Function(IntPtr ob); int Py_AddPendingCall(IntPtr func, IntPtr arg); int Py_MakePendingCalls(); int GetPyNoSiteFlag(); void SetPyNoSiteFlag(int val); } }