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

tag: nhi1-release-250425 More...

#include "LibMqMsgque_private_tcl.h"
#include "valgrind/callgrind.h"
+ Include dependency graph for MqFactoryC_tcl.c:

Go to the source code of this file.

Macros

#define META_FILE_NAME   "MqFactoryC_tcl.c"
 
#define OT_CLASS   NS(MqFactoryC)
 
#define OT_CLASS_NAME   "MqFactoryC"
 
#define OBJECT2FCT(O)
 
#define OT_SETUP_hdl_static_constr_pre
 
#define OT_SETUP_hdl_static_constr
 
#define OT_SETUP_hdl_static
 
#define OT_SETUP_hdl   SetupHdlFromMetaData_2(FCT,MQ_FCT);
 
#define OT_SETUP_hdl__null_allow   SetupHdlFromMetaData__null_allow_2(FCT,MQ_FCT);
 
#define OT_SETUP_hdl_destr   SetupHdlFromMetaData__null_allow_2(FCT,MQ_FCT);
 
#define OT_SETUP_hdl_constr_pre
 
#define OT_SETUP_hdl_constr
 
#define SetupRtFromHdl_XN(hdl)
 
#define SetupRtFromHdl_X(hdl)
 
#define ClassInit
 
#define VER   TCL_OO_METHOD_VERSION_CURRENT
 
#define META_CONTEXT_S   mqctx
 
#define OT_SETUP_hdl_constr_pre
 
#define OT_SETUP_hdl_static_constr_pre   OT_SETUP_hdl_constr_pre
 
#define Add_doc   "MqFactoryC [MqFactoryC Add constructor:class ?ident:string=\"MK_NULL\"?]"
 
#define CTOR_doc   "MqFactoryC [MqFactoryC CTOR 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 MK_PTR tclmqmsgque_MqFactoryC_selfCreate (MK_RT mkrt, MK_OBJ const obj, MK_PTR const env)
 
static void tclmqmsgque_MqFactoryC_selfDelete (MK_RT mkrt, MK_PTR selfP, MK_PTR const env)
 
static void tclmqmsgque_MqFactoryC_selfUnlink (MK_RT mkrt, MK_PTR selfP, MK_PTR const env)
 
static void tclmqmsgque_sFactoryDataFree (MK_RT mkrt, MK_PTR *dataP)
 
static void tclmqmsgque_sFactoryDataCopy (MK_RT mkrt, MK_PTR *dataP)
 
static enum MkErrorE tclmqmsgque_sFactoryCTor (MQ_CALLBACK_FACTORY_CTOR_ARGS)
 
static OT_ProcRet tclmqmsgque_MqFactoryC_HandleResolve (OtClass_ARGS)
  Tcl: (static) MqFactoryC [MqFactoryC HandleResolve netHdl:MK_HDL] C-API
Handle-Resolve-Slot - return a MqFactoryC from netHdl or "MK_NULL" if invalid…
 
MK_DEPRECATED static MK_UNUSED OT_ProcRet tclmqmsgque_MqFactoryC_HandleGet (MqFactoryC_ARGS)
 
static OT_ProcRet tclmqmsgque_MqFactoryC_Next (MqFactoryC_ARGS)
  Tcl: MqFactoryC [$fct Next] C-API
get next instance from linked-list of MqFactoryS type
 
static OT_ProcRet tclmqmsgque_MqFactoryC_Prev (MqFactoryC_ARGS)
  Tcl: MqFactoryC [$fct Prev] C-API
get previous instance from linked-list of MqFactoryS type
 
static OT_ProcRet tclmqmsgque_MqFactoryC_Instances (OtClass_ARGS)
  Tcl: (static) MqFactoryC [MqFactoryC Instances] C-API
get head-instance from linked-list of MqFactoryS type …
 
static OT_ProcRet tclmqmsgque_MqFactoryC_GetNull (OtClass_ARGS)
  Tcl: (static) MqFactoryC [MqFactoryC GetNull] C-API
Null-Slot - return a MqFactoryC typed NULL instance …
 
static OT_ProcRet tclmqmsgque_MqFactoryC_Get (OtClass_ARGS)
  Tcl: (static) MqFactoryC [MqFactoryC Get ?ident:string=""?] C-API
return the MqFactoryC
 
static OT_ProcRet tclmqmsgque_MqFactoryC_GetCalled (OtClass_ARGS)
  Tcl: (static) MqFactoryC [MqFactoryC GetCalled ?ident:string=""?] C-API
returns the MqFactoryC identified by ident
 
static OT_ProcRet tclmqmsgque_MqFactoryC_GetCalledL (OtClass_ARGS)
  Tcl: (static) MqFactoryC [MqFactoryC GetCalledL largs:MkBufferListC] C-API
returns the MqFactoryC identified as first argument in the largs MkBufferListC
 
static OT_ProcRet tclmqmsgque_MqFactoryC_GetOriginalIdent (MqFactoryC_ARGS)
  Tcl: string [$fct GetOriginalIdent] C-API
helper function to return MqFactoryS::originalIdent
 
static OT_ProcRet tclmqmsgque_MqFactoryC_Default (MqFactoryC_ARGS)
  Tcl: MqFactoryC [$fct Default] C-API
set the default-attribute to the factory
 
static OT_ProcRet tclmqmsgque_MqFactoryC_Initial (MqFactoryC_ARGS)
  Tcl: MqFactoryC [$fct Initial] C-API
