void CGldEditorView::LoadObject(OBJECT *obj) { CListCtrl &list = GetListCtrl(); int nColumns = list.GetHeaderCtrl()?list.GetHeaderCtrl()->GetItemCount():0; for (int i=0; i<nColumns; i++) list.DeleteColumn(0); CRect wr; list.GetClientRect(&wr); int nCol=0; int nWid=0; #define W(X) (nWid+=X,X) int Name = list.InsertColumn(nCol++,"Name",LVCFMT_LEFT,W(150),nCol); int Type = list.InsertColumn(nCol++,"Type",LVCFMT_LEFT,W(100),nCol); int Class = list.InsertColumn(nCol++,"Class",LVCFMT_LEFT,W(150),nCol); int Access = list.InsertColumn(nCol++,"Access",LVCFMT_LEFT,W(100),nCol); int Data = list.InsertColumn(nCol++,"Data",LVCFMT_RIGHT,W(100),nCol); int Description = list.InsertColumn(nCol++,"Description",LVCFMT_LEFT,wr.Width()-nWid,nCol); #undef W int nItem; char buffer[1024]=""; CLASS *oclass; PROPERTY *prop; nItem = list.InsertItem(list.GetItemCount(),"clock"); list.SetItemText(nItem,Type,"TIMESTAMP"); list.SetItemText(nItem,Class,"OBJECTHDR"); list.SetItemText(nItem,Access,"PROTECTED"); list.SetItemText(nItem,Data,convert_from_timestamp(obj->clock,buffer,sizeof(buffer))?buffer:""); nItem = list.InsertItem(list.GetItemCount(),"name"); list.SetItemText(nItem,Type,"OBJECTNAME"); list.SetItemText(nItem,Class,"OBJECTHDR"); list.SetItemText(nItem,Access,"PUBLIC"); list.SetItemText(nItem,Data,object_name(obj)); nItem = list.InsertItem(list.GetItemCount(),"id"); list.SetItemText(nItem,Type,"OBJECTNUM"); list.SetItemText(nItem,Class,"OBJECTHDR"); list.SetItemText(nItem,Access,"REFERENCE"); sprintf(buffer,"%d",obj->id); list.SetItemText(nItem,Data,buffer); nItem = list.InsertItem(list.GetItemCount(),"class"); list.SetItemText(nItem,Type,"CLASSNAME"); list.SetItemText(nItem,Class,"OBJECTHDR"); list.SetItemText(nItem,Access,"REFERENCE"); list.SetItemText(nItem,Data,obj->oclass->name); nItem = list.InsertItem(list.GetItemCount(),"size"); list.SetItemText(nItem,Type,"OBJECTRANK"); list.SetItemText(nItem,Class,"OBJECTHDR"); list.SetItemText(nItem,Access,"REFERENCE"); sprintf(buffer,"%d",obj->oclass->size); list.SetItemText(nItem,Data,buffer); nItem = list.InsertItem(list.GetItemCount(),"parent"); list.SetItemText(nItem,Type,"OBJECTNAME"); list.SetItemText(nItem,Class,"OBJECTHDR"); list.SetItemText(nItem,Access,"PUBLIC"); list.SetItemText(nItem,Data,object_name(obj->parent)); nItem = list.InsertItem(list.GetItemCount(),"rank"); list.SetItemText(nItem,Type,"OBJECTRANK"); list.SetItemText(nItem,Class,"OBJECTHDR"); list.SetItemText(nItem,Access,"PUBLIC"); sprintf(buffer,"%d",obj->rank); list.SetItemText(nItem,Data,buffer); nItem = list.InsertItem(list.GetItemCount(),"in_svc"); list.SetItemText(nItem,Type,"TIMESTAMP"); list.SetItemText(nItem,Class,"OBJECTHDR"); list.SetItemText(nItem,Access,"PUBLIC"); list.SetItemText(nItem,Data,convert_from_timestamp(obj->in_svc,buffer,sizeof(buffer))?buffer:""); nItem = list.InsertItem(list.GetItemCount(),"out_svc"); list.SetItemText(nItem,Type,"TIMESTAMP"); list.SetItemText(nItem,Class,"OBJECTHDR"); list.SetItemText(nItem,Access,"PUBLIC"); list.SetItemText(nItem,Data,convert_from_timestamp(obj->out_svc,buffer,sizeof(buffer))?buffer:""); nItem = list.InsertItem(list.GetItemCount(),"latitude"); list.SetItemText(nItem,Type,"double"); list.SetItemText(nItem,Class,"OBJECTHDR"); list.SetItemText(nItem,Access,"PUBLIC"); list.SetItemText(nItem,Data,convert_from_latitude(obj->latitude,buffer,sizeof(buffer))?buffer:""); nItem = list.InsertItem(list.GetItemCount(),"longitude"); list.SetItemText(nItem,Type,"double"); list.SetItemText(nItem,Class,"OBJECTHDR"); list.SetItemText(nItem,Access,"PUBLIC"); list.SetItemText(nItem,Data,convert_from_latitude(obj->longitude,buffer,sizeof(buffer))?buffer:""); nItem = list.InsertItem(list.GetItemCount(),"flags"); list.SetItemText(nItem,Type,"set"); list.SetItemText(nItem,Class,"OBJECTHDR"); list.SetItemText(nItem,Access,"PROTECTED"); list.SetItemText(nItem,Data,convert_from_set(buffer,sizeof(buffer),&(obj->flags),object_flag_property())?buffer:""); for (oclass=obj->oclass; oclass!=NULL; oclass=oclass->parent) { list.InsertItem(list.GetItemCount(),""); for (prop=class_get_first_property(oclass); prop!=NULL; prop=class_get_next_property(prop)) { nItem = list.InsertItem(list.GetItemCount(),prop->name); list.SetItemText(nItem,Type,class_get_property_typename(prop->ptype)); list.SetItemText(nItem,Class,oclass->name); list.SetItemText(nItem,Access,convert_from_enumeration(buffer,sizeof(buffer),&(prop->access),object_access_property())?buffer:""); list.SetItemText(nItem,Data,object_get_value_by_name(obj,prop->name,buffer,sizeof(buffer))?buffer:"(error)"); list.SetItemText(nItem,Description,prop->description); } }; }
static mxArray *get_object_data(OBJECT *obj) { mxArray *plhs[1]; /* set the standard info */ #define ERROR "(error)" #define NONE "(none)" char *fnames[1024] = {"id","class","parent","rank","clock","latitude","longitude","in_svc","out_svc","flags",NULL}; // }; int nFields = 0; int nData = 0; char value[1024]; PROPERTY *prop; mxArray *pId = mxCreateString(convert_from_object(value,sizeof(value),&obj,NULL)?value:ERROR); mxArray *pClass = mxCreateString(obj->oclass->name); mxArray *pParent = mxCreateString(obj->parent!=NULL&&convert_from_object(value,sizeof(value),&(obj->parent),NULL)?value:NONE); mxArray *pRank = mxCreateNumericMatrix(1,1,mxUINT32_CLASS,mxREAL); mxArray *pClock = mxCreateString(convert_from_timestamp(obj->clock,value,sizeof(value))?value:ERROR); mxArray *pLatitude = mxCreateString(convert_from_latitude(obj->latitude,value,sizeof(value))?value:NONE); mxArray *pLongitude = mxCreateString(convert_from_longitude(obj->longitude,value,sizeof(value))?value:NONE); mxArray *pInSvc = mxCreateString(convert_from_timestamp(obj->in_svc,value,sizeof(value))?value:ERROR); mxArray *pOutSvc = mxCreateString(convert_from_timestamp(obj->out_svc,value,sizeof(value))?value:ERROR); mxArray *pFlags = mxCreateString(convert_from_set(value,sizeof(value),(void*)&obj->flags,object_flag_property())?value:ERROR); *(OBJECTRANK*)mxGetPr(pRank) = obj->rank; /* count the number of header items */ while (fnames[nFields]!=NULL) nFields++; /* count the number of object properties and assign the field names */ for (prop=class_get_first_property(obj->oclass); prop!=NULL; prop=class_get_next_property(prop)) /** @todo don't damage the original fieldname when making it safe for Matlab */ fnames[nFields+nData++] = make_fieldname(prop->name); /* construct the return value */ plhs[0] = mxCreateStructMatrix(1,1,nFields+nData,fnames); /* construct the header fields */ mxSetFieldByNumber(plhs[0],0,0,pId); mxSetFieldByNumber(plhs[0],0,1,pClass); mxSetFieldByNumber(plhs[0],0,2,pParent); mxSetFieldByNumber(plhs[0],0,3,pRank); mxSetFieldByNumber(plhs[0],0,4,pClock); mxSetFieldByNumber(plhs[0],0,5,pLatitude); mxSetFieldByNumber(plhs[0],0,6,pLongitude); mxSetFieldByNumber(plhs[0],0,7,pInSvc); mxSetFieldByNumber(plhs[0],0,8,pOutSvc); mxSetFieldByNumber(plhs[0],0,9,pFlags); /* construct the data fields */ for (prop=class_get_first_property(obj->oclass); prop!=NULL; nFields++,prop=class_get_next_property(prop)) { mxArray *pValue; if (prop->ptype==PT_double) { pValue = mxCreateDoubleMatrix(1,1,mxREAL); *(double*)mxGetPr(pValue) = *object_get_double(obj,prop); } else if (prop->ptype==PT_int32) { pValue = mxCreateDoubleMatrix(1,1,mxREAL); *(double*)mxGetPr(pValue) = (double)*object_get_int32(obj,prop); } else if (prop->ptype==PT_complex) { complex *pData = object_get_complex(obj,prop); pValue = mxCreateDoubleMatrix(1,1,mxCOMPLEX); *(double*)mxGetPr(pValue) = pData->r; *(double*)mxGetPi(pValue) = pData->i; } else { pValue = mxCreateString(object_get_value_by_name(obj,prop->name,value,sizeof(value))?value:ERROR); } mxSetFieldByNumber(plhs[0],0,nFields,pValue); } return plhs[0]; }
void CGldEditorView::LoadSolver(void) { CListCtrl &list = GetListCtrl(); int nColumns = list.GetHeaderCtrl()?list.GetHeaderCtrl()->GetItemCount():0; for (int i=0; i<nColumns; i++) list.DeleteColumn(0); CRect wr; list.GetClientRect(&wr); int nCol=0; int nWid=0; #define W(X) (nWid+=X,X) int Pass = list.InsertColumn(nCol++,"Pass",LVCFMT_LEFT,W(100),nCol); int Rank = list.InsertColumn(nCol++,"Rank",LVCFMT_LEFT,W(50),nCol); int Object = list.InsertColumn(nCol++,"Object",LVCFMT_LEFT,W(150),nCol); int ProcId = list.InsertColumn(nCol++,"ProcId",LVCFMT_LEFT,W(50),nCol); int Status = list.InsertColumn(nCol++,"Status",LVCFMT_LEFT,W(200),nCol); #undef W int nItem = list.InsertItem(list.GetItemCount(),""); struct { char *name; PASSCONFIG id; } passmap[] = { {"PRETOPDOWN",PC_PRETOPDOWN}, {"BOTTOMUP",PC_BOTTOMUP}, {"POSTTOPDOWN",PC_POSTTOPDOWN}, }; char buffer[1024]; for (int pass=0; pass<sizeof(passmap)/sizeof(passmap[0]); pass++) { #define PASSINIT(p) (p % 2 ? ranks[p]->first_used : ranks[p]->last_used) #define PASSCMP(i, p) (p % 2 ? i <= ranks[p]->last_used : i >= ranks[p]->first_used) #define PASSINC(p) (p % 2 ? 1 : -1) list.SetItemText(nItem,0,passmap[pass].name); INDEX **ranks = exec_getranks(); if (ranks!=NULL && ranks[pass]!=NULL) { int i; /* process object in order of rank using index */ for (i = PASSINIT(pass); PASSCMP(i, pass); i += PASSINC(pass)) { LISTITEM *item; /* skip empty lists */ if (ranks[pass]->ordinal[i] == NULL) continue; sprintf(buffer,"%d",i); list.SetItemText(nItem,Rank,buffer); for (item=ranks[pass]->ordinal[i]->first; item!=NULL; item=item->next) { OBJECT *obj = (OBJECT*)item->data; list.SetItemText(nItem,Object,obj->name); sprintf(buffer,"%d",obj->tp_affinity); list.SetItemText(nItem,ProcId,buffer); list.SetItemText(nItem,Status,convert_from_set(buffer,sizeof(buffer),&(obj->flags),object_flag_property())?buffer:"(na)"); nItem = list.InsertItem(list.GetItemCount(),""); } } } } list.DeleteItem(nItem); }
void cmex_object_list(int nlhs, mxArray *plhs[], /**< entlist */ int nrhs, const mxArray *prhs[] ) /**< () */ { OBJECT *obj; char criteria[1024]="(undefined)"; FINDPGM *search = NULL; char *fields[] = {"name","class","parent","flags","location","service","rank","clock","handle"}; FINDLIST *list = NULL; if (nrhs>0 && mxGetString(prhs[0],criteria,sizeof(criteria))!=0) output_error("gl('list',type='object'): unable to read search criteria (arg 2)"); else if (nrhs>0 && (search=find_mkpgm(criteria))==NULL) output_error("gl('list',type='object'): unable to run search '%s'",criteria); else if (search==NULL && (list=find_objects(NULL,NULL))==NULL) output_error("gl('list',type='object'): unable to obtain default list"); else if (list==NULL && (list=find_runpgm(NULL,search))==NULL) output_error("gl('list',type='object'): unable search failed"); else if ((plhs[0] = mxCreateStructMatrix(list->hit_count,1,sizeof(fields)/sizeof(fields[0]),fields))==NULL) output_error("gl('list',type='object'): unable to allocate memory for result list"); else { unsigned int n; for (n=0, obj=find_first(list); obj!=NULL; n++, obj=find_next(list,obj)) { char tmp[1024]; mxArray *data; double *pDouble; unsigned int *pInt; mxSetFieldByNumber(plhs[0], n, 0, mxCreateString(object_name(obj))); mxSetFieldByNumber(plhs[0], n, 1, mxCreateString(obj->oclass->name)); mxSetFieldByNumber(plhs[0], n, 2, mxCreateString(obj->parent?object_name(obj->parent):NONE)); mxSetFieldByNumber(plhs[0], n, 3, mxCreateString(convert_from_set(tmp,sizeof(tmp),&(obj->flags),object_flag_property())?tmp:ERROR)); pDouble = mxGetPr(data=mxCreateDoubleMatrix(1,2,mxREAL)); pDouble[0] = obj->longitude; pDouble[1] = obj->latitude; mxSetFieldByNumber(plhs[0], n, 4, data); pDouble = mxGetPr(data=mxCreateDoubleMatrix(1,2,mxREAL)); pDouble[0] = (double)obj->in_svc/TS_SECOND; pDouble[1] = (double)obj->out_svc/TS_SECOND; mxSetFieldByNumber(plhs[0], n, 5, data); pInt = (unsigned int*)mxGetPr(data=mxCreateNumericMatrix(1,1,mxINT32_CLASS,mxREAL)); pInt[0] = obj->rank; mxSetFieldByNumber(plhs[0], n, 6, data); pDouble = mxGetPr(data=mxCreateDoubleMatrix(1,1,mxREAL)); pDouble[0] = (double)obj->clock/TS_SECOND; mxSetFieldByNumber(plhs[0], n, 7, data); mxSetFieldByNumber(plhs[0], n, 8, make_handle(MH_OBJECT,obj)); } } }