From 1e43c8d167e8dc0822fa99403794b83776830bf1 Mon Sep 17 00:00:00 2001 From: Ansgar Burchardt <Ansgar.Burchardt@tu-dresden.de> Date: Thu, 19 Apr 2018 14:00:00 +0200 Subject: [PATCH] DDD: cmdmsg.cc: add state to context object --- dune/uggrid/parallel/ddd/dddcontext.hh | 17 +++++++++ parallel/ddd/xfer/cmdmsg.cc | 53 ++++++++++++-------------- 2 files changed, 41 insertions(+), 29 deletions(-) diff --git a/dune/uggrid/parallel/ddd/dddcontext.hh b/dune/uggrid/parallel/ddd/dddcontext.hh index 63381e413..53edda2c6 100644 --- a/dune/uggrid/parallel/ddd/dddcontext.hh +++ b/dune/uggrid/parallel/ddd/dddcontext.hh @@ -114,6 +114,16 @@ struct PrioContext } /* namespace Prio */ +namespace Xfer { + +struct CmdmsgContext +{ + Basic::LC_MSGTYPE cmdmsg_t; + Basic::LC_MSGCOMP undelete_id; +}; + +} /* namespace Xfer */ + struct CouplingContext { std::vector<COUPLING*> cplTable; @@ -217,6 +227,12 @@ public: const Prio::PrioContext& prioContext() const { return prioContext_; } + Xfer::CmdmsgContext& cmdmsgContext() + { return cmdmsgContext_; } + + const Xfer::CmdmsgContext& cmdmsgContext() const + { return cmdmsgContext_; } + CouplingContext& couplingContext() { return couplingContext_; } @@ -262,6 +278,7 @@ protected: Mgr::TypemgrContext typemgrContext_; Prio::PrioContext prioContext_; CouplingContext couplingContext_; + Xfer::CmdmsgContext cmdmsgContext_; std::vector<DDD_HDR> objTable_; int nObjs_; diff --git a/parallel/ddd/xfer/cmdmsg.cc b/parallel/ddd/xfer/cmdmsg.cc index ccee5efd6..c6133f6eb 100644 --- a/parallel/ddd/xfer/cmdmsg.cc +++ b/parallel/ddd/xfer/cmdmsg.cc @@ -80,21 +80,6 @@ struct CMDMSG }; -/****************************************************************************/ -/* */ -/* variables global to this source file only (static) */ -/* */ -/****************************************************************************/ - - - - - -static LC_MSGTYPE cmdmsg_t; -static LC_MSGCOMP undelete_id; - - - /****************************************************************************/ /* */ /* routines */ @@ -104,8 +89,10 @@ static LC_MSGCOMP undelete_id; void CmdMsgInit(DDD::DDDContext& context) { - cmdmsg_t = LC_NewMsgType(context, "CmdMsg"); - undelete_id = LC_NewMsgTable("UndelTab", cmdmsg_t, sizeof(DDD_GID)); + auto& ctx = context.cmdmsgContext(); + + ctx.cmdmsg_t = LC_NewMsgType(context, "CmdMsg"); + ctx.undelete_id = LC_NewMsgTable("UndelTab", ctx.cmdmsg_t, sizeof(DDD_GID)); } @@ -136,6 +123,8 @@ static CMDMSG *CreateCmdMsg (DDD_PROC dest, CMDMSG *lastxm) static int PrepareCmdMsgs (DDD::DDDContext& context, XICopyObj **itemsCO, int nCO, CMDMSG **theMsgs) { + auto& ctx = context.cmdmsgContext(); + CMDMSG *xm=NULL; int j, iCO, markedCO, nMsgs=0; DDD_GID *gids; @@ -231,15 +220,15 @@ static int PrepareCmdMsgs (DDD::DDDContext& context, XICopyObj **itemsCO, int nC DDD_GID *array; /* create new send message */ - xm->msg_h = LC_NewSendMsg(context, cmdmsg_t, xm->proc); + xm->msg_h = LC_NewSendMsg(context, ctx.cmdmsg_t, xm->proc); /* init tables inside message */ - LC_SetTableSize(xm->msg_h, undelete_id, xm->nUnDelete); + LC_SetTableSize(xm->msg_h, ctx.undelete_id, xm->nUnDelete); /* prepare message for sending away */ LC_MsgPrepareSend(context, xm->msg_h); - array = (DDD_GID *)LC_GetPtr(xm->msg_h, undelete_id); + array = (DDD_GID *)LC_GetPtr(xm->msg_h, ctx.undelete_id); memcpy((char *)array, (char *)xm->aUnDelete, sizeof(DDD_GID)*xm->nUnDelete); @@ -272,13 +261,15 @@ static int CmdMsgUnpack (DDD::DDDContext& context, LC_MSGHANDLE *theMsgs, int nRecvMsgs, XIDelCmd **itemsDC, int nDC) { + auto& ctx = context.cmdmsgContext(); + int i, k, jDC, iDC, pos, nPruned; int lenGidTab = 0; for(i=0; i<nRecvMsgs; i++) { LC_MSGHANDLE xm = theMsgs[i]; - lenGidTab += (int)LC_GetTableLen(xm, undelete_id); + lenGidTab += (int)LC_GetTableLen(xm, ctx.undelete_id); } if (lenGidTab==0) @@ -289,12 +280,12 @@ static int CmdMsgUnpack (DDD::DDDContext& context, for(i=0, pos=0; i<nRecvMsgs; i++) { LC_MSGHANDLE xm = theMsgs[i]; - int len = LC_GetTableLen(xm, undelete_id); + int len = LC_GetTableLen(xm, ctx.undelete_id); if (len>0) { memcpy((char *) (unionGidTab.data()+pos), - (char *) LC_GetPtr(xm, undelete_id), + (char *) LC_GetPtr(xm, ctx.undelete_id), sizeof(DDD_GID) * len); pos += len; } @@ -388,22 +379,24 @@ static int CmdMsgUnpack (DDD::DDDContext& context, /****************************************************************************/ -static void CmdMsgDisplay (const char *comment, LC_MSGHANDLE xm) +static void CmdMsgDisplay(DDD::DDDContext& context, const char *comment, LC_MSGHANDLE xm) { + auto& ctx = context.cmdmsgContext(); + using std::setw; std::ostream& out = std::cout; DDD_GID *theGid; char buf[30]; int proc = LC_MsgGetProc(xm); - int lenGid = (int) LC_GetTableLen(xm, undelete_id); + int lenGid = (int) LC_GetTableLen(xm, ctx.undelete_id); std::ostringstream prefixStream; prefixStream << setw(3) << me << "-" << comment << setw(3) << proc << " "; const std::string& prefix = prefixStream.str(); /* get table addresses inside message */ - theGid = (DDD_GID *) LC_GetPtr(xm, undelete_id); + theGid = (DDD_GID *) LC_GetPtr(xm, ctx.undelete_id); out << prefix << " 04 Gid.size=" << setw(5) << lenGid << "\n"; @@ -434,6 +427,8 @@ int PruneXIDelCmd ( XIDelCmd **itemsDC, int nDC, std::vector<XICopyObj*>& arrayCO) { + auto& ctx = context.cmdmsgContext(); + CMDMSG *sendMsgs, *sm=0; LC_MSGHANDLE *recvMsgs; int nSendMsgs, nRecvMsgs; @@ -451,12 +446,12 @@ int PruneXIDelCmd ( { for(sm=sendMsgs; sm!=NULL; sm=sm->next) { - CmdMsgDisplay("PS", sm->msg_h); + CmdMsgDisplay(context, "PS", sm->msg_h); } } /* init communication topology */ - nRecvMsgs = LC_Connect(context, cmdmsg_t); + nRecvMsgs = LC_Connect(context, ctx.cmdmsg_t); /* build and send messages */ CmdMsgSend(context, sendMsgs); @@ -474,7 +469,7 @@ int PruneXIDelCmd ( #if DebugCmdMsg>=2 if (DDD_GetOption(context, OPT_DEBUG_XFERMESGS)==OPT_ON) #endif - CmdMsgDisplay("PR", recvMsgs[i]); + CmdMsgDisplay(context, "PR", recvMsgs[i]); } */ -- GitLab