Пример #1
0
/*
**++
**  ROUTINE:	sp_show_subprocess
**
**  FUNCTIONAL DESCRIPTION:
**
**  	Uses $GETJPI to get info on the subprocess and
**  displays it à la CTRL/T.
**
**  RETURNS:	cond_value, longword (unsigned), write only, by value
**
**  PROTOTYPE:
**
**  	sp_show_subprocess(SPHANDLE ctx)
**
**  IMPLICIT INPUTS:	None.
**
**  IMPLICIT OUTPUTS:	None.
**
**  COMPLETION CODES:
**
**
**  SIDE EFFECTS:   	None.
**
**--
*/
unsigned int sp_show_subprocess (SPHANDLE ctx) {

    static $DESCRIPTOR(ctrstr, "<<!AD!AD !8%T !9AD CPU=!%T PF=!UL IO=!UL MEM=!UL>>");
    static int neg10000 = -10000;
    static int zero = 0;
    struct dsc$descriptor bufdsc;
    struct {
    	unsigned short len, code;
    	char *ptr;
    	unsigned int term;
    } fscnlst = {0, FSCN$_NAME, 0, 0};
    ITMLST jpilst[8];
    char nodename[33], buf[256];
    char prcnam[16], imgnam[256];
    unsigned short prcnamlen, imgnamlen, iosb[4], buflen;
    unsigned int cputim[2], xcputim;
    unsigned int pageflts, biocnt, diocnt, wssize;
    unsigned int status;

    if (!get_logical("SYS$NODE", nodename, sizeof(nodename))) nodename[0] = '\0';
    ITMLST_INIT(jpilst[0], JPI$_PRCNAM, sizeof(prcnam), prcnam, &prcnamlen);
    ITMLST_INIT(jpilst[1], JPI$_IMAGNAME, sizeof(imgnam), imgnam, &imgnamlen);
    ITMLST_INIT(jpilst[2], JPI$_CPUTIM, sizeof(xcputim), &xcputim, 0);
    ITMLST_INIT(jpilst[3], JPI$_PAGEFLTS, sizeof(pageflts), &pageflts, 0);
    ITMLST_INIT(jpilst[4], JPI$_DIOCNT, sizeof(diocnt), &diocnt, 0);
    ITMLST_INIT(jpilst[5], JPI$_BIOCNT, sizeof(biocnt), &biocnt, 0);
    ITMLST_INIT(jpilst[6], JPI$_WSSIZE, sizeof(wssize), &wssize, 0);
    ITMLST_INIT(jpilst[7], 0, 0, 0, 0);
    status = sys$getjpiw(0, &ctx->pid, 0, jpilst, iosb, 0, 0);
    if (OK(status)) status = iosb[0];
    if (!OK(status)) return SS$_NORMAL;

    while (imgnamlen > 0 && isspace(imgnam[imgnamlen-1])) imgnamlen--;
    if (imgnamlen > 0) {
    	INIT_SDESC(bufdsc, imgnamlen, imgnam);
    	status = sys$filescan(&bufdsc, &fscnlst, 0);
    	if (!OK(status)) {
    	    fscnlst.ptr = imgnam;
    	    fscnlst.len = imgnamlen;
    	}
    } else {
    	strcpy(imgnam, "  (DCL)");
    	imgnamlen = 7;
    }
    lib$emul(&neg10000, &xcputim, &zero, cputim);
    INIT_SDESC(bufdsc, sizeof(buf), buf);
    status = sys$fao(&ctrstr, &buflen, &bufdsc, strlen(nodename), nodename,
    	prcnamlen, prcnam, 0, fscnlst.len, fscnlst.ptr,
    	cputim, pageflts, diocnt+biocnt, wssize);
    if (OK(status)) {
    	bufdsc.dsc$w_length  = buflen;
    	lib$put_output(&bufdsc);
    }

    return SS$_NORMAL;

} /* sp_show_subprocess */
Пример #2
0
int main()
{
	FAO fao("FAO.txt");
	
	try{
		std::cout << fao.Compute() << std::endl;
	}
	catch (std::exception & e){
		std::cout << e.what() << std::endl;
	}
	return 0;
}
Пример #3
0
void FactorAdditionOp::execute()
{
	if (_generalFactors.size() == 2) {
		if (_intendedStorageType == EVAL) {
			_generalTarget->setStorageType(EVAL);
			return;
		} else if (_intendedStorageType == SPARSE) {
			/* TODO: test this */
#if 0
			vector<int> vars = _generalTarget->getOrderedVars();
			drwnSparseFactor *fac1 = _A->getSparseFactor();
			drwnSparseFactor *fac2 = _B->getSparseFactor();
			drwnSparseFactor *target = _generalTarget->getSparseFactor();
			map<vector<int>, double> assignmtsA = fac1->getAssignments();
			map<vector<int>, double> assignmtsB = fac2->getAssignments();

			for (map< vector<int>, double >::iterator mi = assignmtsA.begin();
					mi != assignmtsA.end(); mi++) {
				vector<int> vals(vars.size());

				for (int i = 0; i < vars.size(); i++) {
					vals[_targetToA[i]] = (*mi).first[_targetToA[i]];
				}

				drwnPartialAssignment dpa;
				target->setValueOf(dpa, (*mi).second);
			}

			for (map< vector<int>, double >::iterator mi = assignmtsB.begin();
					mi != assignmtsA.end(); mi++) {
				vector<int> vals(vars.size());

				for (int i = 0; i < vars.size(); i++) {
					vals[_targetToB[i]] = (*mi).first[_targetToB[i]];
				}

				drwnPartialAssignment dpa;
				target->setValueOf(dpa, target->getValueOf(dpa) + (*mi).second);
			}
#endif

			return;
		}

		/* dealing with dense factors */
		drwnTableFactor *target = _generalTarget->getTableFactor();
		drwnFactorAdditionOp dfao(target, _generalFactors[0]->getTableFactor(),
				_generalFactors[1]->getTableFactor());
		dfao.execute();
		_generalTarget = new drwnGeneralFactor(*target, _generalTarget->THRESHOLD);
		return;
	}

	drwnGeneralFactor *prevSum = _generalFactors.front()->clone();

	for (int fi = 1; fi < _generalFactors.size(); fi++) {
		drwnTableFactor tf(_generalTarget->getUniverse());
		drwnGeneralFactor *partSum = (fi == (_generalFactors.size() - 1)) ?
				_generalTarget :
				new drwnGeneralFactor(tf, _generalTarget->THRESHOLD);

		FactorAdditionOp fao(partSum, prevSum, _generalFactors[fi]);
		fao.execute();
		prevSum = partSum;
	}
}