set the initial-attribut to fct
 
static OT_ProcRet tclmqmsgque_MqFactoryC_New (MqFactoryC_ARGS)
  Tcl: MqContextC [$fct New] C-API
create a new MqContextC from a MqFactoryC
 
MK_DEPRECATED static MK_UNUSED OT_ProcRet tclmqmsgque_MqFactoryC_Log (MqFactoryC_ARGS)
 
static OT_ProcRet tclmqmsgque_MqFactoryC_DefaultIdent (OtClass_ARGS)
  Tcl: (static) string [MqFactoryC DefaultIdent] C-API
return the factory-identifier of the default MqFactoryC
 
static OT_ProcRet tclmqmsgque_MqFactoryC_InitialIdent (OtClass_ARGS)
  Tcl: (static) string [MqFactoryC InitialIdent] C-API
return the factory-identifier of the initial MqFactoryC
 
static OT_ProcRet tclmqmsgque_MqFactoryC_LogAll (OtClass_ARGS)
  Tcl: (static) MqFactoryC LogAll ?callfunc:string="MK_NULL"? C-API
log all "factories" to stderr
 
static OT_ProcRet tclmqmsgque_MqFactoryC_Dup2 (MqFactoryC_ARGS)
  Tcl: (constructor) MqFactoryC [$fct Dup2 ident:string] C-API
create a duplicate of the singleton object MqFactoryC using a new factory-identifer
 
