- /* 
-     Protector -- a UCI chess engine 
-   
-     Copyright (C) 2009-2010 Raimund Heid (Raimund_Heid@yahoo.com) 
-   
-     This program 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. 
-   
-     This program 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 this program.  If not, see <http://www.gnu.org/licenses/>. 
-   
- */ 
-   
- #ifndef _coordination_h_ 
- #define _coordination_h_ 
-   
- #include "position.h" 
- #include "movegeneration.h" 
-   
- typedef enum 
- { 
-    TASKTYPE_BEST_MOVE, 
-    TASKTYPE_TEST_BEST_MOVE, 
-    TASKTYPE_MATE_IN_N, 
-    TASKTYPE_TEST_MATE_IN_N 
- } TaskType; 
-   
- typedef struct 
- { 
-    TaskType type;               /* the type of task to be performed */ 
-    Variation *variation;        /* the variation to be examined */ 
-    int numberOfMoves;           /* mateproblems: the number of moves */ 
-    Movelist solutions;          /* mateproblems: the known solutions */ 
-   
-    Movelist calculatedSolutions;        /* the calculated solutions */ 
-    Move bestMove;               /* the calculated best move */ 
-   
-    UINT64 nodes;                /* the number of nodes calculated */ 
- } SearchTask; 
-   
- /** 
-  * Set the number of threads to be used. 
-  * 
-  * @var numThreads the number of threads to be used 
-  * @return the effective number of threads that will be used 
-  */ 
- int setNumberOfThreads(int numThreads); 
- int getNumberOfThreads(); 
-   
- /** 
-  * Set the size of the hashtable. 
-  * 
-  * @var size the size of the hashtable in MB 
-  */ 
- void setHashtableSizeInMb(unsigned int size); 
-   
- /** 
-  * Lock out either the gui or the search thread. 
-  */ 
- void getGuiSearchMutex(void); 
-   
- /** 
-  * Release the gui/search thread lock. 
-  */ 
- void releaseGuiSearchMutex(void); 
-   
- /** 
-  * Schedule the specified task as the next task to be calculated. 
-  */ 
- void scheduleTask(SearchTask * task); 
-   
- /** 
-  * Start the timer of the specified task. 
-  */ 
- void startTimerThread(SearchTask * task); 
-   
- /** 
-  * Get the elapsed time of the current search. 
-  */ 
- long getElapsedTime(); 
-   
- /** 
-  * Get the hashtable shared by the search threads. 
-  */ 
- Hashtable *getSharedHashtable(); 
-   
- /** 
-  * Signal an abortion of the current search and copy  
-  * the current variation to 'variation'. 
-  */ 
- void prepareSearchAbort(void); 
-   
- /** 
-  * Unset the ponder mode for the current search. 
-  */ 
- void unsetPonderMode(void); 
-   
- /** 
-  * Wait for the current search to terminate. 
-  */ 
- void waitForSearchTermination(void); 
-   
- /** 
-  * Set the timelimits for the current search task. 
-  */ 
- void setTimeLimit(unsigned long timeTarget, unsigned long timeLimit); 
-   
- /** 
-  * Schedule the specified task as the next task to be calculated. 
-  * Then wait until the task is completed. 
-  */ 
- void completeTask(SearchTask * task); 
-   
- /** 
-  * Get the variation object of the current search task. 
-  */ 
- Variation *getCurrentVariation(void); 
-   
- /** 
-  * Get the number of nodes calculated by all active threads. 
-  */ 
- UINT64 getNodeCount(void); 
-   
- /** 
-  * Initialize this module. 
-  * 
-  * @return 0 if no errors occurred. 
-  */ 
- int initializeModuleCoordination(void); 
-   
- /** 
-  * Test this module. 
-  * 
-  * @return 0 if all tests succeed. 
-  */ 
- int testModuleCoordination(void); 
-   
- #endif 
-