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; }
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()); }
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; }
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; }