static OT_ProcRet tclmqmsgque_MqFactoryC_Add (OtClass_ARGS)
  Tcl: (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 tclmqmsgque_MqFactoryC_CTOR (CONSTR_ARGS)
  Tcl: (constructor,static) MqFactoryC [MqFactoryC CTOR constructor:class ?ident:string="MK_NULL"?] C-API
Add a new MqFactoryC identified by factory-identifier and defined by factory-constructor
 
int tclmqmsgque_MqFactoryC_Setup (MK_RT mkrt, OT_ENV_T interp)
 
int tclmqmsgque_pMqFactoryC_Init (MK_RT mkrt, OT_ENV_T interp, OT_NS_T ns)
 

Variables

__thread OT_CLS_T OT_CLASS = NULL
 
static __thread MK_TYP MqFactoryCTT = NULL
 
__thread OT_OBJ_T tclmqmsgque_MqFactoryC_MK_NULL = NULL
 
__thread bool tclmqmsgque_inMain
 
static char msg []
 
static Tcl_MethodType tclmqmsgque_sOtClassDef []
 
static Tcl_MethodType tclmqmsgque_sInstanceDef []
 

Detailed Description

tag: nhi1-release-250425

Definition in file MqFactoryC_tcl.c.

Macro Definition Documentation

◆ Add_doc

#define Add_doc   "MqFactoryC [MqFactoryC Add constructor:class ?ident:string=\"MK_NULL\"?]"

doc definition

Definition at line 169 of file MqFactoryC_tcl.c.

◆ ClassInit

#define ClassInit
Value:
/* if not already done, initialize NEW MQ type */ \
\
/* protect against double call */ \
if (MqFactoryCTT->selfCreate == NS(MqFactoryC_selfCreate)) return MK_OK; \
\
/* add "selfCreate" and "selfDelete" feature to the MQ-Class */ \
MqFactoryCTT->selfCreate = NS(MqFactoryC_selfCreate); \
MqFactoryCTT->selfDelete = NS(MqFactoryC_selfDelete); \
MqFactoryCTT->selfUnlink = NS(MqFactoryC_selfUnlink); \
\
/* create the TCL-class */ \
OT_SELF_T classO = MK(ClassDef)(interp,ns,MqFactoryCTT); \
check_NULL(classO) goto error; \
OT_CLASS = Tcl_GetObjectAsClass(classO); \
\
/* create the TCL static Methods */ \
static MkThreadLocal OtUnknownS NS(sClassUnknown) = {OT_UNKNOWN_CLASS}; \
check_LNG(MK(UnknownSetup) (interp,classO,NS(sOtClassDef),&NS(sClassUnknown))) goto error; \
\
/* create the TCL instance Methods */ \
static MkThreadLocal OtUnknownS NS(sInstanceUnknown) = {OT_UNKNOWN_INSTANCE}; \
check_LNG(MK(UnknownSetup) (interp,classO,NS(sInstanceDef),&NS(sInstanceUnknown))) goto error; \
\
/* define the "NULL" object */ \
MQ(MqFactoryC_MK_NULL) = Tcl_GetObjectName(interp, \
MK(AtomCreate) (MK_RT_CALL interp, NULL /*obj*/, OT_CLASS, "MK_NULL" /*name*/, "::tclmqmsgque::MqFactoryC" /*ns*/) \
); \
Tcl_IncrRefCount(MQ(MqFactoryC_MK_NULL));
#define MK(n)
@ OT_UNKNOWN_CLASS
@ OT_UNKNOWN_INSTANCE
Tcl_Object OT_SELF_T
#define MQ(n)
#define NS(n)
#define OT_CLASS
static __thread MK_TYP MqFactoryCTT
#define error
Definition high_lng.h:339
MK_OK
#define MkThreadLocal
#define MK_RT_CALL
#define MqFactorySTT
instance-type as MkTypeS-class-type (cast from MqFactoryST into MkTypeS) …
MkSelfUnlinkF selfUnlink
MkSelfDeleteF selfDelete
MkSelfCreateF selfCreate

Definition at line 79 of file MqFactoryC_tcl.c.

79#define ClassInit \
80 /* if not already done, initialize NEW MQ type */ \
81 if (MqFactoryCTT == NULL) MqFactoryCTT = MqFactorySTT; \
82 \
83 /* protect against double call */ \
84 if (MqFactoryCTT->selfCreate == NS(MqFactoryC_selfCreate)) return MK_OK; \
85 \
86 /* add "selfCreate" and "selfDelete" feature to the MQ-Class */ \
87 MqFactoryCTT->selfCreate = NS(MqFactoryC_selfCreate); \
88 MqFactoryCTT->selfDelete = NS(MqFactoryC_selfDelete); \
89 MqFactoryCTT->selfUnlink = NS(MqFactoryC_selfUnlink); \
90 \
91 /* create the TCL-class */ \
92 OT_SELF_T classO = MK(ClassDef)(interp,ns,MqFactoryCTT); \
93 check_NULL(classO) goto error; \
94 OT_CLASS = Tcl_GetObjectAsClass(classO); \
95 \
96 /* create the TCL static Methods */ \
97 static MkThreadLocal OtUnknownS NS(sClassUnknown) = {OT_UNKNOWN_CLASS}; \
98 check_LNG(MK(UnknownSetup) (interp,classO,NS(sOtClassDef),&NS(sClassUnknown))) goto error; \
99 \
100 /* create the TCL instance Methods */ \
101 static MkThreadLocal OtUnknownS NS(sInstanceUnknown) = {OT_UNKNOWN_INSTANCE}; \
102 check_LNG(MK(UnknownSetup) (interp,classO,NS(sInstanceDef),&NS(sInstanceUnknown))) goto error; \
103 \
104 /* define the "NULL" object */ \
105 MQ(MqFactoryC_MK_NULL) = Tcl_GetObjectName(interp, \
106 MK(AtomCreate) (MK_RT_CALL interp, NULL /*obj*/, OT_CLASS, "MK_NULL" /*name*/, "::tclmqmsgque::MqFactoryC" /*ns*/) \
107 ); \
108 Tcl_IncrRefCount(MQ(MqFactoryC_MK_NULL));

◆ CTOR_doc

#define CTOR_doc   "MqFactoryC [MqFactoryC CTOR constructor:class ?ident:string=\"MK_NULL\"?]"

Definition at line 170 of file MqFactoryC_tcl.c.

◆ Default_doc

#define Default_doc   "MqFactoryC [$fct Default]"

Definition at line 189 of file MqFactoryC_tcl.c.

◆ DefaultIdent_doc

#define DefaultIdent_doc   "string [MqFactoryC DefaultIdent]"

Definition at line 181 of file MqFactoryC_tcl.c.

◆ Dup2_doc

#define Dup2_doc   "MqFactoryC [$fct Dup2 ident:string] (const)"

Definition at line 186 of file MqFactoryC_tcl.c.

◆ Get_doc

#define Get_doc   "MqFactoryC [MqFactoryC Get ?ident:string=\"\"?]"

Definition at line 173 of file MqFactoryC_tcl.c.

◆ GetCalled_doc

#define GetCalled_doc   "MqFactoryC [MqFactoryC GetCalled ?ident:string=\"\"?]"

Definition at line 174 of file MqFactoryC_tcl.c.

◆ GetCalledL_doc

#define GetCalledL_doc   "MqFactoryC [MqFactoryC GetCalledL largs:MkBufferListC]"

Definition at line 175 of file MqFactoryC_tcl.c.

◆ GetNull_doc

#define GetNull_doc   "MqFactoryC [MqFactoryC GetNull]"

Definition at line 176 of file MqFactoryC_tcl.c.

◆ GetOriginalIdent_doc

#define GetOriginalIdent_doc   "string [$fct GetOriginalIdent] (const)"

Definition at line 198 of file MqFactoryC_tcl.c.

◆ HandleResolve_doc

#define HandleResolve_doc   "MqFactoryC [MqFactoryC HandleResolve netHdl:MK_HDL]"

Definition at line 177 of file MqFactoryC_tcl.c.

◆ Initial_doc

#define Initial_doc   "MqFactoryC [$fct Initial]"

Definition at line 190 of file MqFactoryC_tcl.c.

◆ InitialIdent_doc

#define InitialIdent_doc   "string [MqFactoryC InitialIdent]"

Definition at line 182 of file MqFactoryC_tcl.c.

◆ Instances_doc

#define Instances_doc   "MqFactoryC [MqFactoryC Instances]"

Definition at line 178 of file MqFactoryC_tcl.c.

◆ LogAll_doc

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

Definition at line 183 of file MqFactoryC_tcl.c.

◆ META_CONTEXT_S

#define META_CONTEXT_S   mqctx

Definition at line 115 of file MqFactoryC_tcl.c.

◆ META_FILE_NAME

#define META_FILE_NAME   "MqFactoryC_tcl.c"

Definition at line 13 of file MqFactoryC_tcl.c.

◆ New_doc

#define New_doc   "MqContextC [$fct New]"

Definition at line 195 of file MqFactoryC_tcl.c.

◆ Next_doc

#define Next_doc   "MqFactoryC [$fct Next]"

Definition at line 191 of file MqFactoryC_tcl.c.

◆ OBJECT2FCT

#define OBJECT2FCT ( O)
Value:
MkAssertCastM(MqFactoryC,(Tcl_ObjectGetMetadata(O, &MK(AtomMeta))))
#define MkAssertCastM(cls, m)

Definition at line 20 of file MqFactoryC_tcl.c.

◆ OT_CLASS

#define OT_CLASS   NS(MqFactoryC)

Definition at line 17 of file MqFactoryC_tcl.c.

◆ OT_CLASS_NAME

#define OT_CLASS_NAME   "MqFactoryC"

Definition at line 18 of file MqFactoryC_tcl.c.

◆ OT_SETUP_hdl

#define OT_SETUP_hdl   SetupHdlFromMetaData_2(FCT,MQ_FCT);

Definition at line 61 of file MqFactoryC_tcl.c.

◆ OT_SETUP_hdl__null_allow

#define OT_SETUP_hdl__null_allow   SetupHdlFromMetaData__null_allow_2(FCT,MQ_FCT);

Definition at line 62 of file MqFactoryC_tcl.c.

◆ OT_SETUP_hdl_constr

#define OT_SETUP_hdl_constr
Value:
int __skip=Tcl_ObjectContextSkippedArgs(objCtx); \
MK_RT_UNUSED OT_SELF_T selfO = Tcl_ObjectContextObject(objCtx); \
MQ_FCT hdl = (MQ_FCT) &MkERROR;
#define AllRtSetup_NULL
#define OT_SETUP_hdl_constr_pre
#define MkERROR
#define MK_RT_UNUSED
struct MqFactoryS * MQ_FCT
class-shortcut for struct MqFactoryS *, all shortcut using the XX_YYY syntax (only for public API) …
data used to define a factory

Definition at line 66 of file MqFactoryC_tcl.c.

66#define OT_SETUP_hdl_constr \
67 OT_SETUP_hdl_constr_pre; \
68 int __skip=Tcl_ObjectContextSkippedArgs(objCtx); \
69 AllRtSetup_NULL; \
70 MK_RT_UNUSED OT_SELF_T selfO = Tcl_ObjectContextObject(objCtx); \
71 MQ_FCT hdl = (MQ_FCT) &MkERROR;

◆ OT_SETUP_hdl_constr_pre [1/2]

#define OT_SETUP_hdl_constr_pre

Definition at line 65 of file MqFactoryC_tcl.c.

◆ OT_SETUP_hdl_constr_pre [2/2]

#define OT_SETUP_hdl_constr_pre
Value:
if (NS(inMain) == false) { \
Tcl_SetResult(interp,msg,TCL_STATIC); \
return TCL_ERROR; \
}
static char msg[]

Definition at line 65 of file MqFactoryC_tcl.c.

◆ OT_SETUP_hdl_destr

#define OT_SETUP_hdl_destr   SetupHdlFromMetaData__null_allow_2(FCT,MQ_FCT);

Definition at line 63 of file MqFactoryC_tcl.c.

◆ OT_SETUP_hdl_static

#define OT_SETUP_hdl_static
Value:
int __skip=Tcl_ObjectContextSkippedArgs(objCtx); \
__attribute__((unused)) OT_SELF_T selfO = Tcl_ObjectContextObject(objCtx); \
__attribute__((unused)) MK_TYP hdl = MqFactoryC##_TT;

Definition at line 55 of file MqFactoryC_tcl.c.

55#define OT_SETUP_hdl_static \
56 int __skip=Tcl_ObjectContextSkippedArgs(objCtx); \
57 AllRtSetup_NULL; \
58 __attribute__((unused)) OT_SELF_T selfO = Tcl_ObjectContextObject(objCtx); \
59 __attribute__((unused)) MK_TYP hdl = MqFactoryC##_TT;

◆ OT_SETUP_hdl_static_constr

#define OT_SETUP_hdl_static_constr
Value:
#define OT_SETUP_hdl_static_constr_pre
#define OT_SETUP_hdl_static

Definition at line 51 of file MqFactoryC_tcl.c.

51#define OT_SETUP_hdl_static_constr \
52 OT_SETUP_hdl_static_constr_pre; \
53 OT_SETUP_hdl_static

◆ OT_SETUP_hdl_static_constr_pre [1/2]

#define OT_SETUP_hdl_static_constr_pre

Definition at line 50 of file MqFactoryC_tcl.c.

◆ OT_SETUP_hdl_static_constr_pre [2/2]

#define OT_SETUP_hdl_static_constr_pre   OT_SETUP_hdl_constr_pre

Definition at line 50 of file MqFactoryC_tcl.c.

◆ Prev_doc

#define Prev_doc   "MqFactoryC [$fct Prev]"

Definition at line 192 of file MqFactoryC_tcl.c.

◆ SetupRtFromHdl_X

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

Definition at line 75 of file MqFactoryC_tcl.c.

◆ SetupRtFromHdl_XN

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

Definition at line 74 of file MqFactoryC_tcl.c.

◆ VER

#define VER   TCL_OO_METHOD_VERSION_CURRENT

Definition at line 110 of file MqFactoryC_tcl.c.

Function Documentation

◆ tclmqmsgque_MqFactoryC_selfCreate()

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

Definition at line 30 of file MqFactoryC_tcl.c.

30 {
31 OT_ENV_T interp = env;
32 return MK(AtomCreate) (MK_RT_CALL interp,obj,OT_CLASS,NULL,NULL);
33}
Tcl_Interp * OT_ENV_T
MK_OBJ const obj
Definition high_lng.h:136

◆ tclmqmsgque_MqFactoryC_selfDelete()

static void tclmqmsgque_MqFactoryC_selfDelete ( MK_RT mkrt,
MK_PTR selfP,
MK_PTR const env )
static

Definition at line 35 of file MqFactoryC_tcl.c.

35 {
36 OT_SELF_T selfO = selfP;
37 OT_ENV_T interp = env;
38 MK(AtomDeleteHard) (MK_RT_CALL interp, selfO);
39}

◆ tclmqmsgque_MqFactoryC_selfUnlink()

static void tclmqmsgque_MqFactoryC_selfUnlink ( MK_RT mkrt,
MK_PTR selfP,
MK_PTR const env )
static

Definition at line 41 of file MqFactoryC_tcl.c.

41 {
42 OT_SELF_T selfO = selfP;
43 OT_ENV_T interp = env;
44 MK(AtomUnlink) (MK_RT_CALL interp, selfO);
45}

◆ tclmqmsgque_MqFactoryC_Setup()

int tclmqmsgque_MqFactoryC_Setup ( MK_RT mkrt,
OT_ENV_T interp )

Public API

Definition at line 839 of file MqFactoryC_tcl.c.

840{
841 if (!strcmp(MqFactoryDefaultIdent(), "libmqmsgque")) {
842 if ( MqFactoryDefault(
845 NS(sFactoryCTor), NULL, NULL, NULL, NULL, NULL, NULL, NULL, "tclmqmsgque"
846 )
847 )
848 ) == NULL
849 )
850 {
851 Tcl_SetResult(interp,"MqFactoryS exception",TCL_STATIC);
852 return TCL_ERROR;
853 }
854 }
855 return TCL_OK;
856}
#define MK_ERROR_FORMAT
#define MqFactoryInitial(...)
#define MqFactoryDefaultIdent()
#define MqFactoryDefault(...)
#define MqFactoryAdd(...)

◆ tclmqmsgque_pMqFactoryC_Init()

int tclmqmsgque_pMqFactoryC_Init ( MK_RT mkrt,
OT_ENV_T interp,
OT_NS_T ns )

Definition at line 858 of file MqFactoryC_tcl.c.

859{
862
863 return TCL_OK;
864error:
865 return TCL_ERROR;
866}
#define ClassInit
#define MQ_STATIC_RT

◆ tclmqmsgque_sFactoryCTor()

static enum MkErrorE tclmqmsgque_sFactoryCTor ( MQ_CALLBACK_FACTORY_CTOR_ARGS )
static

Helper definition

Definition at line 250 of file MqFactoryC_tcl.c.

251{
252 OT_ENV_T interp = (OT_ENV_T) MK_RT_REF.mkThreadData.ptr;
253
254//printSTACK0()
255//MkObjLog(fct);
256
257 MQ_CTX mqctx = NULL;
258 OT_SELF_T retObject = NULL;
259 OT_CLS_T createC = NULL;
260 OT_OBJ_T tmplObj = tmpl ? META2VAL_X(tmpl) : NULL;
261
262//#define CALLGRIND_DEBUG
263
264 if (create == MQ_FACTORY_NEW_THREAD) {
265#ifdef CALLGRIND_DEBUG
266printTxt("start CALLGRIND_ZERO_STATS")
267printSTACK_0()
268CALLGRIND_ZERO_STATS;
269#endif
270 interp = Tcl_CreateInterp();
271 // tmpl→MK_ERROR_DEFAULT 25.11.2019 aotto
272 check_LNG(Tcl_Init(interp)) {
274 return MK_ERROR;
275 }
276 // mark new interpreter as "MQ_STARTUP_IS_THREAD"
277 Tcl_SetVar (interp, "MQ_STARTUP_IS_THREAD", "yes", TCL_GLOBAL_ONLY);
278 // source initial script
279 check_LNG(Tcl_EvalFile(interp, MqInitGetArg0()->data[1]->storage.first.C)) {
281 return MK_ERROR;
282 }
283 // set script
284 check_NULL(MK(InfoScript)(MK_RT_CALL interp, MqInitGetArg0()->data[1]->storage.first.C)) {
286 return MK_ERROR;
287 }
288#ifdef CALLGRIND_DEBUG
289CALLGRIND_DUMP_STATS_AT("tcl_thread_startup");
290printTxt("end CALLGRIND_ZERO_STATS")
291#endif
292 }
293
294 // reflection -> "child" use the same "OT_CLS_T" as tmpl=parent
296 OT_SELF_T clsO = MK(GetClassObjectFromObj)(MK_RT_CALL interp, tmplObj);
297 if (clsO) createC = Tcl_GetObjectAsClass(clsO);
298 } else {
299
300 // BUG FIX (13.Nov.2020) using a OT_OBJ_T as fct_ctor.data create mustic bugs with single
301 // "createO" return from Tcl_GetObjectFromObj on DIFFERENT threads… This bug only happen
302 // if NO debugging tool is invilved
303
304 if (fct->fct_ctor.data) {
305 OT_OBJ_T createObj = fct->fct_ctor.data;
306 OT_SELF_T createO = Tcl_GetObjectFromObj(interp, createObj);
307
308 if (createO == NULL) {
309 MkErrorSetC_1E(Tcl_GetStringResult(interp));
310 goto error;
311 }
312 createC = Tcl_GetObjectAsClass(createO);
313 } else {
314 createC = NS(MqContextC);
315 }
316//printV("interp=%p, tmplObj=%p, createO=%p, createC=%p\n", interp, tmplObj, createO, createC)
317 }
318
319 // security check of the OT_CLS_T pointer
320 if (createC == NULL) {
321 MkErrorSetC_1E("internal error: Factory as 'NULL' OT_CLS_T");
322 goto error;
323 }
324
325 // Call Factory -> Contructor
326 OT_OBJ_T lobjv[1];
327
328 // 2. add "self"
329 // MQ_FACTORY_NEW_THREAD get a NEW "interp" and "tmpl->obj.self" is only defined
330 // on the original interp -> no "tmpl" possible -> missing "MqConfigDup"
332 lobjv[0] = RG(nullObj);
333 } else {
334 lobjv[0] = tmplObj;
335 }
336
337 // 3. evaluate the script
338 retObject = Tcl_NewObjectInstance(interp, createC, NULL, NULL, 1, lobjv, 0);
339 check_NULL(retObject) {
341 goto error;
342 }
343
344 // 4. get context
345 mqctx = MqCtx(Tcl_ObjectGetMetadata(retObject, &MK(AtomMeta)));
346 if (mqctx == NULL) {
347 MkErrorSetC_1E("Factory return no MqContextC type");
348 goto error;
349 }
350
351//printLV("222 → <%p>\n", mqctx->setup.Event.data)
352
353 // 5. check for MQ error
355
356 // 6. do the missing "MqConfigDup" from "2"
357 // BUGFIX: without MQ_FACTORY_NEW_CHILD the OT_CONSTRUCTOR_POST prefix will NOT cleanup
359 MqConfigDup(mqctx, tmpl);
360 }
361
362 // 7. copy and initialize "setup" data
363 // "MQ_FACTORY_NEW_THREAD|MQ_FACTORY_NEW_FORK" is only used to support NON factory startup
365//MkObjLog(tmpl);
366 MqSetupDup(mqctx, tmpl);
367 }
368
369 // tcl-special: default event handler has !no! data and calling just the
370 // tcl-event-update function. CHILD does not need to call it too
371 if (create & MQ_FACTORY_NEW_CHILD && mqctx->setup.Event.data == NULL) {
372 mqctx->setup.Event.fCall = NULL;
373 }
374
375//printLV("333 → <%p>\n", mqctx->setup.Event.data)
376//printXV(mqctx,"333 → MqLinkGetTargetIdent = %s\n", MqLinkGetTargetIdent(mqctx))
377 *contextP = mqctx;
378 return MK_OK;
379
380error:
381 *contextP = NULL;
382 if (retObject) {
383 Tcl_DeleteCommandFromToken(interp, Tcl_GetObjectCommand(retObject));
384 }
385 return MkErrorStack_0E();
386}
#define check_NULL(code)
Tcl_Class OT_CLS_T
#define META2VAL_X(x)
#define check_LNG(code)
#define OT_ERROR_LNG_2_META(m)
#define RG(_key)
Tcl_Obj * OT_OBJ_T
#define mqctx
Definition MqCall_tcl.c:13
#define MkErrorGetCode_0E()
#define MkErrorStack_0E()
#define MkErrorSetC_1E(message)
#define MK_ERROR_DEFAULT
MK_ERROR
#define MK_RT_REF
static MQ_CTX MqCtx(MK_MNG mng)
cast a unknown-object into an MqContextS pointer or NULL if not possible
#define MqSetupDup(...)
#define MqConfigDup(...)
@ MQ_FACTORY_NEW_FILTER
create object as a filter
@ MQ_FACTORY_NEW_FORK
create object as a fork process
@ 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))
PUBLIC data structure for the tclmqmsgque-specific-data

