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

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

?? state.java

?? JAVA實(shí)現(xiàn)的有限狀態(tài)自動(dòng)機(jī)。該軟件適合Linux環(huán)境下安裝運(yùn)行。
?? JAVA
字號(hào):
/***************************************************************************** * net.openai.fsm.State ***************************************************************************** * @author  JC on E * @date    9/18/2000 * 2001 OpenAI Labs *****************************************************************************/package net.openai.util.fsm;import java.util.Vector;import java.io.Serializable;import net.openai.util.fsm.event.StateEvent;import net.openai.util.fsm.event.StateListener;/** * State abstract class */public abstract class State implements Serializable {    /** The current "number" for the state name. */    private static int stateNumber = 0;    /** A Vector of Conditions to check. */    private Vector conditions = new Vector();    /** The name of this state. */    private String name = getDefaultName();    /** A flag to indicate that we are a start state.  This can only be set	by the Machine itself.  If you wish to set a State as a start state	you must call <code>setStartState()</code> on the machine itself. */    private boolean startState = false;    /** A flag to indicate that this is an end state.  Unlike the start state	flag, a state's end state flag can freely be changed on the state	itself. */    private boolean endState = false;    /** A list of listeners for this state. */    private Vector listeners = new Vector();    /**     * Constructs a new state name that is given by default.     */    private static synchronized String getDefaultName() {	return "<Unnamed State " + (stateNumber++) + ">";    }    /**     * Sets the name for this state.  If the name passed in is null, then a     * <code>NullPointerException</code> will be generated.     *     * @param name The new name for this state.     */    public final void setName(String name) {	if(name == null)	    throw new NullPointerException("The state name cannot be null!");	this.name = new String(name);    }    /**     * Returns the name of this state.     *     * @return A String that represents the name of this state.     */    public final String getName() {	return new String(name);    }    /**     * This method will only be called by the machine itself.  It sets the     * start state flag for this state.     *     * @param startState The new start state flag.     */    final void setStartStateFlag(boolean startState) {	if(startState == this.startState)	    return;	this.startState = startState;	fireStateEvent(StateEvent.START_FLAG_CHANGE);    }    /**     * Returns true if this state is a start state, false otherwise.     *     * @return The value of this state's start state flag.     */    public final boolean getStartStateFlag() {	return startState;    }    /**     * Sets the value of this state's end state flag.     *     * @param endState The new value of this state's end state flag.     */    public final void setEndStateFlag(boolean endState) {	if(endState == this.endState)	    return;	this.endState = endState;	fireStateEvent(StateEvent.END_FLAG_CHANGE);    }    /**     * Returns true if this state is an end state, false otherwise.     *     * @return The value of this state's end state flag.     */    public final boolean getEndStateFlag() {	return endState;    }    /**     * Adds a StateListener to this State that we will deliver events to.     *     * @param listener The StateListener to add.     */    public final void addStateListener(StateListener listener) {	if(listener == null)	    throw new NullPointerException("Cannot add null listener.");	synchronized(listeners) {	    if(!listeners.contains(listener))		listeners.addElement(listener);	}    }    /**     * Removes a StateListener from this State.     *     * @param listener The StateListener to remove.     */    public final void removeStateListener(StateListener listener) {	if(listener == null)	    return;	synchronized(listeners) {	    listeners.removeElement(listener);	}    }    /**     * Sends a StateEvent to all of the listeners on this State.     *     * @param type The type of event to fire.     */    private void fireStateEvent(int type) {	Vector toFireTo = null;	synchronized(listeners) {	    toFireTo = (Vector)listeners.clone();	}	int numListeners = toFireTo.size();	for(int i = 0; i < numListeners; i++)	    ((StateListener)toFireTo.elementAt(i)).		handleStateEvent(new StateEvent(this, type));    }    /**     * Adds a Condition to this State.  If this is the current state in the     * machine when the machine is receiving input, then this state will     * iterate down the list of conditions to find the first one that is     * met by the input to the machine.  Once the first condition that     * satisfies the input is found, then the condition's target state     * will be returned to the machine as the new curren state.     * <br><br>     * NOTE: Subsequent calls to this method with the same condition will     *       put the condition at the end of the list of conditions to be     *       checked.     *     * @param condition The new Condition to add.     */    public final void addTransition(Condition condition) {	// Both condition and state must be non-null	if(condition == null)	    throw new NullPointerException("Cannot add null Condition");	synchronized(conditions) {	    if(conditions.contains(condition))		conditions.removeElement(condition);	    conditions.addElement(condition);	}	condition.addSourceState(this);    }    /**     * Convenience method for adding a transition from this state to the next.     * This method simply calls addTransition() on this state and then calls     * setTargetState() the condition.     *     * @param condition   The new Condition to add.     * @param targetState The target state for this transition.     */    public final void addTransition(Condition condition, State targetState) {	addTransition(condition);	condition.setTargetState(targetState);    }    /**     * Removes a Condition as a Transition from this State.     *     * @param condition The Condition/Transition to remove.     */    public final void removeTransition(Condition condition) {	if(condition == null)	    return;	condition.removeSourceState(this);	synchronized(conditions) {	    conditions.removeElement(condition);	}    }    /**     * Returns a Vector of the current Conditions/Transitions for this State.     *     * @return The current list of Conditions for this State or null if there     *         aren't any.     */    public final Vector getTransitions() {	Vector returnValue = null;	synchronized(conditions) {	    if(!conditions.isEmpty())		returnValue = (Vector)conditions.clone();	}	return returnValue;    }    /**     * Iterates through the Condition list and finds the first Condition     * that meets <code>condition</code> and returns the associated State.     * If no conditions match, then null is returned.     *     * @param condition The condition to check.  For example, if the set of     *                  Conditions check for a particular Integer, then the     *                  first Condition that matches the Integer passed into     *                  this method will be "met" and the associated State     *                  will be returned.     * @return The State that maps to the matching Condition or null if no     *         Conditions meet the criteria.     */    final State input(Object condition) {	// condition must be non-null	if(condition == null)	    throw new NullPointerException("Null input condition");	Vector toCheck = getTransitions();		if(toCheck == null)	    return null;	// Iterate through the list of Conditions and find the first match	int numConditions = toCheck.size();	for(int i = 0; i < numConditions; i++) {	    Condition cond = (Condition)toCheck.elementAt(i);	    if(cond.satisfiedBy(condition))		return cond.getTargetState();	}		// No conditions matched, so return null	return null;    }    /**     * Called directly by the machine when this state is entered.     *     * @param input The input to feed into this state.     */    void enterState(Object input) {	fireStateEvent(StateEvent.ENTER_START);	enter(input);	fireStateEvent(StateEvent.ENTER_END);    }    /**     * Called directly by the machine when this state is exited.     *     * @return Any output object that is to be fed into the next state.     */    Object exitState() {	fireStateEvent(StateEvent.EXIT_START);	Object returnValue = exit();	fireStateEvent(StateEvent.EXIT_END);	return returnValue;    }    /**     * This method is called when the state is entered.     *     * @param input Any output from a previous state will become the input     *              for this state.  If this is a start state, then     *              <code>input</code> will be <code>null</code>.     */    public abstract void enter(Object input);    /**     * This method is called when the state is exited via a transition to     * another state.     *     * @return Any output object that is to be fed into the next state.     */    public abstract Object exit();}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久91精品国产91久久小草| 成人性生交大合| 国产九九视频一区二区三区| 99视频一区二区| 国产精品久久久久久久裸模| 成人激情校园春色| 国产精品人妖ts系列视频| 成人av免费观看| 国产激情视频一区二区三区欧美| 日韩精品亚洲一区| 日韩黄色在线观看| 欧美色网站导航| 亚洲国产欧美另类丝袜| 欧美午夜精品免费| 亚洲国产精品影院| 欧美日韩视频在线第一区 | 国产精品私人自拍| 日韩一区二区三| 国产精品毛片久久久久久| 国产高清精品网站| 欧美哺乳videos| 久久99久久99精品免视看婷婷 | 亚洲欧洲无码一区二区三区| 韩国三级在线一区| 精品福利一区二区三区免费视频| 免费精品99久久国产综合精品| 91麻豆精品久久久久蜜臀| 日本中文字幕不卡| 7777精品伊人久久久大香线蕉的 | 国产日韩成人精品| 欧美岛国在线观看| 韩国成人在线视频| 久久久久88色偷偷免费| 大尺度一区二区| 中文字幕在线不卡国产视频| caoporen国产精品视频| 亚洲免费视频成人| 欧美日韩午夜在线视频| 日本女优在线视频一区二区 | 在线视频亚洲一区| 亚洲.国产.中文慕字在线| 91精品国产综合久久国产大片 | 亚洲伦理在线精品| 欧美视频在线播放| 免费在线成人网| 久久久久久久久久久久久夜| 成人精品在线视频观看| 亚洲天堂福利av| 欧美色男人天堂| 免费美女久久99| 国产亚洲精品bt天堂精选| av一本久道久久综合久久鬼色| 亚洲女同ⅹxx女同tv| 欧美日韩大陆在线| 狠狠色狠狠色合久久伊人| 国产日本亚洲高清| 色悠久久久久综合欧美99| 婷婷夜色潮精品综合在线| 国产aⅴ综合色| 色诱亚洲精品久久久久久| 久久久久国产精品厨房| 欧美精品日韩一区| 91成人在线免费观看| 亚洲精品精品亚洲| 日韩视频一区二区在线观看| 欧美一区二区免费| 久久婷婷成人综合色| 欧美国产亚洲另类动漫| 欧美三级午夜理伦三级中视频| 精品国产a毛片| 亚洲高清免费一级二级三级| 91老师国产黑色丝袜在线| 国产区在线观看成人精品| 久88久久88久久久| 精品理论电影在线观看| 蜜桃精品视频在线观看| 56国语精品自产拍在线观看| 日韩激情一二三区| 精品区一区二区| 亚洲综合视频网| 国产经典欧美精品| 色综合中文字幕国产| 91久久精品一区二区二区| 在线播放亚洲一区| 亚洲欧美成人一区二区三区| 国产综合久久久久影院| 欧美特级限制片免费在线观看| 国产亚洲综合在线| 亚洲国产精品欧美一二99| 国产精品自拍av| 欧美伊人精品成人久久综合97| 国产在线精品免费| 亚洲欧美日韩中文播放| 欧美一区二区三区免费在线看| 成人理论电影网| 丝袜诱惑制服诱惑色一区在线观看| 中文字幕第一区二区| 欧美精品一卡两卡| 9i在线看片成人免费| 久久精品国产秦先生| 亚洲综合999| 国产欧美一区二区精品性色| 经典三级在线一区| 91精品福利视频| 亚洲午夜一区二区| 国产精品电影一区二区三区| 日韩一本二本av| 欧美图片一区二区三区| 成人av资源在线观看| 国产曰批免费观看久久久| 日韩精品一二三区| 亚洲第一精品在线| 一区二区三区在线免费| 国产精品福利一区| 日本一区二区三区国色天香| 精品少妇一区二区三区在线视频| 欧美视频中文一区二区三区在线观看| 成人国产在线观看| 国产河南妇女毛片精品久久久| 日本va欧美va瓶| 一区二区三区四区在线免费观看| 国产精品看片你懂得| 久久久久国产成人精品亚洲午夜| 日韩一区二区电影网| 在线电影国产精品| 欧美日韩激情一区二区三区| 一本一道久久a久久精品综合蜜臀| 风间由美一区二区av101| 国产在线播放一区二区三区| 久久精品国产秦先生| 蜜桃精品在线观看| 蜜臀久久99精品久久久久久9| 午夜精品视频在线观看| 亚洲一区二区三区美女| 亚洲一区二区三区自拍| 亚洲图片一区二区| 亚洲电影一级片| 亚洲成人免费电影| 天天做天天摸天天爽国产一区| 亚洲成人动漫一区| 亚洲成人一二三| 亚洲五码中文字幕| 亚洲成人动漫av| 日av在线不卡| 狠狠色丁香九九婷婷综合五月| 免费欧美在线视频| 精一区二区三区| 国产综合成人久久大片91| 国产在线播放一区三区四| 国产精品一区二区视频| 国产不卡视频一区二区三区| 国产成人在线观看| 国产河南妇女毛片精品久久久| 成人做爰69片免费看网站| 成人在线视频一区二区| 99在线精品一区二区三区| 风间由美一区二区三区在线观看| 国产成人激情av| av中文字幕不卡| 91福利国产成人精品照片| 欧美三级三级三级| 91精品国产综合久久蜜臀 | 国产真实乱对白精彩久久| 极品少妇xxxx偷拍精品少妇| 国内精品免费在线观看| 顶级嫩模精品视频在线看| 99久久精品免费| 欧美亚洲综合网| 91精品国产一区二区三区| 精品电影一区二区| 国产精品第四页| 亚洲成人精品一区| 国产精品自拍在线| 日本韩国精品一区二区在线观看| 精品污污网站免费看| 精品久久国产字幕高潮| 国产精品福利av| 午夜日韩在线观看| 国内精品久久久久影院色| 99久久伊人久久99| 日韩欧美精品在线视频| 欧美精彩视频一区二区三区| 亚洲国产另类av| 国内精品久久久久影院色| 日韩av网站免费在线| 日日夜夜免费精品视频| 亚洲女人的天堂| 欧美国产一区视频在线观看| 国产欧美日韩亚州综合| 亚洲国产成人午夜在线一区| www激情久久| 日韩丝袜情趣美女图片| 91丨国产丨九色丨pron| 日本韩国精品在线| 欧美老女人第四色| 国产欧美精品一区二区色综合 | 日本亚洲三级在线| 成人黄页毛片网站| 2021中文字幕一区亚洲| 福利一区二区在线|