📄 oalefin.cpp
字号:
setConstraint(getDefaultRules(), oacValidRoutingLayers, v); } } if (viaDefArray.getNumElements()) { v = getConstraint(getDefaultRules(), oacValidRoutingVias); if (v && v->getType() == oacViaDefArrayValueType) { oaViaDefArray array; ((oaViaDefArrayValue*) v)->get(array); if (viaDefArray != array) { ((oaViaDefArrayValue*) v)->set(viaDefArray); } } else { v = oaViaDefArrayValue::create(tech(), viaDefArray); setConstraint(getDefaultRules(), oacValidRoutingVias, v); } }}// *****************************************************************************// LefIn::postProcessLayers()// // This function does various postProcessing operations on layers.// At the moment:// Remove any remaining minimumcut rules from metal layers.// *****************************************************************************voidLefIn::postProcessLayers(){ oaIter<oaLayer> layerIter(tech()->getLayers()); oaLayer *layer; while (layer = layerIter.getNext()) { if (layer->getType() != oacPhysicalLayerType) { continue; } oaPhysicalLayer *pLayer = (oaPhysicalLayer*) layer; if (pLayer->getMaterial() == oacMetalMaterial) { // Destroy any remaining NumCut rules on metal layers oaConstraintDef *def = oaLayerConstraintDef::get(oacMinNumCut); oaConstraint *c = oaLayerConstraint::find(getFoundryRules(), layer->getNumber(), (oaLayerConstraintDef*) def); if (c) { c->destroy(); } def = oaLayerConstraintDef::get(oacMinProtrusionNumCut); c = oaLayerConstraint::find(getFoundryRules(), layer->getNumber(), (oaLayerConstraintDef*) def); if (c) { c->destroy(); } } }}// *****************************************************************************// LefIn::close()// // This function saves and closes the technology database and the file.// *****************************************************************************voidLefIn::close(){ LefDefIn::close();}// *****************************************************************************// LefIn::getLefInGeomPin()// LefIn::getLefInGeomObs()// LefIn::getLefInLayer()// LefIn::getLefInMacro()// LefIn::getLefInPin()// LefIn::getLefInSite()// LefIn::getLefInVia()// LefIn::getLefInViaRule()//// These functions return the helper classes. If they do not exist, they are// created here.// *****************************************************************************LefInGeomPin*LefIn::getLefInGeomPin(){ if (!lefInGeomPin) { lefInGeomPin = new LefInGeomPin(*this); } return lefInGeomPin;}LefInGeomObs*LefIn::getLefInGeomObs(){ if (!lefInGeomObs) { lefInGeomObs = new LefInGeomObs(*this); } return lefInGeomObs;}LefInLayer*LefIn::getLefInLayer(){ if (!lefInLayer) { lefInLayer = new LefInLayer(*this); } return lefInLayer;}LefInMacro*LefIn::getLefInMacro(){ if (!lefInMacro) { lefInMacro = new LefInMacro(*this); } return lefInMacro;}LefInNDR*LefIn::getLefInNDR(){ if (!lefInNDR) { lefInNDR = new LefInNDR(*this); } return lefInNDR;}LefInPin*LefIn::getLefInPin(){ if (!lefInPin) { lefInPin = new LefInPin(*this); } return lefInPin;}LefInSite*LefIn::getLefInSite(){ if (!lefInSite) { lefInSite = new LefInSite(*this); } return lefInSite;}LefInVia*LefIn::getLefInVia(){ if (!lefInVia) { lefInVia = new LefInVia(*this); } return lefInVia;}LefInViaRule*LefIn::getLefInViaRule(){ if (!lefInViaRule) { lefInViaRule = new LefInViaRule(*this); } return lefInViaRule;}// *****************************************************************************// LefIn::<...>CB// // These static functions are required since the CAT parser only// accepts pointers to functions, and no pointers to member functions.// These functions call their virtual equivalent on the translator class.// *****************************************************************************intLefIn::cbVersion(lefrCallbackType_e cbType, double data, lefiUserData userData){ try { ((LefIn*) userData)->parseVersion(data); } catch (oaException &err) { ((LefIn*) userData)->error(cGeneric, (const char*) err.getMsg()); } return PARSE_OK;}intLefIn::cbCaseSensitive(lefrCallbackType_e cbType, int data, lefiUserData userData){ try { ((LefIn*) userData)->parseCaseSensitive(data); } catch (oaException &err) { ((LefIn*) userData)->error(cGeneric, (const char*) err.getMsg()); } return PARSE_OK;}intLefIn::cbWireExtension(lefrCallbackType_e cbType, const char *data, lefiUserData userData){ try { ((LefIn*) userData)->parseWireExtension(data); } catch (oaException &err) { ((LefIn*) userData)->error(cGeneric, (const char*) err.getMsg()); } return PARSE_OK;}intLefIn::cbBusBitChars(lefrCallbackType_e cbType, const char *data, lefiUserData userData){ try { ((LefIn*) userData)->parseBusBitChars(data); } catch (oaException &err) { ((LefIn*) userData)->error(cGeneric, (const char*) err.getMsg()); } return PARSE_OK;}intLefIn::cbDividerChar(lefrCallbackType_e cbType, const char *data, lefiUserData userData){ try { ((LefIn*) userData)->parseDividerChar(data); } catch (oaException &err) { ((LefIn*) userData)->error(cGeneric, (const char*) err.getMsg()); } return PARSE_OK;}intLefIn::cbUnits(lefrCallbackType_e cbType, lefiUnits *data, lefiUserData userData){ try { ((LefIn*) userData)->parseUnits(data); } catch (oaException &err) { ((LefIn*) userData)->error(cGeneric, (const char*) err.getMsg()); } return PARSE_OK;}intLefIn::cbManufacturingGrid(lefrCallbackType_e cbType, double data, lefiUserData userData){ try { ((LefIn*) userData)->parseManufacturingGrid(data); } catch (oaException &err) { ((LefIn*) userData)->error(cGeneric, (const char*) err.getMsg()); } return PARSE_OK;}intLefIn::cbUseMinSpacing(lefrCallbackType_e cbType, lefiUseMinSpacing *data, lefiUserData userData){ try { ((LefIn*) userData)->parseUseMinSpacing(data); } catch (oaException &err) { ((LefIn*) userData)->error(cGeneric, (const char*) err.getMsg()); } return PARSE_OK;}intLefIn::cbClearanceMeasure(lefrCallbackType_e cbType, const char *data, lefiUserData userData){ try { ((LefIn*) userData)->parseClearanceMeasure(data); } catch (oaException &err) { ((LefIn*) userData)->error(cGeneric, (const char*) err.getMsg()); } return PARSE_OK;}intLefIn::cbProp(lefrCallbackType_e cbType, lefiProp *data, lefiUserData userData){ try { ((LefIn*) userData)->parseProp(data); } catch (oaException &err) { ((LefIn*) userData)->error(cGeneric, (const char*) err.getMsg()); } return PARSE_OK;}intLefIn::cbAntennaInput(lefrCallbackType_e cbType, double data, lefiUserData userData){ try { ((LefIn*) userData)->parseAntennaInput(data); } catch (oaException &err) { ((LefIn*) userData)->error(cGeneric, (const char*) err.getMsg()); } return PARSE_OK;}intLefIn::cbAntennaOutput(lefrCallbackType_e cbType, double data, lefiUserData userData){ try { ((LefIn*) userData)->parseAntennaOutput(data); } catch (oaException &err) { ((LefIn*) userData)->error(cGeneric, (const char*) err.getMsg()); } return PARSE_OK;}intLefIn::cbAntennaInout(lefrCallbackType_e cbType, double data, lefiUserData userData){ try { ((LefIn*) userData)->parseAntennaInout(data); } catch (oaException &err) { ((LefIn*) userData)->error(cGeneric, (const char*) err.getMsg()); } return PARSE_OK;}intLefIn::cbInputAntenna(lefrCallbackType_e cbType, double data, lefiUserData userData){ try { ((LefIn*) userData)->parseInputAntenna(data); } catch (oaException &err) { ((LefIn*) userData)->error(cGeneric, (const char*) err.getMsg()); } return PARSE_OK;}intLefIn::cbOutputAntenna(lefrCallbackType_e cbType, double data, lefiUserData userData){ try { ((LefIn*) userData)->parseOutputAntenna(data); } catch (oaException &err) { ((LefIn*) userData)->error(cGeneric, (const char*) err.getMsg()); } return PARSE_OK;}intLefIn::cbInoutAntenna(lefrCallbackType_e cbType, double data, lefiUserData userData){ try { ((LefIn*) userData)->parseInoutAntenna(data); } catch (oaException &err) { ((LefIn*) userData)->error(cGeneric, (const char*) err.getMsg()); } return PARSE_OK;}intLefIn::cbLayer(lefrCallbackType_e cbType, lefiLayer *data, lefiUserData userData){ try { ((LefIn*) userData)->parseLayer(data); } catch (oaException &err) { ((LefIn*) userData)->error(cGeneric, (const char*) err.getMsg()); } return PARSE_OK;}intLefIn::cbMaxViaStack(lefrCallbackType_e cbType, lefiMaxStackVia *data, lefiUserData userData){ try { ((LefIn*) userData)->parseMaxViaStack(data); } catch (oaException &err) { ((LefIn*) userData)->error(cGeneric, (const char*) err.getMsg()); } return PARSE_OK;}intLefIn::cbVia(lefrCallbackType_e cbType, lefiVia *data, lefiUserData userData){ try { ((LefIn*) userData)->parseVia(data); } catch (oaException &err) { ((LefIn*) userData)->error(cGeneric, (const char*) err.getMsg()); } return PARSE_OK;}intLefIn::cbViaRule(lefrCallbackType_e cbType, lefiViaRule *data, lefiUserData userData){ try { ((LefIn*) userData)->parseViaRule(data); } catch (oaException &err) { ((LefIn*) userData)->error(cGeneric, (const char*) err.getMsg()); } return PARSE_OK;}intLefIn::cbSpacing(lefrCallbackType_e cbType, lefiSpacing *data, lefiUserData userData){ try { ((LefIn*) userData)->parseSpacing(data); } catch (oaException &err) { ((LefIn*) userData)->error(cGeneric, (const char*) err.getMsg()); } return PARSE_OK;}intLefIn::cbNonDefaultRule(lefrCallbackType_e cbType, lefiNonDefault *ndrData, lefiUserData userData){ try { ((LefIn*)userData)->parseNonDefaultRule(ndrData); } catch (oaException &err) { ((LefIn*) userData)->error(cGeneric, (const char*) err.getMsg()); } return PARSE_OK;}intLefIn::cbSite(lefrCallbackType_e cbType, lefiSite *data, lefiUserData userData){ try { ((LefIn*) userData)->parseSite(data); } catch (oaException &err) { ((LefIn*) userData)->error(cGeneric, (const char*) err.getMsg()); } return PARSE_OK;}intLefIn::cbMacroBegin(lefrCallbackType_e cbType, const char *data, lefiUserData userData){ try { ((LefIn*) userData)->parseMacroBegin(data); } catch (oaException &err) { ((LefIn*) userData)->error(cGeneric, (const char*) err.getMsg()); } return PARSE_OK;}intLefIn::cbMacro(lefrCallbackType_e cbType, lefiMacro *data, lefiUserData userData){ try { ((LefIn*) userData)->parseMacro(data); } catch (oaException &err) { ((LefIn*) userData)->error(cGeneric, (const char*) err.getMsg()); } return PARSE_OK;}intLefIn::cbPin(lefrCallbackType_e cbType, lefiPin *data, lefiUserData userData){ try { ((LefIn*) userData)->parsePin(data); } catch (oaException &err) { ((LefIn*) userData)->error(cGeneric, (const char*) err.getMsg()); } return PARSE_OK;}intLefIn::cbObstruction(lefrCallbackType_e cbType, lefiObstruction *data, lefiUserData userData){ try { ((LefIn*) userData)->parseObstruction(data); } catch (oaException &err) { ((LefIn*) userData)->error(cGeneric, (const char*) err.getMsg()); } return PARSE_OK;} intLefIn::cbDensity(lefrCallbackType_e cbType, lefiDensity *data, lefiUserData userData){ try { ((LefIn*) userData)->parseDensity(data); } catch (oaException &err) { ((LefIn*) userData)->error(cGeneric, (const char*) err.getMsg()); } return PARSE_OK;} END_LEFDEF_NAMESPACE
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -