theLink 10.0
Loading...
Searching...
No Matches
MqFactoryC_py.c File Reference

tag: nhi1-release-250425 More...

+ Include dependency graph for MqFactoryC_py.c:

Go to the source code of this file.

Macros

#define META_FILE_NAME   "MqFactoryC_py.c"
 
#define OT_CLASS   (&NS(MqFactoryCR))
 
#define OT_CLASS_NAME   "MqFactoryC"
 
#define OT_LNG2META(O)
 
#define OT_retObj_CONSTR(mng)
 
#define OT_SETUP_hdl   OT_SETUP_hdl_tmpl(MqFactoryC)
 
#define OT_SETUP_hdl__null_allow   OT_SETUP_hdl_tmpl__null_allow(MqFactoryC)
 
#define OT_SETUP_hdl_constr
 
#define OT_SETUP_hdl_destr   OT_SETUP_hdl_tmpl__null_allow(MqFactoryC)
 
#define OT_SETUP_hdl_static
 
#define OT_SETUP_hdl_static_constr   OT_SETUP_hdl_static
 
#define SetupRtFromObj_X(hdl)
 
#define SetupRtFromObj_XN(hdl)
 
#define MqFactoryCTT   MQ(MqMsgqueThreadState).MqFactoryCTT
 
#define ClassInit
 
#define Add_doc   "MqFactoryC MqFactoryC.Add(constructor:class, ?ident:string=\"MK_NULL\"?)"
 
#define new_doc   "MqFactoryC MqFactoryC.new(constructor:class, ?ident:string=\"MK_NULL\"?)"
 
#define Get_doc   "MqFactoryC MqFactoryC.Get(?ident:string=\"\"?)"
 
#define GetCalled_doc   "MqFactoryC MqFactoryC.GetCalled(?ident:string=\"\"?)"
 
#define GetCalledL_doc   "MqFactoryC MqFactoryC.GetCalledL(largs:MkBufferListC)"
 
#define GetNull_doc   "MqFactoryC MqFactoryC.GetNull()"
 
#define HandleResolve_doc   "MqFactoryC MqFactoryC.HandleResolve(netHdl:MK_HDL)"
 
#define Instances_doc   "MqFactoryC MqFactoryC.Instances()"
 
#define DefaultIdent_doc   "string MqFactoryC.DefaultIdent()"
 
#define InitialIdent_doc   "string MqFactoryC.InitialIdent()"
 
#define LogAll_doc   "MqFactoryC.LogAll(?callfunc:string=\"MK_NULL\"?)"
 
#define Dup2_doc   "MqFactoryC fct.Dup2(ident:string) (const)"
 
#define Default_doc   "MqFactoryC fct.Default()"
 
#define Initial_doc   "MqFactoryC fct.Initial()"
 
#define Next_doc   "MqFactoryC fct.Next()"
 
#define Prev_doc   "MqFactoryC fct.Prev()"
 
#define New_doc   "MqContextC fct.New()"
 
#define GetOriginalIdent_doc   "string fct.GetOriginalIdent() (const)"
 

Functions

static OT_OBJ_T pymqmsgque_MqFactoryC_CTOR (MK_RT mkrt, OT_CLS_T type, MQ_FCT hdl)
 
static MK_PTR pymqmsgque_MqFactoryC_selfCreate (MK_RT mkrt, MK_OBJ const obj, MK_PTR const env)
 
static void pymqmsgque_MqFactoryC_selfDelete (MK_RT mkrt, MK_PTR self, MK_PTR const env)
 
static void pymqmsgque_MqFactoryC_selfUnlink (MK_RT mkrt, MK_PTR self, MK_PTR const env)
 
static enum MkErrorE pymqmsgque_sFactoryCTor (MQ_CALLBACK_FACTORY_CTOR_ARGS)
 
static void pymqmsgque_sFactoryDTor (MK_RT mkrt, MQ_CTX context, bool doFactoryDelete, MQ_FCT const data)
 
static void pymqmsgque_sFactoryDataFree (MK_RT mkrt, MK_PTR *dataP)
 
static void pymqmsgque_sFactoryDataCopy (MK_RT mkrt, MK_PTR *dataP)
 
