11#define META_FILE_NAME "MqFactoryC_py.c"
16#define OT_CLASS (&NS(MqFactoryCR))
17#define OT_CLASS_NAME "MqFactoryC"
19#define OT_LNG2META(O) MqFct(VAL2MNG(O))
21#define OT_retObj_CONSTR(mng) OT_retObj_SET(NS(MqFactoryC_CTOR)(MK_RT_CALL (PyTypeObject*)class,mng))
23#define OT_SETUP_hdl OT_SETUP_hdl_tmpl(MqFactoryC)
24#define OT_SETUP_hdl__null_allow OT_SETUP_hdl_tmpl__null_allow(MqFactoryC)
25#define OT_SETUP_hdl_constr MK_RT_UNUSED AllRtSetup_NULL; \
26 MQ_FCT hdl = (MQ_FCT) OT_CLASS;
27#define OT_SETUP_hdl_destr OT_SETUP_hdl_tmpl__null_allow(MqFactoryC)
28#define OT_SETUP_hdl_static MK_RT_UNUSED AllRtSetup_NULL; \
29 __attribute__((unused)) MK_TYP hdl = MqFactoryC##_TT;
31#define OT_SETUP_hdl_static_constr OT_SETUP_hdl_static
33#if !defined(SetupRtFromObj_X)
34 #define SetupRtFromObj_X(hdl) AllRtSetup_X(hdl)
35 #define SetupRtFromObj_XN(hdl) AllRtSetup_XN(hdl)
40#define MqFactoryCTT MQ(MqMsgqueThreadState).MqFactoryCTT
67 if (MqFactoryCTT == NULL) MqFactoryCTT = MqFactorySTT; \
70 if (MqFactoryCTT->selfCreate == NS(MqFactoryC_selfCreate)) return MK_OK; \
73 MqFactoryCTT->selfCreate = NS(MqFactoryC_selfCreate); \
74 MqFactoryCTT->selfDelete = NS(MqFactoryC_selfDelete); \
75 MqFactoryCTT->selfUnlink = NS(MqFactoryC_selfUnlink); \
77 if (!PyType_HasFeature(OT_CLASS,Py_TPFLAGS_READY)) { \
78 NS(MqFactoryCR).tp_base = MqFactoryC_base; \
79 OtErrorCheckLng (PyType_Ready(OT_CLASS)); \
81 OtErrorCheckLng(PyModule_AddObjectRef(m, "MqFactoryC", (PyObject *)OT_CLASS)); \
84 MqFactoryC_MK_NULL = Py_NewRef(MK(AtomCreate) (MK_RT_CALL OT_CLASS, NULL ));
89#define SetupRtFromObj_XN(hdl) AllRtSetup_XN(hdl)
92#define OT_SETUP_hdl OT_SETUP_hdl_tmpl(MqFactoryC) \
93 bool is_constr_hard = false;
94#undef OT_SETUP_hdl_constr
95#define OT_SETUP_hdl_constr MK_RT_UNUSED AllRtSetup_NULL; \
96 __attribute__((unused)) MK_TYP hdl = MqFactoryC##_TT; \
97 bool is_constr_hard = true;
98#undef OT_SETUP_hdl_static
99#define OT_SETUP_hdl_static MK_RT_UNUSED AllRtSetup_NULL; \
100 __attribute__((unused)) MK_TYP hdl = MqFactoryC##_TT; \
101 bool is_constr_hard = false;
102#undef OT_SETUP_hdl_static_constr
103#define OT_SETUP_hdl_static_constr MK_RT_UNUSED AllRtSetup_NULL; \
104 __attribute__((unused)) MK_TYP hdl = MqFactoryC##_TT; \
105 bool is_constr_hard = true;
107#undef OT_retObj_RETURN
108#define OT_retObj_RETURN \
109if (is_constr_hard) { \
114 Py_INCREF (retObj); \
116 return ((PyObject*)retObj);
128#define Add_doc "MqFactoryC MqFactoryC.Add(constructor:class, ?ident:string=\"MK_NULL\"?)"
129#define new_doc "MqFactoryC MqFactoryC.new(constructor:class, ?ident:string=\"MK_NULL\"?)"
132#define Get_doc "MqFactoryC MqFactoryC.Get(?ident:string=\"\"?)"
133#define GetCalled_doc "MqFactoryC MqFactoryC.GetCalled(?ident:string=\"\"?)"
134#define GetCalledL_doc "MqFactoryC MqFactoryC.GetCalledL(largs:MkBufferListC)"
135#define GetNull_doc "MqFactoryC MqFactoryC.GetNull()"
136#define HandleResolve_doc "MqFactoryC MqFactoryC.HandleResolve(netHdl:MK_HDL)"
137#define Instances_doc "MqFactoryC MqFactoryC.Instances()"
140#define DefaultIdent_doc "string MqFactoryC.DefaultIdent()"
141#define InitialIdent_doc "string MqFactoryC.InitialIdent()"
142#define LogAll_doc "MqFactoryC.LogAll(?callfunc:string=\"MK_NULL\"?)"
145#define Dup2_doc "MqFactoryC fct.Dup2(ident:string) (const)"
148#define Default_doc "MqFactoryC fct.Default()"
149#define Initial_doc "MqFactoryC fct.Initial()"
150#define Next_doc "MqFactoryC fct.Next()"
151#define Prev_doc "MqFactoryC fct.Prev()"
154#define New_doc "MqContextC fct.New()"
157#define GetOriginalIdent_doc "string fct.GetOriginalIdent() (const)"
174 PyObject* argsO=NULL, *resultO=NULL;
175 PyObject* typeO = fct->fct_ctor.data;
176 PyObject* tmplO = (tmpl ?
MkOBJ_R(tmpl).self : NULL);
181 ret =
MkErrorSetC_1E(
"internal error: MQ_FACTORY_NEW_THREAD not supported");
185 static PyInterpreterConfig config = {
186 .use_main_obmalloc = 0,
190 .allow_daemon_threads = 0,
191 .check_multi_interp_extensions = 1,
192 .gil = PyInterpreterConfig_OWN_GIL,
195 PyThreadState *tstate = NULL;
196 PyStatus status = Py_NewInterpreterFromConfig(&tstate, &config);
197 if (
MK_RT_REF.mkThreadData.ptr == NULL) {
199 }
else if (strcmp(
MK_RT_REF.mkThreadData.name,
"pymqmsgque") == 0) {
205mk_dbg_color_ln(MK_COLOR_YELLOW,
"MQ_FACTORY_NEW_THREAD -> thread<%p>", tstate);
207 if (PyStatus_Exception(status)) {
215 PyObject *mainM = PyImport_AddModule(
"__main__");
216 PyObject *strO = PyUnicode_FromString(
"MQ_STARTUP_IS_THREAD");
217 PyObject_SetAttrString(mainM,
"__name__", strO);
222 FILE *FH = fopen(fn,
"r");
223 PyObject * mD = PyModule_GetDict(mainM);
224 PyObject *retO = PyRun_FileEx(FH,fn,Py_file_input,mD,mD,
true);
233 PyObject* QualNameO = PyType_GetQualName((PyTypeObject*)typeO);
234 if (QualNameO == NULL)
goto error2;
237 typeO = PyObject_GetAttr(mainM,QualNameO);
240 if (typeO == NULL)
goto error2;
263 typeO = Py_NewRef(Py_TYPE(tmplO));
268 argsO = PyTuple_New(0);
270 argsO = PyTuple_New(1);
271 PyTuple_SET_ITEM(argsO, 0, tmplO);
276 PyErr_SetString(PyExc_RuntimeError,
"internal error: factory object constructor is 'NULL'");
280 resultO = PyObject_Call(typeO, argsO, NULL);
329 bool doFactoryDelete,
344NS(sFactoryDataFree) (
348 if (_Py_IsFinalizing())
return;
353NS(sFactoryDataCopy) (
357 PyObject *arg = *dataP;
668 if (retVal == NULL) {
692 MQ_FCT retVal =
MqFactoryAdd (NULL,
NS(sFactoryCTor), constructor,
NS(sFactoryDataFree),
NS(sFactoryDataCopy),
NS(sFactoryDTor), NULL, NULL, NULL, ident);
693 if (retVal == NULL) {
715 MQ_FCT retVal =
MqFactoryAdd (NULL,
NS(sFactoryCTor), constructor,
NS(sFactoryDataFree),
NS(sFactoryDataCopy),
NS(sFactoryDTor), NULL, NULL, NULL, ident);
716 if (retVal == NULL) {
740static PyMethodDef
NS(MqFactoryC_Methods)[] = {
744 {
"Add" , (PyCFunction)
NS(MqFactoryC_Add) , METH_VARARGS|METH_CLASS ,
Add_doc },
747 {
"Get" , (PyCFunction)
NS(MqFactoryC_Get) , METH_VARARGS|METH_CLASS ,
Get_doc },
748 {
"GetCalled" , (PyCFunction)
NS(MqFactoryC_GetCalled) , METH_VARARGS|METH_CLASS ,
GetCalled_doc },
749 {
"GetCalledL" , (PyCFunction)
NS(MqFactoryC_GetCalledL) , METH_O|METH_CLASS ,
GetCalledL_doc },
750 {
"GetNull" , (PyCFunction)
NS(MqFactoryC_GetNull) , METH_NOARGS|METH_CLASS ,
GetNull_doc },
751 {
"HandleResolve" , (PyCFunction)
NS(MqFactoryC_HandleResolve) , METH_O|METH_CLASS ,
HandleResolve_doc },
752 {
"Instances" , (PyCFunction)
NS(MqFactoryC_Instances) , METH_NOARGS|METH_CLASS ,
Instances_doc },
755 {
"DefaultIdent" , (PyCFunction)
NS(MqFactoryC_DefaultIdent) , METH_NOARGS|METH_CLASS ,
DefaultIdent_doc },
756 {
"InitialIdent" , (PyCFunction)
NS(MqFactoryC_InitialIdent) , METH_NOARGS|METH_CLASS ,
InitialIdent_doc },
757 {
"LogAll" , (PyCFunction)
NS(MqFactoryC_LogAll) , METH_VARARGS|METH_CLASS ,
LogAll_doc },
764 {
"Dup2" , (PyCFunction)
NS(MqFactoryC_Dup2) , METH_O ,
Dup2_doc },
767 {
"Default" , (PyCFunction)
NS(MqFactoryC_Default) , METH_NOARGS ,
Default_doc },
768 {
"Initial" , (PyCFunction)
NS(MqFactoryC_Initial) , METH_NOARGS ,
Initial_doc },
769 {
"Next" , (PyCFunction)
NS(MqFactoryC_Next) , METH_NOARGS ,
Next_doc },
770 {
"Prev" , (PyCFunction)
NS(MqFactoryC_Prev) , METH_NOARGS ,
Prev_doc },
773 {
"New" , (PyCFunction)
NS(MqFactoryC_New) , METH_NOARGS ,
New_doc },
776 {
"GetOriginalIdent" , (PyCFunction)
NS(MqFactoryC_GetOriginalIdent) , METH_NOARGS ,
GetOriginalIdent_doc },
782 {NULL, NULL, 0, NULL}
787 return STRN2VAL(
MkSysPrintF(
"MqFactoryC[%s]", self->hdl ? self->hdl->originalIdent : NULL));
805 NS(sFactoryDTor), NULL, NULL, NULL,
812 PyErr_SetString(PyExc_RuntimeError,
"MqFactoryS exception");
824 PyVarObject_HEAD_INIT(NULL, 0)
825 .tp_name =
"pymqmsgque.MqFactoryC",
826 .tp_doc =
"PyMqMsgque MqFactoryC Type",
829 .tp_new = (newfunc)
NS(MqFactoryC_new),
830 .tp_methods =
NS(MqFactoryC_Methods),
831 .tp_flags = Py_TPFLAGS_DEFAULT,
833 .tp_str = (reprfunc)
NS(sMqFactoryC_Str)
#define OT_SETUP_VARARGS(min, max, d)
#define OT_SETUP_NOARG(d)
#define OT_SETUP_ONEARG(d)
#define OT_ERROR_LNG_RETURN
#define OT_retObj_SET_Error
#define OT_CONSTRUCTOR_POST(x)
#define OT_ERROR_CONSTRUCTOR(class)
#define OT_CHECK_REQUIRED(val)
#define OT_retObj_SET_None
#define OT_SETUP_CONSTRUCTOR_ARGS(...)
#define OT_ERROR_LNG_2_META(m)
#define OT_retObj_SET_STR(nat)
#define OT_CLASS_TYPE_REF
#define OT_CHECK_OPTIONAL(val)
#define OT_GET_CONSTR_NAME(ctor)
#define MkErrorC_Check(mng, PROC)
#define OT_CHECK_STRN(val)
#define OT_retObj_SET_CTX(nat)
#define OT_retObj_SET_FCT(nat)
struct MqFactoryC_Obj MqFactoryC_Obj
#define OT_SETUP_hdl_static_constr
#define GetOriginalIdent_doc
#define OT_retObj_CONSTR(mng)
#define HandleResolve_doc
#define OT_SETUP_hdl_static
#define OT_SETUP_hdl_constr
#define MkBufferListCreateTLS_T(name, num)
#define MkErrorGetCode_0E()
#define MkErrorStack_0E()
#define MkErrorSetC_3_NULL(...)
#define MkErrorSetC_1E(message)
#define MkErrorSetV_1E(printfmt,...)
static bool MkSysStringIsNULL(MK_STRN str)
struct MkThreadDataS MkThreadDataS
#define MqContextDelete(x)
#define MQ_CALLBACK_FACTORY_CTOR_ARGS
the MqFactoryCTorF arguments with default names
#define MqFactoryInstances()
static MQ_FCT MqFactoryPrev(MQ_FCT const fct)
get previous instance from linked-list of MqFactoryS type
#define MqFactoryHandleResolve(...)
static MQ_FCT MqFactoryGetNull(void)
Null-Slot - return a MqFactoryC typed NULL instance …
static MQ_FCT MqFactoryNext(MQ_FCT const fct)
get next instance from linked-list of MqFactoryS type
#define MqFactoryC_X2obj(x)
#define MqFactoryGetCalledL(...)
#define MqFactoryGet(...)
MK_STRN MqFactoryGetOriginalIdent(MQ_FCTN const fct)
helper function to return MqFactoryS::originalIdent
#define MqFactoryGetCalled(...)
#define MqFactoryLogAll(...)
#define MqFactoryInitial(...)
#define MqFactoryDefaultIdent()
#define MqFactoryNew(...)
#define MqFactoryInitialIdent()
#define MqFactoryDefault(...)
#define MqFactoryDup2(...)
#define MqFactoryAdd(...)
@ MQ_FACTORY_NEW_FILTER
create object as a filter
@ MQ_FACTORY_NEW_THREAD
create object as a thread
@ MQ_FACTORY_NEW_INIT
initial object, nothing else is known
@ MQ_FACTORY_NEW_SLAVE
create object as a slave of an other object
@ MQ_FACTORY_NEW_CHILD
create object as a child of an other object
MK_BFL MqInitGetArg0(void)
get the process startup-prefix argument
MkErrorCheck(MqSendSTART(mqctx))
#define OT_CHECK_NIH(val)
#define OT_CHECK_BFLN(val, nullB)
#define OT_CHECK_CONSTRUCTOR(val)
struct MkBufferS::@5 storage
PUBLIC data structure for the pymqmsgque-specific-data
data used to define a factory