theLink 10.0
Loading...
Searching...
No Matches
MqFactoryC_py.c
Go to the documentation of this file.
1
9/* LABEL-START */
10
11#define META_FILE_NAME "MqFactoryC_py.c"
12
14
15// PY class
16#define OT_CLASS (&NS(MqFactoryCR))
17#define OT_CLASS_NAME "MqFactoryC"
18
19#define OT_LNG2META(O) MqFct(VAL2MNG(O))
20
21#define OT_retObj_CONSTR(mng) OT_retObj_SET(NS(MqFactoryC_CTOR)(MK_RT_CALL (PyTypeObject*)class,mng))
22
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;
30
31#define OT_SETUP_hdl_static_constr OT_SETUP_hdl_static
32
33#if !defined(SetupRtFromObj_X)
34 #define SetupRtFromObj_X(hdl) AllRtSetup_X(hdl)
35 #define SetupRtFromObj_XN(hdl) AllRtSetup_XN(hdl)
36#endif
37
38// MO class
39#undef MqFactoryCTT
40#define MqFactoryCTT MQ(MqMsgqueThreadState).MqFactoryCTT
41/* MqFactoryC_MK_NULL defined in LibMqMsgque_py.h */
42
43__attribute__((unused)) mk_inline
44OT_OBJ_T NS(MqFactoryC_CTOR) (MK_RT_ARGS OT_CLS_T type, MQ_FCT hdl) {
45 return MK(AtomCreate)(MK_RT_CALL type,MqFactoryC_X2obj(hdl));
46}
47
48// helper: mk_dbg_color_ln(MK_COLOR_YELLOW,"hdl<%p>, self<%p>", obj, self);
49
50// META: ObjNew feature: selfCreate will be called from "ObjNew->MkSelfNew" if MkObj need a SELF pointer
51static MK_PTR NS(MqFactoryC_selfCreate) (MK_RT_ARGS MK_OBJ const obj, MK_PTR const env) {
52 return MK(AtomCreate) (MK_RT_CALL OT_CLASS,obj);
53}
54// META: called if MkObj must be destroyed and if the SELF is still alive → goal: destroy the SELF
55static void NS(MqFactoryC_selfDelete) (MK_RT_ARGS MK_PTR self, MK_PTR const env) {
56 MK(AtomDeleteHard) (MK_RT_CALL OT_SELF);
57}
58// META: called to destroy link from SELF to META
59static void NS(MqFactoryC_selfUnlink) (MK_RT_ARGS MK_PTR self, MK_PTR const env) {
60 MkObjectC_Obj *selfO = (MkObjectC_Obj*) self;
61 selfO->hdl = NULL;
62}
63
64// initialize the PY and MO class specific object
65#define ClassInit \
66 /* if not already done, initialize NEW META type */ \
67 if (MqFactoryCTT == NULL) MqFactoryCTT = MqFactorySTT; \
68 \
69 /* protect against double call */ \
70 if (MqFactoryCTT->selfCreate == NS(MqFactoryC_selfCreate)) return MK_OK; \
71 \
72 /* add "selfCreate" and "selfDelete" feature to the META-Class */ \
73 MqFactoryCTT->selfCreate = NS(MqFactoryC_selfCreate); \
74 MqFactoryCTT->selfDelete = NS(MqFactoryC_selfDelete); \
75 MqFactoryCTT->selfUnlink = NS(MqFactoryC_selfUnlink); \
76 \
77 if (!PyType_HasFeature(OT_CLASS,Py_TPFLAGS_READY)) { \
78 NS(MqFactoryCR).tp_base = MqFactoryC_base; \
79 OtErrorCheckLng (PyType_Ready(OT_CLASS)); \
80 } \
81 OtErrorCheckLng(PyModule_AddObjectRef(m, "MqFactoryC", (PyObject *)OT_CLASS)); \
82 \
83 /* define the "NULL" object */ \
84 MqFactoryC_MK_NULL = Py_NewRef(MK(AtomCreate) (MK_RT_CALL OT_CLASS, NULL /*obj*/));
85
86/* LABEL-END */
87
88#if 0
89#define SetupRtFromObj_XN(hdl) AllRtSetup_XN(hdl)
90
91#undef OT_SETUP_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;
106
107#undef OT_retObj_RETURN
108#define OT_retObj_RETURN \
109if (is_constr_hard) { \
110 /* BUG-FIX */ \
111 /* the factory is always global and has NO link to an external variable… */ \
112 /* need "Py_INCREF" to keep the factory alive */ \
113 /* test: Nhi1Exec server.py */ \
114 Py_INCREF (retObj); \
115} \
116 return ((PyObject*)retObj);
117#endif
118
124
125// BEGIN-DOC - created by 'py_MqS.tcl -i NHI1_HOME/theLink/c/gen/c_mqmsgque.meta' - DO NOT change
126
127// doc-key: MqFactoryC,MqFactory,sCc,func
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\"?)"
130
131// doc-key: MqFactoryC,MqFactory,sc_,func
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()"
138
139// doc-key: MqFactoryC,MqFactory,sm_,func
140#define DefaultIdent_doc "string MqFactoryC.DefaultIdent()"
141#define InitialIdent_doc "string MqFactoryC.InitialIdent()"
142#define LogAll_doc "MqFactoryC.LogAll(?callfunc:string=\"MK_NULL\"?)"
143
144// doc-key: MqFactoryC,MqFactory,oCx,func
145#define Dup2_doc "MqFactoryC fct.Dup2(ident:string) (const)"
146
147// doc-key: MqFactoryC,MqFactory,oc_,func
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()"
152
153// doc-key: MqFactoryC,MqFactory,oco,func
154#define New_doc "MqContextC fct.New()"
155
156// doc-key: MqFactoryC,MqFactory,om_,func
157#define GetOriginalIdent_doc "string fct.GetOriginalIdent() (const)"
158// skip class-overload: HandleGet → MkObjectHandleGet
159// skip class-overload: Log → MkObjectLog
160
161// END-DOC - created by 'py_MqS.tcl -i NHI1_HOME/theLink/c/gen/c_mqmsgque.meta' - DO NOT change
162
168
169static enum MkErrorE
171{
172 MQ_CTX mqctx = NULL;
173 enum MkErrorE ret = MK_OK;
174 PyObject* argsO=NULL, *resultO=NULL;
175 PyObject* typeO = fct->fct_ctor.data;
176 PyObject* tmplO = (tmpl ? MkOBJ_R(tmpl).self : NULL);
177
178//printXV(tmpl, "PYTH: Factory[%s] -> %s\n", MqFactoryGetOriginalIdent(fct), MqLogFactoryE(create))
179 if (create == MQ_FACTORY_NEW_THREAD) {
180#if 0
181 ret = MkErrorSetC_1E("internal error: MQ_FACTORY_NEW_THREAD not supported");
182 goto error;
183#else
184
185 static PyInterpreterConfig config = {
186 .use_main_obmalloc = 0,
187 .allow_fork = 0,
188 .allow_exec = 0,
189 .allow_threads = 1,
190 .allow_daemon_threads = 0,
191 .check_multi_interp_extensions = 1,
192 .gil = PyInterpreterConfig_OWN_GIL,
193 };
194
195 PyThreadState *tstate = NULL;
196 PyStatus status = Py_NewInterpreterFromConfig(&tstate, &config);
197 if (MK_RT_REF.mkThreadData.ptr == NULL) {
198 MK_RT_REF.mkThreadData = (MkThreadDataS) { "pymqmsgque", tstate } ;
199 } else if (strcmp(MK_RT_REF.mkThreadData.name,"pymqmsgque") == 0) {
200 MkErrorSetC_1E("'MK_RT_REF.mkThreadData' not NULL as expected");
201 } else {
202 MkErrorSetV_1E("MK_RT_REF.mkThreadData' already in use with extension: %s", MK_RT_REF.mkThreadData.name);
203 }
204
205mk_dbg_color_ln(MK_COLOR_YELLOW,"MQ_FACTORY_NEW_THREAD -> thread<%p>", tstate);
206
207 if (PyStatus_Exception(status)) {
208 return MkErrorSetC_3_NULL(status.err_msg, status.func, 300+status.exitcode);
209 }
210
211 Py_XINCREF(typeO);
212 Py_XINCREF(tmplO);
213
214 // mark new interpreter as "MQ_STARTUP_IS_THREAD"
215 PyObject *mainM = PyImport_AddModule("__main__");
216 PyObject *strO = PyUnicode_FromString("MQ_STARTUP_IS_THREAD");
217 PyObject_SetAttrString(mainM,"__name__", strO);
218 Py_CLEAR(strO);
219
220 // source initial script
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);
225 if (retO == NULL) {
226 ret = MkErrorSetC_1E("MQ_FACTORY_NEW_THREAD failed");
227 //PyGILState_Release(gilstate);
228 goto error3;
229 }
230 Py_CLEAR(retO);
231
232 // type is from the "wrong" interpreter → try to figure out the right one
233 PyObject* QualNameO = PyType_GetQualName((PyTypeObject*)typeO);
234 if (QualNameO == NULL) goto error2;
235
236 Py_CLEAR(typeO);
237 typeO = PyObject_GetAttr(mainM,QualNameO);
238 Py_CLEAR(QualNameO);
239
240 if (typeO == NULL) goto error2;
241
242 // need a NEW template class because the OLD class has a TYPE in the WRONG interpreter.
243 Py_CLEAR(tmplO);
244 tmplO = MK(AtomCreate)(MK_RT_CALL (PyTypeObject*)typeO,MkOBJ(tmpl));
245
246 goto cont;
247
248 error2:
249 ret = MkErrorSetC_1E("internal error: unable to resolve type");
250 error3:
251 goto error;
252 cont:
253#endif
254 } else {
255
256 Py_XINCREF(typeO);
257 Py_XINCREF(tmplO);
258 }
259
260 // get typeO from "parent"
262 Py_CLEAR(typeO);
263 typeO = Py_NewRef(Py_TYPE(tmplO));
264 }
265
266 // setup argsO
267 if (create & MQ_FACTORY_NEW_INIT) {
268 argsO = PyTuple_New(0);
269 } else {
270 argsO = PyTuple_New(1);
271 PyTuple_SET_ITEM(argsO, 0, tmplO);
272 Py_INCREF(tmplO);
273 }
274
275 if (typeO == NULL) {
276 PyErr_SetString(PyExc_RuntimeError,"internal error: factory object constructor is 'NULL'");
277 goto error;
278 } else {
279 // call constructor
280 resultO = PyObject_Call(typeO, argsO, NULL);
281 check_NULL(resultO) goto error;
282 }
283
284 // right typeO?
285 if (!PyObject_IsInstance(resultO, (PyObject*) &NS(MqContextCR))) goto error;
286 mqctx = VAL2CTX(resultO);
287
288 // check for MQ error
290
291 // copy and initialize "setup" data
292 if (create & (MQ_FACTORY_NEW_CHILD)) {
293 // !Attention!. the ctxId would be set later… in MqLinkCreate…
294 MqSetupDup(mqctx, tmpl);
295 }
296
297 // a MQ_FACTORY_NEW_FILTER has "MkOBJ_R(mqctx).self" as ONLY reference… incr "refCnt"
298 // related to "NS(sFactoryDTor)→MQ_FACTORY_NEW_INIT→Py_XINCREF"
299 if (create & MQ_FACTORY_NEW_FILTER) {
300 Py_XINCREF(resultO);
301 }
302
303 *contextP = mqctx;
304
305end:
306//printTxt("OK")
307 // not used anymore because "Py_INCREF(self)" in "MqContextC_New" was deleted
308 //Py_CLEAR(resultO);
309 Py_CLEAR(argsO);
310 Py_CLEAR(tmplO);
311 Py_CLEAR(typeO);
312//printXLngObj(mqctx,resultO)
313
314 return ret;
315
316error:
317//printTxt("ERROR")
318 Py_CLEAR(resultO);
319 *contextP = NULL;
321 ret = MkErrorStack_0E();
322 goto end;
323}
324
325static void MK_DECL
326NS(sFactoryDTor) (
328 MQ_CTX context,
329 bool doFactoryDelete,
330 MQ_FCT const data
331) {
332
333 // related to "NS(sFactoryCTor)→MQ_FACTORY_NEW_INIT→Py_XINCREF"
334 if (doFactoryDelete && context->setup.factoryCall == MQ_FACTORY_NEW_FILTER) {
335 OT_OBJ_T selfO = OT_SELF_X(context);
336 Py_CLEAR (selfO);
337 }
338
339 // do a 'hard'-delete if 'Py_CLEAR' does NOT call the destructor
340 MqContextDelete (context);
341}
342
343static void MK_DECL
344NS(sFactoryDataFree) (
346 MK_PTR *dataP
347) {
348 if (_Py_IsFinalizing()) return;
349 Py_CLEAR(*dataP);
350}
351
352static void MK_DECL
353NS(sFactoryDataCopy) (
355 MK_PTR *dataP
356) {
357 PyObject *arg = *dataP;
358 Py_INCREF(arg); // THREAD → no DEEP copy
359}
360
366
367// BEGIN-MqFactoryC - created by 'py_MqC.tcl -i NHI1_HOME/theLink/c/gen/c_mqmsgque.meta' - DO NOT change
368
372
373// doc-key: MqFactoryC,MqFactoryC-Class-Export,sc_
374
376static OT_ProcRet NS(MqFactoryC_HandleResolve) (OtClass_ARGS) {
379 MK_HDL netHdl = 0;
382 MQ_FCT retVal = MqFactoryHandleResolve (netHdl);
383 OT_retObj_SET_FCT(retVal);
384 goto end;
385 error:
387 end:
389}
390
391// doc-key: MqFactoryC,MqFactoryC-Class-Export,om_
392
393// skip on class-overload: MqFactoryHandleGet → MkObjectHandleGet
395static OT_ProcRet NS(MqFactoryC_HandleGet) (MqFactoryC_ARGS) {OT_ERROR_LNG_RETURN;}
396
398// MqFactoryC_Class_PY_API
399
403
404// doc-key: MqFactoryC,MqFactoryC-Class-Introspection,oc_
405
407static OT_ProcRet NS(MqFactoryC_Next) (MqFactoryC_ARGS) {
411 MQ_FCT retVal = MqFactoryNext (hdl);
412 OT_retObj_SET_FCT(retVal);
413 goto end;
414 error:
416 end:
418}
419
421static OT_ProcRet NS(MqFactoryC_Prev) (MqFactoryC_ARGS) {
425 MQ_FCT retVal = MqFactoryPrev (hdl);
426 OT_retObj_SET_FCT(retVal);
427 goto end;
428 error:
430 end:
432}
433
434// doc-key: MqFactoryC,MqFactoryC-Class-Introspection,sc_
435
437static OT_ProcRet NS(MqFactoryC_Instances) (OtClass_ARGS) {
441 MQ_FCT retVal = MqFactoryInstances ();
442 OT_retObj_SET_FCT(retVal);
443 goto end;
444 error:
446 end:
448}
449
451// MqFactoryC_Class_PY_API
452
456
457// doc-key: MqFactoryC,MqFactoryC-Class-Misc,sc_
458
460static OT_ProcRet NS(MqFactoryC_GetNull) (OtClass_ARGS) {
464 MQ_FCT retVal = MqFactoryGetNull ();
465 OT_retObj_SET_FCT(retVal);
466 goto end;
467 error:
469 end:
471}
472
474// MqFactoryC_Class_PY_API
475
479
480// doc-key: MqFactoryC,MqFactoryC-Get,sc_
481
483static OT_ProcRet NS(MqFactoryC_Get) (OtClass_ARGS) {
486 MK_STRN ident = "";
489 MQ_FCT retVal = MqFactoryGet (ident);
490 OT_retObj_SET_FCT(retVal);
491 goto end;
492 error:
494 end:
496}
497
499static OT_ProcRet NS(MqFactoryC_GetCalled) (OtClass_ARGS) {
502 MK_STRN ident = "";
505 MQ_FCT retVal = MqFactoryGetCalled (ident);
506 OT_retObj_SET_FCT(retVal);
507 goto end;
508 error:
510 end:
512}
513
515static OT_ProcRet NS(MqFactoryC_GetCalledL) (OtClass_ARGS) {
518 MkBufferListCreateTLS_T(largs,10);
521 MQ_FCT retVal = MqFactoryGetCalledL (largs);
522 OT_retObj_SET_FCT(retVal);
523 goto end;
524 error:
526 end:
528}
529
530// doc-key: MqFactoryC,MqFactoryC-Get,om_
531
533static OT_ProcRet NS(MqFactoryC_GetOriginalIdent) (MqFactoryC_ARGS) {
538 goto end;
539 error:
541 end:
543}
544
546// MqFactoryC_Get_PY_API
547
551
552// doc-key: MqFactoryC,MqFactoryC-Misc,oc_
553
555static OT_ProcRet NS(MqFactoryC_Default) (MqFactoryC_ARGS) {
559 MQ_FCT retVal = MqFactoryDefault (hdl);
560 OT_retObj_SET_FCT(retVal);
561 goto end;
562 error:
564 end:
566}
567
569static OT_ProcRet NS(MqFactoryC_Initial) (MqFactoryC_ARGS) {
573 MQ_FCT retVal = MqFactoryInitial (hdl);
574 OT_retObj_SET_FCT(retVal);
575 goto end;
576 error:
578 end:
580}
581
582// doc-key: MqFactoryC,MqFactoryC-Misc,oco
583
585static OT_ProcRet NS(MqFactoryC_New) (MqFactoryC_ARGS) {
589 MQ_CTX val_out;
590 MkErrorC_Check(hdl,MqFactoryNew (hdl, NULL, &val_out));
591 OT_retObj_SET_CTX(val_out);
592 goto end;
593 error:
595 end:
597}
598
599// doc-key: MqFactoryC,MqFactoryC-Misc,om_
600
601// skip on class-overload: MqFactoryLog → MkObjectLog
604
605// doc-key: MqFactoryC,MqFactoryC-Misc,sm_
606
608static OT_ProcRet NS(MqFactoryC_DefaultIdent) (OtClass_ARGS) {
613 goto end;
614 error:
616 end:
618}
619
621static OT_ProcRet NS(MqFactoryC_InitialIdent) (OtClass_ARGS) {
626 goto end;
627 error:
629 end:
631}
632
634static OT_ProcRet NS(MqFactoryC_LogAll) (OtClass_ARGS) {
637 MK_STRN callfunc = NULL;
640 if (MkSysStringIsNULL(callfunc)) {callfunc = OT_GET_CALL_PROC;}
641 MqFactoryLogAll (callfunc);
643 goto end;
644 error:
646 end:
649}
650
652// MqFactoryC_Misc_PY_API
653
657
658// doc-key: MqFactoryC,MqFactoryC-TOR,oCx
659
661static OT_ProcRet NS(MqFactoryC_Dup2) (MqFactoryC_ARGS) {
664 MK_STRN ident = 0;
667 MQ_FCT retVal = MqFactoryDup2 (hdl, ident);
668 if (retVal == NULL) {
669 OT_ERROR_CONSTRUCTOR(MqFactoryC);
670 goto error;
671 }
672 OT_retObj_SET_FCT(retVal);
673 goto end;
674 error:
676 end:
678}
679
680// doc-key: MqFactoryC,MqFactoryC-TOR,sCc
681
683static OT_ProcRet NS(MqFactoryC_Add) (OtClass_ARGS) {
686 MK_CCP constructor = 0;
688 MK_STRN ident = NULL;
691 if (MkSysStringIsNULL(ident)) {ident = OT_GET_CONSTR_NAME(constructor);}
692 MQ_FCT retVal = MqFactoryAdd (NULL, NS(sFactoryCTor), constructor, NS(sFactoryDataFree), NS(sFactoryDataCopy), NS(sFactoryDTor), NULL, NULL, NULL, ident);
693 if (retVal == NULL) {
694 OT_ERROR_CONSTRUCTOR(MqFactoryC);
695 goto error;
696 }
697 OT_CONSTRUCTOR_POST(retVal)
698 OT_retObj_SET_FCT(retVal);
699 goto end;
700 error:
702 end:
704}
705
707static OT_ProcRet NS(MqFactoryC_new) (CONSTR_ARGS) {
710 MK_CCP constructor = 0;
712 MK_STRN ident = NULL;
714 if (MkSysStringIsNULL(ident)) {ident = OT_GET_CONSTR_NAME(constructor);}
715 MQ_FCT retVal = MqFactoryAdd (NULL, NS(sFactoryCTor), constructor, NS(sFactoryDataFree), NS(sFactoryDataCopy), NS(sFactoryDTor), NULL, NULL, NULL, ident);
716 if (retVal == NULL) {
717 OT_ERROR_CONSTRUCTOR(MqFactoryC);
718 goto error;
719 }
720 OT_CONSTRUCTOR_POST(retVal)
721 OT_retObj_CONSTR(retVal);
722 goto end;
723 error:
725 end:
727}
728
730// MqFactoryC_TOR_PY_API
731
732// END-MqFactoryC - created by 'py_MqC.tcl -i NHI1_HOME/theLink/c/gen/c_mqmsgque.meta' - DO NOT change
733
739
740static PyMethodDef NS(MqFactoryC_Methods)[] = {
741 // BEGIN-CLASS - created by 'py_MqS.tcl -i NHI1_HOME/theLink/c/gen/c_mqmsgque.meta' - DO NOT change
742
743 // doc-key: MqFactoryC,MqFactory,sCc
744 { "Add" , (PyCFunction) NS(MqFactoryC_Add) , METH_VARARGS|METH_CLASS , Add_doc },
745
746 // doc-key: MqFactoryC,MqFactory,sc_
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 },
753
754 // doc-key: MqFactoryC,MqFactory,sm_
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 },
758
759 // END-CLASS - created by 'py_MqS.tcl -i NHI1_HOME/theLink/c/gen/c_mqmsgque.meta' - DO NOT change
760
761 // BEGIN-OBJ - created by 'py_MqS.tcl -i NHI1_HOME/theLink/c/gen/c_mqmsgque.meta' - DO NOT change
762
763 // doc-key: MqFactoryC,MqFactory,oCx
764 { "Dup2" , (PyCFunction) NS(MqFactoryC_Dup2) , METH_O , Dup2_doc },
765
766 // doc-key: MqFactoryC,MqFactory,oc_
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 },
771
772 // doc-key: MqFactoryC,MqFactory,oco
773 { "New" , (PyCFunction) NS(MqFactoryC_New) , METH_NOARGS , New_doc },
774
775 // doc-key: MqFactoryC,MqFactory,om_
776 { "GetOriginalIdent" , (PyCFunction) NS(MqFactoryC_GetOriginalIdent) , METH_NOARGS , GetOriginalIdent_doc },
777 // skip class-overload: MqFactoryHandleGet → HandleGet, NS(MqFactoryC_HandleGet)
778 // skip class-overload: MqFactoryLog → Log, NS(MqFactoryC_Log)
779
780 // END-OBJ - created by 'py_MqS.tcl -i NHI1_HOME/theLink/c/gen/c_mqmsgque.meta' - DO NOT change
781
782 {NULL, NULL, 0, NULL} /* Sentinel */
783};
784
785static PyObject* NS(sMqFactoryC_Str) (MqFactoryC_Obj *self) {
786 MkRtSetup_X(self->hdl);
787 return STRN2VAL(MkSysPrintF("MqFactoryC[%s]", self->hdl ? self->hdl->originalIdent : NULL));
788}
789
790// vim: Marker(p)
796
797int
798NS(pMqFactoryC_Setup) (MQ_RT_ARGS OT_OBJ_T m)
799{
800 if (!strcmp(MqFactoryDefaultIdent(), "libmqmsgque")) {
801 if ( MqFactoryDefault(
804 NS(sFactoryCTor), (MK_PTR)&NS(MqContextCR), NULL, NULL,
805 NS(sFactoryDTor), NULL, NULL, NULL,
806 "pymqmsgque"
807 )
808 )
809 ) == NULL
810 )
811 {
812 PyErr_SetString(PyExc_RuntimeError, "MqFactoryS exception");
813 goto error;
814 }
815 }
816
817 return 0;
818error:
819 return -1;
820}
821
822// OT_CLASS_TYPE_REF NS(MqFactoryCR) = {0};
824 PyVarObject_HEAD_INIT(NULL, 0)
825 .tp_name = "pymqmsgque.MqFactoryC",
826 .tp_doc = "PyMqMsgque MqFactoryC Type",
827 .tp_itemsize = sizeof(MqFactoryC_Obj),
828 .tp_itemsize = 0,
829 .tp_new = (newfunc) NS(MqFactoryC_new),
830 .tp_methods = NS(MqFactoryC_Methods),
831 .tp_flags = Py_TPFLAGS_DEFAULT,
832 .tp_base = NULL,
833 .tp_str = (reprfunc) NS(sMqFactoryC_Str)
834};
835
836int
837NS(pMqFactoryC_Init) (MK_RT_ARGS OT_OBJ_T m)
838{
841
842 // MqFactoryCTT->noSelf = true;
843
844 return 0;
845error:
846 return -1;
847}
848
849// vim: nowrap
#define OT_SELF
#define MK(n)
#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_SELF_X(x)
#define OT_CONSTRUCTOR_POST(x)
#define OT_FRAME_CLEANUP
#define OT_ERROR_CONSTRUCTOR(class)
#define OT_CHECK_REQUIRED(val)
#define OT_retObj_SET_None
PyTypeObject * OT_CLS_T
#define OT_SETUP_CONSTRUCTOR_ARGS(...)
#define OT_retObj_RETURN
#define OT_GET_CALL_PROC
#define OT_ERROR_LNG_2_META(m)
PyObject * OT_OBJ_T
#define OT_retObj_SET_STR(nat)
#define OT_CLASS_TYPE_REF
#define OT_CHECK_OPTIONAL(val)
#define check_NULL(E)
#define OT_GET_CONSTR_NAME(ctor)
#define OT_CHECK_NOARGS
#define MkErrorC_Check(mng, PROC)
#define OT_ProcRet
#define CONSTR_ARGS
#define OtClass_ARGS
#define STRN2VAL(nat)
#define OT_CHECK_STRN(val)
tag: nhi1-release-250425
#define MqFactoryC_ARGS
#define OT_retObj_SET_CTX(nat)
#define NS(n)
#define OT_retObj_SET_FCT(nat)
struct MqFactoryC_Obj MqFactoryC_Obj
#define VAL2CTX(val)
#define Instances_doc
#define Initial_doc
#define OT_SETUP_hdl_static_constr
#define GetOriginalIdent_doc
#define OT_SETUP_hdl
#define New_doc
#define OT_retObj_CONSTR(mng)
#define Get_doc
#define LogAll_doc
#define GetNull_doc
#define Next_doc
#define HandleResolve_doc
#define GetCalledL_doc
#define DefaultIdent_doc
#define Prev_doc
#define InitialIdent_doc
#define OT_CLASS
#define OT_SETUP_hdl_static
#define OT_SETUP_hdl_constr
#define GetCalled_doc
#define Dup2_doc
#define new_doc
#define Add_doc
#define Default_doc
#define ClassInit
#define error
Definition high_lng.h:339
#define mqctx
#define MkBufferListCreateTLS_T(name, num)
#define MkErrorGetCode_0E()
#define MkErrorStack_0E()
#define MkErrorSetC_3_NULL(...)
#define MkErrorSetC_1E(message)
#define MkErrorSetV_1E(printfmt,...)
#define MK_ERROR_DEFAULT
#define MK_ERROR_FORMAT
#define MK_DECL
#define mk_inline
#define MK_NULL_NO
#define MK_UNUSED
#define MK_DEPRECATED
MkErrorE
MK_OK
MK_PTRB * MK_PTR
const MK_STRB * MK_STRN
MK_PTRB * MK_CCP
int32_t MK_HDL
#define MkOBJ(x)
#define MkOBJ_R(x)
#define MkSysPrintF(...)
static bool MkSysStringIsNULL(MK_STRN str)
struct MkThreadDataS MkThreadDataS
#define MK_RT_CALL
#define MkRtSetup_X(x)
#define MK_RT_ARGS
#define MK_RT_REF
#define MqSetupDup(...)
#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
#define MQ_RT_ARGS
#define MQ_STATIC_RT
MK_OBJ const obj
Definition high_lng.h:136
MkErrorCheck(MqSendSTART(mqctx))
#define OT_CHECK_NIH(val)
#define OT_CHECK_BFLN(val, nullB)
#define OT_CHECK_CONSTRUCTOR(val)
MK_BUF * data
union MkBufferU first
struct MkBufferS::@5 storage
PyObject_HEAD MK_OBJ hdl
PUBLIC data structure for the pymqmsgque-specific-data
data used to define a factory
MK_STRN C