static OT_ProcRet pymqmsgque_MqFactoryC_HandleResolve (OtClass_ARGS)
  Python: [static] MqFactoryC MqFactoryC.HandleResolve(netHdl:MK_HDL) C-API
Handle-Resolve-Slot - return a MqFactoryC from netHdl or None if invalid…
 
MK_DEPRECATED static MK_UNUSED OT_ProcRet pymqmsgque_MqFactoryC_HandleGet (MqFactoryC_ARGS)
 
static OT_ProcRet pymqmsgque_MqFactoryC_Next (MqFactoryC_ARGS)
  Python: MqFactoryC fct.Next() C-API
get next instance from linked-list of MqFactoryS type
 
static OT_ProcRet pymqmsgque_MqFactoryC_Prev (MqFactoryC_ARGS)
  Python: MqFactoryC fct.Prev() C-API
get previous instance from linked-list of MqFactoryS type
 
static OT_ProcRet pymqmsgque_MqFactoryC_Instances (OtClass_ARGS)
  Python: [static] MqFactoryC MqFactoryC.Instances() C-API
get head-instance from linked-list of MqFactoryS type …
 
static OT_ProcRet pymqmsgque_MqFactoryC_GetNull (OtClass_ARGS)
  Python: [static] MqFactoryC MqFactoryC.GetNull() C-API
Null-Slot - return a MqFactoryC typed NULL instance …
 
static OT_ProcRet pymqmsgque_MqFactoryC_Get (OtClass_ARGS)
  Python: [static] MqFactoryC MqFactoryC.Get(?ident:string=""?) C-API
return the MqFactoryC
 
static OT_ProcRet pymqmsgque_MqFactoryC_GetCalled (OtClass_ARGS)
  Python: [static] MqFactoryC MqFactoryC.GetCalled(?ident:string=""?) C-API
returns the MqFactoryC identified by ident
 
static OT_ProcRet pymqmsgque_MqFactoryC_GetCalledL (OtClass_ARGS)
  Python: [static] MqFactoryC MqFactoryC.GetCalledL(largs:MkBufferListC) C-API
returns the MqFactoryC identified as first argument in the largs MkBufferListC
 
static OT_ProcRet pymqmsgque_MqFactoryC_GetOriginalIdent (MqFactoryC_ARGS)
  Python: string fct.GetOriginalIdent() C-API
helper function to return MqFactoryS::originalIdent
 
static OT_ProcRet pymqmsgque_MqFactoryC_Default (MqFactoryC_ARGS)
  Python: MqFactoryC fct.Default() C-API
set the default-attribute to the factory
 
static OT_ProcRet pymqmsgque_MqFactoryC_Initial (MqFactoryC_ARGS)
  Python: MqFactoryC fct.Initial() C-API
set the initial-attribut to fct
 
static OT_ProcRet pymqmsgque_MqFactoryC_New (MqFactoryC_ARGS)
  Python: MqContextC fct.New() C-API
create a new MqContextC from a MqFactoryC
 
MK_DEPRECATED static MK_UNUSED OT_ProcRet pymqmsgque_MqFactoryC_Log (MqFactoryC_ARGS)
 
static OT_ProcRet pymqmsgque_MqFactoryC_DefaultIdent (OtClass_ARGS)
  Python: [static] string MqFactoryC.DefaultIdent() C-API
return the factory-identifier of the default MqFactoryC
 
static OT_ProcRet pymqmsgque_MqFactoryC_InitialIdent (OtClass_ARGS)
  Python: [static] string MqFactoryC.InitialIdent() C-API
return the factory-identifier of the initial MqFactoryC
 
static OT_ProcRet pymqmsgque_MqFactoryC_LogAll (OtClass_ARGS)
  Python: [static] MqFactoryC.LogAll(?callfunc:string="MK_NULL"?) C-API
log all "factories" to stderr
 
static OT_ProcRet pymqmsgque_MqFactoryC_Dup2 (MqFactoryC_ARGS)
  Python: [constructor] MqFactoryC fct.Dup2(ident:string) C-API
create a duplicate of the singleton object MqFactoryC using a new factory-identifer
 
static OT_ProcRet pymqmsgque_MqFactoryC_Add (OtClass_ARGS)
  Python: [constructor,static] MqFactoryC MqFactoryC.Add(constructor:class, ?ident:string="MK_NULL"?) C-API