◆ tclmqmsgque_sFactoryDataCopy()

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

Definition at line 154 of file MqFactoryC_tcl.c.

155{
156 assert (dataP != NULL && *dataP != NULL);
157 *dataP = OT_OBJ_COPY(*dataP);
158}
#define OT_OBJ_COPY(o)

◆ tclmqmsgque_sFactoryDataFree()

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

Definition at line 146 of file MqFactoryC_tcl.c.

147{
148 assert (dataP != NULL && *dataP != NULL);
150 if (Tcl_InterpDeleted(interp)) return;
151 OT_REF_DECR_AND_NULL(*dataP); // OT_REF_INCR in: CheckConstructor
152}
#define OT_REF_DECR_AND_NULL(_obj)
#define SETUP_interp

Variable Documentation

◆ MqFactoryCTT

__thread MK_TYP MqFactoryCTT = NULL
static

Definition at line 26 of file MqFactoryC_tcl.c.

◆ msg

char msg[]
static
Initial value:
= "ERROR: a 'MqFactoryC' command was called OUTSIDE"
" of the 'tclmqmsgque::Main'-proc.\n"
"\n"
"Description: a 'tclmqmsgque SERVER' listen on a port and start for every incoming connetion\n"
"a sub-server. If a thread sub-server was choosen... with the '--thread' commandline-option...\n"
"a new thread is created. To setup a new thread the INITIAL tcl-file is RE-READ again and\n"
"PROCS and VARIABLES are initialized. The NEW thread has it's own 'Main'-proc and so... the\n"
"original 'Main'-proc is skipped. If a 'factory' command is used OUTSIDE of the 'Main'-proc...\n"
"the initial 'Factory' will be created TWICE. The creation of multiple 'Factory' objects...\n"
"with the SAME name... is an ERROR."

