/* * SearchControl.java * * Created on November 16, 2005, 11:45 AM */ package Current.canvases.Search; import Current.search.*; import Current.*; import Current.manage.*; /** * * @author pat */ public class SearchControl implements Searcher { Manager M; int type; Thread T; BasicSearcher BS; int depth; long timer; boolean time_search=true; static final String[] seek_types={"basic","subword","c:basic", "c:palindrome","c:odd square", "leader" //, "leader_debug" , "forward leader" //,"leader","leader2" }; static final boolean[] seek_enabled={ true, true, ExternSearch.canRunSlalom(), ExternSearch.canRunPalindrome(), ExternSearch.canRunOddSquare() ,true //,true ,true }; /** Creates a new instance of SearchControl */ public SearchControl(Manager M, BasicSearcher BS) { this.M=M; this.BS=BS; type=0; while (! seek_enabled[type]) { type=type+1; } depth=50; M.mcbCache(McbSubword.class); } public int getDepth(){ return depth; } public void setDepth(int d) { depth=d; } /** Move to the next search type */ public void inc() { type=(type+1)%seek_types.length; while (! seek_enabled[type]) { type=(type+1)%seek_types.length; } } /** Return the name of the currently selected search */ public String getSearchType() { return seek_types[type]; } public void startSearch(){ timer = System.currentTimeMillis(); if (T==null) { switch (type) { case 0: T=new BasicSearch(M.getX(),M.getY(),depth,this); break; case 1: T=new SubwordSearch(M.getX(),M.getY(),depth, ((McbSubword)(M.mcbGet(McbSubword.class))).subword,this); break; case 2: T=ExternSearch.SlalomSearch(M.getX(),M.getY(),depth,this); break; case 3: T=ExternSearch.PalindromeSearch(M.getX(),M.getY(),depth,this); break; case 4: T=ExternSearch.OddSquareSearch(M.getX(),M.getY(),depth,this); break; case 5: T=new LeaderSearch(M.getX(),M.getY(),depth,this); break; // case 6: // T=new LeaderSearch_debug(M.getX(),M.getY(),depth,this); // break; case 6: T=new ForwardLeaderSearch(M.getX(),M.getY(),depth,this); break; } } else { System.err.println("Warning: Attempted to search while already seeking... -SearchControl"); } } public void interrupt() { if (T!=null) { try { T.interrupt(); } catch (Throwable t) { System.err.println("error in interrupt"); System.err.flush(); t.printStackTrace(); } T=null; } } public boolean searching() { return T!=null; } public void doneBasicSearch(Results results) { if (time_search) { System.out.println("search time="+(System.currentTimeMillis()-timer)+"ms"); } T=null; BS.doneBasicSearch(new BasicSearchResults(results)); } }