亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? analysis.java

?? The ElectricTM VLSI Design System is an open-source Electronic Design Automation (EDA) system that c
?? JAVA
字號:
/* -*- tab-width: 4 -*- * * Electric(tm) VLSI Design System * * File: Analysis.java * * Copyright (c) 2004 Sun Microsystems and Static Free Software * * Electric(tm) is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * Electric(tm) is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with Electric(tm); see the file COPYING.  If not, write to * the Free Software Foundation, Inc., 59 Temple Place, Suite 330, * Boston, Mass 02111-1307, USA. */package com.sun.electric.tool.simulation;import com.sun.electric.database.text.TextUtils;import java.awt.geom.Rectangle2D;import java.util.ArrayList;import java.util.HashMap;import java.util.Iterator;import java.util.List;/** * Class to define a set of simulation data. * This class encapsulates all of the simulation data that is displayed in a waveform window. * It includes the labels and values. * It can handle digital, analog, and many variations (intervals, sweeps). */public abstract class Analysis<S extends Signal>{	public static class AnalysisType	{		private String name;		private static List<AnalysisType> allTypes = new ArrayList<AnalysisType>();		AnalysisType(String name)		{			this.name = name;			allTypes.add(this);		}		public String toString() { return name; }		public static AnalysisType findAnalysisType(String analysisName)		{			for(AnalysisType at : allTypes)			{				if (at.name.equals(analysisName)) return at;			}			return null;		}	}	/** indicates general signals */	public static final AnalysisType ANALYSIS_SIGNALS = new AnalysisType("Signals");	/** indicates transient analysis */	public static final AnalysisType ANALYSIS_TRANS = new AnalysisType("Transient");	/** indicates AC analysis */		public static final AnalysisType ANALYSIS_AC = new AnalysisType("AC");	/** indicates DC analysis */		public static final AnalysisType ANALYSIS_DC = new AnalysisType("DC");	/** indicates Measurement data */	public static final AnalysisType ANALYSIS_MEAS = new AnalysisType("Measurement");	/** the Stimuli in which this Analysis resides */			private Stimuli sd;	/** the type of analysis data here */						private AnalysisType type;	/** a list of all signals in this Analysis */				private List<S> signals = new ArrayList<S>();	/** a map of all signal names in this Analysis */			private HashMap<String,S> signalNames = new HashMap<String,S>();	/** the range of values in this Analysis */					private Rectangle2D bounds;	/** the left and right side of the Analysis */				private double leftEdge, rightEdge;	/** true to extrapolate last value in waveform window */	private boolean extrapolateToRight;    /** group of signals from extracted netlist of same net */  private HashMap<String,List<S>> signalGroup = new HashMap<String,List<S>>();    /**	 * Constructor for a collection of simulation data.	 * @param sd Stimuli that this analysis is part of.	 * @param type the type of this analysis.	 * @param extrapolateToRight true to draw the last value to the right	 * (useful for IRSIM and other digital simulations).	 * False to stop drawing signals after their last value	 * (useful for Spice and other analog simulations).	 */	public Analysis(Stimuli sd, AnalysisType type, boolean extrapolateToRight)	{		this.sd = sd;		this.type = type;		this.extrapolateToRight = extrapolateToRight;		sd.addAnalysis(this);	}	/**	 * Free allocated resources before closing.	 */	public void finished()	{		for (S s : signals)			s.finished();		signals.clear();		signalNames.clear();	}	/**	 * Method to return the Stimuli in which this Analysis resides.	 * @return the Stimuli in which this Analysis resides.	 */	public Stimuli getStimuli()	{		return sd;	}	/**	 * Method to return the type of data currently being manipulated.	 * Possibilities are ANALYSIS_TRANS, ANALYSIS_AC, ANALYSIS_DC, or ANALYSIS_MEAS.	 * @return the type of data currently being manipulated.	 */	public AnalysisType getAnalysisType()	{		return type;	}	/**	 * Method to tell whether signal values should be extrapolated to the	 * right side of the waveform window.	 * @return true to draw the last value to the right (useful for IRSIM and	 * other digital simulations).  False to stop drawing signals after their	 * last value (useful for Spice and other analog simulations).	 */	public boolean extrapolateValues()	{		return extrapolateToRight;	}	/**	 * Method to get the list of signals in this Simulation Data object.	 * @return a List of signals.	 */	public List<S> getSignals() { return signals; }	public void nameSignal(S ws, String sigName)	{		String name = TextUtils.canonicString(sigName);		signalNames.put(name, ws);		// simulators may strip off last "_"		if (name.indexOf('_') >= 0 && !name.endsWith("_"))			signalNames.put(name + "_", ws);        // keep track of groups of signals that represent one extracted net        String baseName = getBaseNameFromExtractedNet(name);        List<S> sigs = signalGroup.get(baseName);        if (sigs == null) {            sigs = new ArrayList<S>();            signalGroup.put(baseName, sigs);        }        sigs.add(ws);    }	/**	 * Method to add a new signal to this Simulation Data object.	 * Signals can be either digital or analog.	 * @param ws the signal to add.	 * Instead of a "Signal", use either DigitalSignal or AnalogSignal.	 */	public void addSignal(S ws)	{		signals.add(ws);		String sigName = ws.getFullName();		if (sigName != null) nameSignal(ws, sigName);		setBoundsDirty();	}    public static String getBaseNameFromExtractedNet(String signalFullName) {        String delim = Simulation.getSpiceExtractedNetDelimiter();        int hashPos = signalFullName.indexOf(delim);        if (hashPos > 0)        {            return signalFullName.substring(0, hashPos);        } else {            return signalFullName;        }    }    /**     * Get a list of signals that are from the same network.     * Extracted nets are the original name + delimiter + some junk     * @param ws the signal     * @return a list of signals     */    public List<S> getSignalsFromExtractedNet(Signal ws) {        String sigName = ws.getFullName();        if (sigName == null) return new ArrayList<S>();        sigName = TextUtils.canonicString(sigName);        sigName = getBaseNameFromExtractedNet(sigName);        return signalGroup.get(sigName);    }    /**	 * Method to compute the time and value bounds of this simulation data.	 * @return a Rectangle2D that has time bounds in the X part and	 * value bounds in the Y part.	 */	public Rectangle2D getBounds()	{		if (bounds == null)		{			bounds = null;			for(Signal sig : signals)			{				Rectangle2D sigBounds = sig.getBounds();				if (bounds == null)				{					bounds = new Rectangle2D.Double(sigBounds.getMinX(), sigBounds.getMinY(), sigBounds.getWidth(), sigBounds.getHeight());					leftEdge = sig.getLeftEdge();					rightEdge = sig.getRightEdge();				} else				{					Rectangle2D.union(bounds, sigBounds, bounds);					if (leftEdge < rightEdge)					{						leftEdge = Math.min(leftEdge, sig.getLeftEdge());						rightEdge = Math.max(rightEdge, sig.getRightEdge());					} else					{						// backwards time values						leftEdge = Math.max(leftEdge, sig.getLeftEdge());						rightEdge = Math.min(rightEdge, sig.getRightEdge());					}				}			}		}		return bounds;	}	/**	 * Method to return the leftmost X coordinate of this Analysis.	 * This value may not be the same as the minimum-x of the bounds, because	 * the data may not be monotonically increasing (may run backwards, for example).	 * @return the leftmost X coordinate of this Analysis.	 */	public double getLeftEdge()	{		getBounds();		return leftEdge;	}	/**	 * Method to return the rightmost X coordinate of this Analysis.	 * This value may not be the same as the maximum-x of the bounds, because	 * the data may not be monotonically increasing (may run backwards, for example).	 * @return the rightmost X coordinate of this Analysis.	 */	public double getRightEdge()	{		getBounds();		return rightEdge;	}	public void setBoundsDirty() { bounds = null; }	/**	 * Method to tell whether this simulation data is analog or digital.	 * @return true if this simulation data is analog.	 */	public abstract boolean isAnalog();	/**	 * Method to quickly return the signal that corresponds to a given Network name.	 * Not all names may be found (because of name mangling, which this method does not handle).	 * But the lookup is faster than "findSignalForNetwork".	 * @param netName the Network name to find.	 * @return the Signal that corresponds with the Network.	 * Returns null if none can be found.	 */	public S findSignalForNetworkQuickly(String netName)	{		String lookupName = TextUtils.canonicString(netName);		S sSig = signalNames.get(lookupName);		return sSig;	}	/**	 * Method to return the signal that corresponds to a given Network name.	 * @param netName the Network name to find.	 * @return the Signal that corresponds with the Network.	 * Returns null if none can be found.	 */	public S findSignalForNetwork(String netName)	{		// look at all signal names in the cell		for(Iterator<S> it = getSignals().iterator(); it.hasNext(); )		{			S sSig = it.next();			String signalName = sSig.getFullName();			if (netName.equalsIgnoreCase(signalName)) return sSig;			// if the signal name has underscores, see if all alphabetic characters match			if (signalName.length() + 1 == netName.length() && netName.charAt(signalName.length()) == ']')			{				signalName += "_";			}			if (signalName.length() == netName.length() && signalName.indexOf('_') >= 0)			{				boolean matches = true;				for(int i=0; i<signalName.length(); i++)				{					char sigChar = signalName.charAt(i);					char netChar = netName.charAt(i);					if (TextUtils.isLetterOrDigit(sigChar) != TextUtils.isLetterOrDigit(netChar))					{						matches = false;						break;					}					if (TextUtils.isLetterOrDigit(sigChar) &&						TextUtils.canonicChar(sigChar) != TextUtils.canonicChar(netChar))					{						matches = false;						break;					}				}				if (matches) return sSig;			}		}		return null;	}}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久福利视频一区二区| 日韩一区二区三区高清免费看看| 欧美网站大全在线观看| 色婷婷av一区二区三区gif| 欧洲国内综合视频| 精品一区二区免费视频| 亚洲最新视频在线观看| 国产午夜亚洲精品理论片色戒| 色94色欧美sute亚洲线路一久| 国产中文一区二区三区| 亚洲一级二级三级在线免费观看| 国产欧美日韩久久| 欧美一区二区三区四区久久| 在线观看国产91| 成人性生交大片免费看在线播放 | 色8久久精品久久久久久蜜| 久久er精品视频| 亚洲第四色夜色| 亚洲激情中文1区| 欧美高清在线一区二区| 久久综合久久综合久久综合| 欧美sm美女调教| 成人欧美一区二区三区视频网页 | 中文无字幕一区二区三区 | 欧美一区二区三区婷婷月色| 色菇凉天天综合网| 成人精品免费网站| 国产高清久久久久| 男男视频亚洲欧美| 日本成人超碰在线观看| 亚洲一区二区偷拍精品| 亚洲欧美另类小说| 亚洲欧洲日韩在线| 国产精品的网站| 国产精品视频第一区| 国产日韩视频一区二区三区| 精品人伦一区二区色婷婷| 91麻豆精品久久久久蜜臀| 欧美日韩免费视频| 欧美精品免费视频| 欧美视频在线观看一区| 欧美日韩亚洲丝袜制服| 欧美日韩国产乱码电影| 丰满岳乱妇一区二区三区| 日韩国产精品久久久| 亚洲欧洲日韩av| 91丨九色丨蝌蚪富婆spa| 高清在线不卡av| 不卡av免费在线观看| 不卡av免费在线观看| 99在线热播精品免费| www.欧美色图| 91国产成人在线| 欧美日韩国产中文| 欧美一区二区三区小说| 26uuu精品一区二区在线观看| 欧美xxxxxxxx| 欧美极品少妇xxxxⅹ高跟鞋 | 亚洲欧美区自拍先锋| 亚洲欧洲精品一区二区三区 | 欧美精品日日鲁夜夜添| 欧美大黄免费观看| 中文字幕不卡在线观看| 日韩一区二区在线观看| 精品国产成人系列| 国产精品―色哟哟| 亚洲黄色小视频| 日韩专区一卡二卡| 国产一区视频网站| www.成人在线| 7777精品伊人久久久大香线蕉的 | 久久精品人人爽人人爽| 国产精品狼人久久影院观看方式| 一区二区理论电影在线观看| 五月婷婷久久丁香| 国模套图日韩精品一区二区| 成人91在线观看| 欧美裸体一区二区三区| 国产亚洲女人久久久久毛片| 亚洲欧美日韩成人高清在线一区| 日韩电影免费在线看| 国产乱人伦偷精品视频不卡| 色综合视频在线观看| 日韩一区二区视频| 亚洲欧美日韩小说| 蜜桃视频一区二区三区| 97精品电影院| 日韩精品一区二区三区四区视频 | 欧美国产精品v| 亚洲国产一区视频| 国产成人高清视频| 欧美午夜精品久久久久久孕妇| 欧美精品一区二区三区久久久| 日韩一区在线看| 精品一区精品二区高清| 91国偷自产一区二区开放时间| 精品久久久久久久久久久久包黑料 | 亚洲国产精品精华液ab| 亚洲一区中文日韩| 亚洲综合色在线| 午夜精品久久久久久| 成人激情开心网| 中文字幕在线免费不卡| 色综合久久天天| 亚洲综合免费观看高清完整版| 欧洲在线/亚洲| 蜜臀av性久久久久av蜜臀妖精| 日韩视频免费观看高清完整版 | 欧美mv日韩mv国产网站app| 中文一区二区完整视频在线观看| 香蕉久久夜色精品国产使用方法| 大白屁股一区二区视频| 日韩欧美视频在线| 欧美手机在线视频| 欧美日韩午夜在线视频| 成人免费一区二区三区视频| 国产精品综合在线视频| 91精品国产一区二区三区香蕉| 亚洲激情图片小说视频| 成人的网站免费观看| 国产视频一区不卡| 精彩视频一区二区三区| 日韩无一区二区| 免费视频一区二区| 欧美日韩精品系列| 亚洲电影一级黄| 欧美日韩国产系列| 亚洲自拍欧美精品| 色av成人天堂桃色av| 亚洲欧美一区二区不卡| aa级大片欧美| 亚洲欧洲中文日韩久久av乱码| 成人99免费视频| 亚洲欧洲av另类| 99久久婷婷国产综合精品 | 亚洲国产va精品久久久不卡综合| 99久久精品国产麻豆演员表| 中文字幕精品综合| av不卡一区二区三区| 《视频一区视频二区| 91浏览器入口在线观看| 亚洲日本乱码在线观看| 91玉足脚交白嫩脚丫在线播放| 中文字幕综合网| 91香蕉视频在线| 一区二区三区产品免费精品久久75| 色哟哟国产精品| 亚洲一区二区三区在线| 欧美日韩dvd在线观看| 日本欧美一区二区在线观看| 日韩一区二区影院| 国产在线精品国自产拍免费| 国产婷婷色一区二区三区四区| 国产91精品久久久久久久网曝门| 久久精品国产99国产精品| 1区2区3区精品视频| 久久精子c满五个校花| 日本一区二区久久| 亚洲黄网站在线观看| 亚洲综合丁香婷婷六月香| 日韩经典一区二区| 国产一区亚洲一区| 一本色道亚洲精品aⅴ| 正在播放亚洲一区| 欧美aⅴ一区二区三区视频| 成人免费视频国产在线观看| 成人动漫一区二区三区| 亚洲国产精品v| 99vv1com这只有精品| 亚洲大片在线观看| 日韩欧美精品在线| 成人免费高清视频| 亚洲亚洲精品在线观看| 久久综合色之久久综合| 成人h精品动漫一区二区三区| 夜夜操天天操亚洲| 精品免费一区二区三区| 色悠久久久久综合欧美99| 日韩精品一级二级| 国产精品免费网站在线观看| 欧美日韩一级视频| 国产东北露脸精品视频| 亚洲福利一区二区三区| 久久久不卡网国产精品一区| 色网站国产精品| 国精产品一区一区三区mba视频| 亚洲日本在线视频观看| 精品嫩草影院久久| 欧美影视一区二区三区| 国产精品亚洲午夜一区二区三区| 亚洲一二三四在线| 欧美激情在线一区二区| 欧美精品一二三区| 99久久久久久99| 精品中文字幕一区二区| 亚洲一二三四在线观看| 国产精品久久久久久久蜜臀| 日韩视频免费观看高清完整版在线观看| 不卡视频免费播放| 极品少妇xxxx偷拍精品少妇|