Definition at line 125 of file MqFactoryC_tcl.c.

◆ OT_CLASS

__thread OT_CLS_T OT_CLASS = NULL

Definition at line 23 of file MqFactoryC_tcl.c.

◆ tclmqmsgque_inMain

__thread bool tclmqmsgque_inMain
extern

private

Definition at line 146 of file LibMqMsgque_tcl.c.

◆ tclmqmsgque_MqFactoryC_MK_NULL

__thread OT_OBJ_T tclmqmsgque_MqFactoryC_MK_NULL = NULL

Definition at line 27 of file MqFactoryC_tcl.c.

◆ tclmqmsgque_sInstanceDef

Tcl_MethodType tclmqmsgque_sInstanceDef[]
static
Initial value:
= {
{VER, "<constructor>" , tclmqmsgque_MqFactoryC_CTOR , NULL, NULL},
{VER, "Dup2" , tclmqmsgque_MqFactoryC_Dup2 , NULL, NULL},
{VER, "Default" , tclmqmsgque_MqFactoryC_Default , NULL, NULL},
{VER, "Initial" , tclmqmsgque_MqFactoryC_Initial , NULL, NULL},
{VER, "Next" , tclmqmsgque_MqFactoryC_Next , NULL, NULL},
{VER, "Prev" , tclmqmsgque_MqFactoryC_Prev , NULL, NULL},
{VER, "New" , tclmqmsgque_MqFactoryC_New , NULL, NULL},
{VER, "GetOriginalIdent" , tclmqmsgque_MqFactoryC_GetOriginalIdent , NULL, NULL},
{0, NULL, NULL, NULL, NULL}
}
#define VER
static OT_ProcRet tclmqmsgque_MqFactoryC_Prev(MqFactoryC_ARGS)
Tcl: MqFactoryC [$fct Prev] → C-API get previous instance from linked-list of MqFactoryS type
static OT_ProcRet tclmqmsgque_MqFactoryC_Next(MqFactoryC_ARGS)
Tcl: MqFactoryC [$fct Next] → C-API get next instance from linked-list of MqFactoryS type
static OT_ProcRet tclmqmsgque_MqFactoryC_GetOriginalIdent(MqFactoryC_ARGS)
Tcl: string [$fct GetOriginalIdent] → C-API helper function to return MqFactoryS::originalIdent
static OT_ProcRet tclmqmsgque_MqFactoryC_New(MqFactoryC_ARGS)
Tcl: MqContextC [$fct New] → C-API create a new MqContextC from a MqFactoryC …
static OT_ProcRet tclmqmsgque_MqFactoryC_Initial(MqFactoryC_ARGS)
Tcl: MqFactoryC [$fct Initial] → C-API set the initial-attribut to fct …
static OT_ProcRet tclmqmsgque_MqFactoryC_Default(MqFactoryC_ARGS)
Tcl: MqFactoryC [$fct Default] → C-API set the default-attribute to the factory …
static OT_ProcRet tclmqmsgque_MqFactoryC_CTOR(CONSTR_ARGS)
Tcl: (constructor,static) MqFactoryC [MqFactoryC CTOR constructor:class ?ident:string="MK_NULL"?...
static OT_ProcRet tclmqmsgque_MqFactoryC_Dup2(MqFactoryC_ARGS)
Tcl: (constructor) MqFactoryC [$fct Dup2 ident:string] → C-API create a duplicate of the singlet...

Definition at line 805 of file MqFactoryC_tcl.c.

805 {
806// BEGIN-OBJ - created by 'tcl_MqS.tcl -i NHI1_HOME/theLink/c/gen/c_mqmsgque.meta' - DO NOT change
807
808// doc-key: MqFactoryC,MqFactory,oC_
809 {VER, "<constructor>" , NS(MqFactoryC_CTOR) , NULL, NULL},
810
811// doc-key: MqFactoryC,MqFactory,oCx
812 {VER, "Dup2" , NS(MqFactoryC_Dup2) , NULL, NULL},
813
814// doc-key: MqFactoryC,MqFactory,oc_
815 {VER, "Default" , NS(MqFactoryC_Default) , NULL, NULL},
816 {VER, "Initial" , NS(MqFactoryC_Initial) , NULL, NULL},
817 {VER, "Next" , NS(MqFactoryC_Next) , NULL, NULL},
818 {VER, "Prev" , NS(MqFactoryC_Prev) , NULL, NULL},
819
820// doc-key: MqFactoryC,MqFactory,oco
821 {VER, "New" , NS(MqFactoryC_New) , NULL, NULL},
822
823// doc-key: MqFactoryC,MqFactory,om_
824 {VER, "GetOriginalIdent" , NS(MqFactoryC_GetOriginalIdent) , NULL, NULL},
825 // skip class-overload: MqFactoryHandleGet → HandleGet, NS(MqFactoryC_HandleGet)
826 // skip class-overload: MqFactoryLog → Log, NS(MqFactoryC_Log)
827
828// END-OBJ - created by 'tcl_MqS.tcl -i NHI1_HOME/theLink/c/gen/c_mqmsgque.meta' - DO NOT change
829 {0, NULL, NULL, NULL, NULL}
830};

◆ tclmqmsgque_sOtClassDef

Tcl_MethodType tclmqmsgque_sOtClassDef[]
static
Initial value:
= {
{VER, "Add" , tclmqmsgque_MqFactoryC_Add , NULL, NULL},
{VER, "Get" , tclmqmsgque_MqFactoryC_Get , NULL, NULL},
{VER, "GetCalled" , tclmqmsgque_MqFactoryC_GetCalled , NULL, NULL},
{VER, "GetCalledL" , tclmqmsgque_MqFactoryC_GetCalledL , NULL, NULL},
{VER, "GetNull" , tclmqmsgque_MqFactoryC_GetNull , NULL, NULL},
{VER, "HandleResolve" , tclmqmsgque_MqFactoryC_HandleResolve , NULL, NULL},
{VER, "Instances" , tclmqmsgque_MqFactoryC_Instances , NULL, NULL},
{VER, "DefaultIdent" , tclmqmsgque_MqFactoryC_DefaultIdent , NULL, NULL},
{VER, "InitialIdent" , tclmqmsgque_MqFactoryC_InitialIdent , NULL, NULL},
{VER, "LogAll" , tclmqmsgque_MqFactoryC_LogAll , NULL, NULL},
{0, NULL, NULL, NULL}
}
static OT_ProcRet tclmqmsgque_MqFactoryC_GetNull(OtClass_ARGS)
Tcl: (static) MqFactoryC [MqFactoryC GetNull] → C-API Null-Slot - return a MqFactoryC typed NULL...
static OT_ProcRet tclmqmsgque_MqFactoryC_HandleResolve(OtClass_ARGS)
Tcl: (static) MqFactoryC [MqFactoryC HandleResolve netHdl:MK_HDL] → C-API Handle-Resolve-Slot - ...
static OT_ProcRet tclmqmsgque_MqFactoryC_Instances(OtClass_ARGS)
Tcl: (static) MqFactoryC [MqFactoryC Instances] → C-API get head-instance from linked-list of Mq...
static OT_ProcRet tclmqmsgque_MqFactoryC_Get(OtClass_ARGS)
Tcl: (static) MqFactoryC [MqFactoryC Get ?ident:string=""?] → C-API return the MqFactoryC
static OT_ProcRet tclmqmsgque_MqFactoryC_GetCalled(OtClass_ARGS)
Tcl: (static) MqFactoryC [MqFactoryC GetCalled ?ident:string=""?] → C-API returns the MqFactoryC...
static OT_ProcRet tclmqmsgque_MqFactoryC_GetCalledL(OtClass_ARGS)
Tcl: (static) MqFactoryC [MqFactoryC GetCalledL largs:MkBufferListC] → C-API returns the MqFacto...
static OT_ProcRet tclmqmsgque_MqFactoryC_InitialIdent(OtClass_ARGS)
Tcl: (static) string [MqFactoryC InitialIdent] → C-API return the factory-identifier of the init...
static OT_ProcRet tclmqmsgque_MqFactoryC_LogAll(OtClass_ARGS)
Tcl: (static) MqFactoryC LogAll ?callfunc:string="MK_NULL"? → C-API log all "factories" to stder...
static OT_ProcRet tclmqmsgque_MqFactoryC_DefaultIdent(OtClass_ARGS)
Tcl: (static) string [MqFactoryC DefaultIdent] → C-API return the factory-identifier of the defa...
static OT_ProcRet tclmqmsgque_MqFactoryC_Add(OtClass_ARGS)
Tcl: (constructor,static) MqFactoryC [MqFactoryC Add constructor:class ?ident:string="MK_NULL"?...

Definition at line 780 of file MqFactoryC_tcl.c.

780 {
781// BEGIN-CLASS - created by 'tcl_MqS.tcl -i NHI1_HOME/theLink/c/gen/c_mqmsgque.meta' - DO NOT change
782
783// doc-key: MqFactoryC,MqFactory,sCc
784 {VER, "Add" , NS(MqFactoryC_Add) , NULL, NULL},
785
786// doc-key: MqFactoryC,MqFactory,sc_
787 {VER, "Get" , NS(MqFactoryC_Get) , NULL, NULL},
788 {VER, "GetCalled" , NS(MqFactoryC_GetCalled) , NULL, NULL},
789 {VER, "GetCalledL" , NS(MqFactoryC_GetCalledL) , NULL, NULL},
790 {VER, "GetNull" , NS(MqFactoryC_GetNull) , NULL, NULL},
791 {VER, "HandleResolve" , NS(MqFactoryC_HandleResolve) , NULL, NULL},
792 {VER, "Instances" , NS(MqFactoryC_Instances) , NULL, NULL},
793
794// doc-key: MqFactoryC,MqFactory,sm_
795 {VER, "DefaultIdent" , NS(MqFactoryC_DefaultIdent) , NULL, NULL},
796 {VER, "InitialIdent" , NS(MqFactoryC_InitialIdent) , NULL, NULL},
797 {VER, "LogAll" , NS(MqFactoryC_LogAll) , NULL, NULL},
798
799// END-CLASS - created by 'tcl_MqS.tcl -i NHI1_HOME/theLink/c/gen/c_mqmsgque.meta' - DO NOT change
800 {0, NULL, NULL, NULL}
801};