Add a new MqFactoryC identified by factory-identifier and defined by factory-constructor
 
static OT_ProcRet pymqmsgque_MqFactoryC_new (CONSTR_ARGS)
  Python: [constructor,static] MqFactoryC MqFactoryC.new(constructor:class, ?ident:string="MK_NULL"?) C-API
Add a new MqFactoryC identified by factory-identifier and defined by factory-constructor
 
static PyObject * pymqmsgque_sMqFactoryC_Str (MqFactoryC_Obj *self)
 
int pymqmsgque_pMqFactoryC_Setup (MK_RT mkrt, MQ_RT mqrt, OT_OBJ_T m)
 
int pymqmsgque_pMqFactoryC_Init (MK_RT mkrt, OT_OBJ_T m)
 

Variables

static PyMethodDef pymqmsgque_MqFactoryC_Methods []
 
OT_CLASS_TYPE_REF pymqmsgque_MqFactoryCR
 

Detailed Description

tag: nhi1-release-250425

Definition in file MqFactoryC_py.c.

Macro Definition Documentation

◆ Add_doc

#define Add_doc   "MqFactoryC MqFactoryC.Add(constructor:class, ?ident:string=\"MK_NULL\"?)"

doc definition

Definition at line 128 of file MqFactoryC_py.c.

◆ ClassInit

#define ClassInit
Value:
/* if not already done, initialize NEW META type */ \
\
/* protect against double call */ \
if (MqFactoryCTT->selfCreate == NS(MqFactoryC_selfCreate)) return MK_OK; \
\
/* add "selfCreate" and "selfDelete" feature to the META-Class */ \
MqFactoryCTT->selfCreate = NS(MqFactoryC_selfCreate); \
MqFactoryCTT->selfDelete = NS(MqFactoryC_selfDelete); \
MqFactoryCTT->selfUnlink = NS(MqFactoryC_selfUnlink); \
\
if (!PyType_HasFeature(OT_CLASS,Py_TPFLAGS_READY)) { \
NS(MqFactoryCR).tp_base = MqFactoryC_base; \
OtErrorCheckLng (PyType_Ready(OT_CLASS)); \
} \
OtErrorCheckLng(PyModule_AddObjectRef(m, "MqFactoryC", (PyObject *)OT_CLASS)); \
\
/* define the "NULL" object */ \
MqFactoryC_MK_NULL = Py_NewRef(MK(AtomCreate) (MK_RT_CALL OT_CLASS, NULL /*obj*/));
#define MK(n)
#define NS(n)
#define MqFactoryC_base
#define MqFactoryC_MK_NULL
#define OT_CLASS
#define MqFactoryCTT
MK_OK
#define MK_RT_CALL
#define MqFactorySTT
instance-type as MkTypeS-class-type (cast from MqFactoryST into MkTypeS) …
data used to define a factory

Definition at line 65 of file MqFactoryC_py.c.

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*/));

◆ Default_doc

#define Default_doc   "MqFactoryC fct.Default()"

Definition at line 148 of file MqFactoryC_py.c.

◆ DefaultIdent_doc

#define DefaultIdent_doc   "string MqFactoryC.DefaultIdent()"

Definition at line 140 of file MqFactoryC_py.c.

◆ Dup2_doc

#define Dup2_doc   "MqFactoryC fct.Dup2(ident:string) (const)"

Definition at line 145 of file MqFactoryC_py.c.

◆ Get_doc

#define Get_doc   "MqFactoryC MqFactoryC.Get(?ident:string=\"\"?)"

Definition at line 132 of file MqFactoryC_py.c.

◆ GetCalled_doc

#define GetCalled_doc   "MqFactoryC MqFactoryC.GetCalled(?ident:string=\"\"?)"

Definition at line 133 of file MqFactoryC_py.c.

◆ GetCalledL_doc

#define GetCalledL_doc   "MqFactoryC MqFactoryC.GetCalledL(largs:MkBufferListC)"

Definition at line 134 of file MqFactoryC_py.c.

◆ GetNull_doc

#define GetNull_doc   "MqFactoryC MqFactoryC.GetNull()"

Definition at line 135 of file MqFactoryC_py.c.

◆ GetOriginalIdent_doc

#define GetOriginalIdent_doc   "string fct.GetOriginalIdent() (const)"

Definition at line 157 of file MqFactoryC_py.c.

◆ HandleResolve_doc

#define HandleResolve_doc   "MqFactoryC MqFactoryC.HandleResolve(netHdl:MK_HDL)"

Definition at line 136 of file MqFactoryC_py.c.

◆ Initial_doc

#define Initial_doc   "MqFactoryC fct.Initial()"

Definition at line 149 of file MqFactoryC_py.c.

◆ InitialIdent_doc

#define InitialIdent_doc   "string MqFactoryC.InitialIdent()"

Definition at line 141 of file MqFactoryC_py.c.

◆ Instances_doc

#define Instances_doc   "MqFactoryC MqFactoryC.Instances()"

Definition at line 137 of file MqFactoryC_py.c.

◆ LogAll_doc

#define LogAll_doc   "MqFactoryC.LogAll(?callfunc:string=\"MK_NULL\"?)"

Definition at line 142 of file MqFactoryC_py.c.

◆ META_FILE_NAME

#define META_FILE_NAME   "MqFactoryC_py.c"

Definition at line 11 of file MqFactoryC_py.c.

◆ MqFactoryCTT

#define MqFactoryCTT   MQ(MqMsgqueThreadState).MqFactoryCTT

Definition at line 40 of file MqFactoryC_py.c.

◆ New_doc

#define New_doc   "MqContextC fct.New()"

Definition at line 154 of file MqFactoryC_py.c.

◆ new_doc

#define new_doc   "MqFactoryC MqFactoryC.new(constructor:class, ?ident:string=\"MK_NULL\"?)"

Definition at line 129 of file MqFactoryC_py.c.

◆ Next_doc

#define Next_doc   "MqFactoryC fct.Next()"

Definition at line 150 of file MqFactoryC_py.c.

◆ OT_CLASS

#define OT_CLASS   (&NS(MqFactoryCR))

Definition at line 16 of file MqFactoryC_py.c.

◆ OT_CLASS_NAME

#define OT_CLASS_NAME   "MqFactoryC"

Definition at line 17 of file MqFactoryC_py.c.

◆ OT_LNG2META

#define OT_LNG2META ( O)
Value:
#define VAL2MNG(val)
static MQ_FCT MqFct(MK_MNG mng)
cast a unknown-object into an MqFactoryS pointer or NULL if not possible

Definition at line 19 of file MqFactoryC_py.c.

◆ OT_retObj_CONSTR

#define OT_retObj_CONSTR ( mng)
Value:
OT_retObj_SET(NS(MqFactoryC_CTOR)(MK_RT_CALL (PyTypeObject*)class,mng))
#define OT_retObj_SET(val)

Definition at line 21 of file MqFactoryC_py.c.

◆ OT_SETUP_hdl

#define OT_SETUP_hdl   OT_SETUP_hdl_tmpl(MqFactoryC)

Definition at line 23 of file MqFactoryC_py.c.

◆ OT_SETUP_hdl__null_allow

#define OT_SETUP_hdl__null_allow   OT_SETUP_hdl_tmpl__null_allow(MqFactoryC)

Definition at line 24 of file MqFactoryC_py.c.

◆ OT_SETUP_hdl_constr

#define OT_SETUP_hdl_constr
Value:
#define AllRtSetup_NULL
#define MK_RT_UNUSED
struct MqFactoryS * MQ_FCT
class-shortcut for struct MqFactoryS *, all shortcut using the XX_YYY syntax (only for public API) …

Definition at line 25 of file MqFactoryC_py.c.

25#define OT_SETUP_hdl_constr MK_RT_UNUSED AllRtSetup_NULL; \
26 MQ_FCT hdl = (MQ_FCT) OT_CLASS;

◆ OT_SETUP_hdl_destr

#define OT_SETUP_hdl_destr   OT_SETUP_hdl_tmpl__null_allow(MqFactoryC)

Definition at line 27 of file MqFactoryC_py.c.

◆ OT_SETUP_hdl_static

#define OT_SETUP_hdl_static
Value:
__attribute__((unused)) MK_TYP hdl = MqFactoryC##_TT;

Definition at line 28 of file MqFactoryC_py.c.

28#define OT_SETUP_hdl_static MK_RT_UNUSED AllRtSetup_NULL; \
29 __attribute__((unused)) MK_TYP hdl = MqFactoryC##_TT;

◆ OT_SETUP_hdl_static_constr

#define OT_SETUP_hdl_static_constr   OT_SETUP_hdl_static

Definition at line 31 of file MqFactoryC_py.c.

◆ Prev_doc

#define Prev_doc   "MqFactoryC fct.Prev()"

Definition at line 151 of file MqFactoryC_py.c.

◆ SetupRtFromObj_X

#define SetupRtFromObj_X ( hdl)
Value:
#define AllRtSetup_X(x)

Definition at line 34 of file MqFactoryC_py.c.

◆ SetupRtFromObj_XN

#define SetupRtFromObj_XN ( hdl)
Value:
#define AllRtSetup_XN(x)

Definition at line 35 of file MqFactoryC_py.c.

Function Documentation

◆ pymqmsgque_MqFactoryC_CTOR()

static OT_OBJ_T pymqmsgque_MqFactoryC_CTOR ( MK_RT mkrt,
OT_CLS_T type,
MQ_FCT hdl )
inlinestatic

Definition at line 44 of file MqFactoryC_py.c.

44 {
45 return MK(AtomCreate)(MK_RT_CALL type,MqFactoryC_X2obj(hdl));
46}
#define MqFactoryC_X2obj(x)

◆ pymqmsgque_MqFactoryC_selfCreate()

static MK_PTR pymqmsgque_MqFactoryC_selfCreate ( MK_RT mkrt,
MK_OBJ const obj,
MK_PTR const env )
static

Definition at line 51 of file MqFactoryC_py.c.

51 {
52 return MK(AtomCreate) (MK_RT_CALL OT_CLASS,obj);
53}
MK_OBJ const obj
Definition high_lng.h:136

◆ pymqmsgque_MqFactoryC_selfDelete()

static void pymqmsgque_MqFactoryC_selfDelete ( MK_RT mkrt,
MK_PTR self,
MK_PTR const env )
static

Definition at line 55 of file MqFactoryC_py.c.

55 {
56 MK(AtomDeleteHard) (MK_RT_CALL OT_SELF);
57}
#define OT_SELF

◆ pymqmsgque_MqFactoryC_selfUnlink()

static void pymqmsgque_MqFactoryC_selfUnlink ( MK_RT mkrt,
MK_PTR self,
MK_PTR const env )
static

Definition at line 59 of file MqFactoryC_py.c.

59 {
60 MkObjectC_Obj *selfO = (MkObjectC_Obj*) self;
61 selfO->hdl = NULL;
62}
PyObject_HEAD MK_OBJ hdl

◆ pymqmsgque_pMqFactoryC_Init()

int pymqmsgque_pMqFactoryC_Init ( MK_RT mkrt,
OT_OBJ_T m )

Definition at line 837 of file MqFactoryC_py.c.

838{
841
842 // MqFactoryCTT->noSelf = true;
843
844 return 0;
845error:
846 return -1;
847}
#define ClassInit
#define error
Definition high_lng.h:339
#define MQ_STATIC_RT

◆ pymqmsgque_pMqFactoryC_Setup()

int pymqmsgque_pMqFactoryC_Setup ( MK_RT mkrt,
MQ_RT mqrt,
OT_OBJ_T m )

Public API

Definition at line 798 of file MqFactoryC_py.c.

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}
#define MK_ERROR_FORMAT
MK_PTRB * MK_PTR
#define MqFactoryInitial(...)
#define MqFactoryDefaultIdent()
#define MqFactoryDefault(...)
#define MqFactoryAdd(...)
PUBLIC data structure for the pymqmsgque-specific-data

◆ pymqmsgque_sFactoryCTor()

static enum MkErrorE pymqmsgque_sFactoryCTor ( MQ_CALLBACK_FACTORY_CTOR_ARGS )
static

Helper definition

Definition at line 170 of file MqFactoryC_py.c.

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}
#define OT_ERROR_LNG_2_META(m)
#define check_NULL(E)
#define VAL2CTX(val)
#define mqctx
#define MkErrorGetCode_0E()
#define MkErrorStack_0E()
#define MkErrorSetC_3_NULL(...)
#define MkErrorSetC_1E(message)
#define MkErrorSetV_1E(printfmt,...)
#define MK_ERROR_DEFAULT
MkErrorE
const MK_STRB * MK_STRN
#define MkOBJ(x)
#define MkOBJ_R(x)
struct MkThreadDataS MkThreadDataS
#define MK_RT_REF
#define MqSetupDup(...)
@ 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))
MK_BUF * data
union MkBufferU first
struct MkBufferS::@5 storage
MK_STRN C

◆ pymqmsgque_sFactoryDataCopy()

static void pymqmsgque_sFactoryDataCopy ( MK_RT mkrt,
MK_PTR * dataP )
static

Definition at line 353 of file MqFactoryC_py.c.

356 {
357 PyObject *arg = *dataP;
358 Py_INCREF(arg); // THREAD → no DEEP copy
359}

◆ pymqmsgque_sFactoryDataFree()

static void pymqmsgque_sFactoryDataFree ( MK_RT mkrt,
MK_PTR * dataP )
static

Definition at line 344 of file MqFactoryC_py.c.

347 {
348 if (_Py_IsFinalizing()) return;
349 Py_CLEAR(*dataP);
350}

◆ pymqmsgque_sFactoryDTor()

static void pymqmsgque_sFactoryDTor ( MK_RT mkrt,
MQ_CTX context,
bool doFactoryDelete,
MQ_FCT const data )
static

Definition at line 326 of file MqFactoryC_py.c.

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}
#define OT_SELF_X(x)
PyObject * OT_OBJ_T
#define MqContextDelete(x)
struct MqSetupS setup
the setup data is used to link the object with the user application
enum MqFactoryE factoryCall
an object is created by an factory but using a different call-style

◆ pymqmsgque_sMqFactoryC_Str()

static PyObject * pymqmsgque_sMqFactoryC_Str ( MqFactoryC_Obj * self)
static

Definition at line 785 of file MqFactoryC_py.c.

785 {
786 MkRtSetup_X(self->hdl);
787 return STRN2VAL(MkSysPrintF("MqFactoryC[%s]", self->hdl ? self->hdl->originalIdent : NULL));
788}
#define STRN2VAL(nat)
#define MkSysPrintF(...)
#define MkRtSetup_X(x)
PyObject_HEAD MQ_FCT hdl
MK_STRB originalIdent[MqFactoryS_originalIdent_size+1]
the original factory name used at MqFactoryAdd 2'n parameter

Variable Documentation

◆ pymqmsgque_MqFactoryC_Methods

PyMethodDef pymqmsgque_MqFactoryC_Methods[]
static

Object definition

Definition at line 740 of file MqFactoryC_py.c.

740 {
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};
#define Instances_doc
#define Initial_doc
#define GetOriginalIdent_doc
#define New_doc
#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 GetCalled_doc
#define Dup2_doc
#define Add_doc
#define Default_doc

◆ pymqmsgque_MqFactoryCR

OT_CLASS_TYPE_REF pymqmsgque_MqFactoryCR
Initial value:
= {
PyVarObject_HEAD_INIT(NULL, 0)
.tp_name = "pymqmsgque.MqFactoryC",
.tp_doc = "PyMqMsgque MqFactoryC Type",
.tp_itemsize = sizeof(MqFactoryC_Obj),
.tp_itemsize = 0,
.tp_new = (newfunc) pymqmsgque_MqFactoryC_new ,
.tp_flags = Py_TPFLAGS_DEFAULT,
.tp_base = NULL,
.tp_str = (reprfunc) pymqmsgque_sMqFactoryC_Str
}
struct MqFactoryC_Obj MqFactoryC_Obj
static PyObject * pymqmsgque_sMqFactoryC_Str(MqFactoryC_Obj *self)
static PyMethodDef pymqmsgque_MqFactoryC_Methods[]
static OT_ProcRet pymqmsgque_MqFactoryC_new(CONSTR_ARGS)
Python: [constructor,static] MqFactoryC MqFactoryC.new(constructor:class, ?ident:string="MK_NULL"?...

Definition at line 823 of file MqFactoryC_py.c.

823 {
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};