Esempio n. 1
0
bool distributor::CplxCplxDist(MVar *arg0, MVar *arg1, std::string &func) {
    numCplx z0,  z1;
    numReal nr0, nr1;
    Function func0, func1;

    if (func == "log") {
        if (arg0->getNumReal(&nr0) && arg1->getNumReal(&nr1)) {
            double d0 = nr0.get();
            double d1 = nr1.get();
            if (d0 > 0.0 && d1 >0.0) {
                d0= log(d1) / log(d0);
                nr0.set(d0); arg0->setNumReal(nr0);
                return true;
            } else {
                validC->setErr(ERRINFCTN,func);
            }
        }
        else if (arg0->getNumCplx(&z0) && arg1->getNumCplx(&z1)) {
            arg0->getNumCplx(&z0);
            arg1->getNumCplx(&z1);
            cplxC.log_func(&z0,&z1);
            arg0->setNumCplx(z0);
            return true;
        }
        else if (arg0->getFunction(&func0) && arg1->getFunction(&func1)) {
            Function f;
            bool valid = setFunc(f,func0,func1,func,2);
            if (valid) arg0->setFunction(f);
            return valid;
        } else {
            validC->setErr(NOTCPLX,func);
        }
    }
    return false;
}
Esempio n. 2
0
void
CirCut::genCutFunc()
{
   CirGate* gate;
   // set supports
   CirGate::incDfsFlag();
   for(unsigned i=0, n=size(); i<n; ++i){
      gate = cirMgr->getGateById(getLeaf(i));
      if(gate->getFecPhase())
         gate->setGateFunc(~bddMgr->getSupport(i+1));
      else
         gate->setGateFunc( bddMgr->getSupport(i+1));
   }
   // generate function
   gate = cirMgr->getGateById(getRoot());
   gate->genGateFunc();
   if(gate->getFecPhase())
      setFunc(~gate->getGateFunc());
   else
      setFunc( gate->getGateFunc());
}
Esempio n. 3
0
BOOL kernelSetFuncs (HMODULE module, FuncTable *funcTable, int funcCount)
{
	int returnValue = TRUE;
	int funcIndex = 0;

	do
	{
		returnValue = setFunc(module, funcTable[funcIndex].func, (char*)funcTable[funcIndex].name);
		funcIndex++;
	} 
	while ( (funcIndex < funcCount) && (TRUE == returnValue) );


	return returnValue;
}
Esempio n. 4
0
bool distributor::numFuncDist(MVar *arg, std::string &func) {
    numCplx nz;
    numReal nr;
    double  d;
    Function f;
    analCalc::fctns fctn = cplxC.findFunction(&func);

    if (fctn != charZeroCalc::NONE) {
        if (arg->getNumReal(&nr)) {
            d=nr.get();
            if (validC->isValid()) {
                if (!analC.analFctn(&d,fctn)) {
                    validC->setErr(ERRINFCTN,func);
                }
            }
            nr.set(d);
            arg->setNumReal(nr);
            return true;
        }
        else if (arg->getNumCplx(&nz)) {
            if (!cplxC.functions(&nz.val,fctn)) {
                validC->setErr(ERRINFCTN,func);
            }
            arg->setNumCplx(nz);
            return true;
        }
        else if (arg->getFunction(&f)) {
            setFunc(f,f,f,func,1);
            arg->setFunction(f);
            return true;
        }
        else {
            validC->setErr(NOTCPLX,func);
        }
    }
    else if (func == "polar") {
        if (arg->getNumCplx(&nz)) {
            if (*function) validC->setErr(CPLX,func);
             nz.val=cplxC.toPolar(nz.val);
             arg->setNumCplx(nz);
             return true;
        }
        else {
            validC->setErr(NOTCPLX,func);
        }
    }
    return false;
}