- /* 
-     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 _hash_h_ 
- #define _hash_h_ 
-   
- #include "protector.h" 
- #include "position.h" 
-   
- /** 
-  * Define the size of the specified hashtable. 
-  * 
-  * @param size the size of the hashtable in bytes 
-  */ 
- void setHashtableSize(Hashtable * hashtable, UINT64 size); 
-   
- /** 
-  * Initialize the specified hashtable. Call this function exactly once 
-  * for every hashtable before using it. 
-  */ 
- void initializeHashtable(Hashtable * hashtable); 
-   
- /** 
-  * Reset the specified hashtable. Call this function in order to 
-  * erase all stored data. 
-  */ 
- void resetHashtable(Hashtable * hashtable); 
-   
- /** 
-  * Increment the date of the specified hashtable. 
-  */ 
- void incrementDate(Hashtable * hashtable); 
-   
- /** 
-  * Construct a hashentry from the given values. 
-  */ 
- Hashentry constructHashEntry(UINT64 key, INT16 value, INT16 staticValue, 
-                              UINT8 importance, UINT16 bestMove, UINT8 date, 
-                              UINT8 flag); 
-   
- /** 
-  * Put the specified entry into the hashtable. 
-  */ 
- void setHashentry(Hashtable * hashtable, UINT64 key, INT16 value, 
-                   UINT8 importance, UINT16 bestMove, UINT8 flag, 
-                   INT16 staticValue); 
-   
- /** 
-  * Get the entry specified by key. 
-  */ 
- Hashentry *getHashentry(Hashtable * hashtable, UINT64 key); 
-   
- INT16 getHashentryValue(const Hashentry * entry); 
- UINT8 getHashentryImportance(const Hashentry * entry); 
- UINT16 getHashentryMove(const Hashentry * entry); 
- UINT8 getHashentryDate(const Hashentry * entry); 
- UINT8 getHashentryFlag(const Hashentry * entry); 
- UINT64 getHashentryKey(const Hashentry * entry); 
- INT16 getHashentryStaticValue(const Hashentry * entry); 
- bool nodeIsInUse(UINT64 key, UINT8 depth); 
- bool setNodeUsage(UINT64 key, UINT8 depth); 
- void resetNodeUsage(UINT64 key, UINT8 depth); 
-   
- /** 
-  * Initialize this module. 
-  * 
-  * @return 0 if no errors occurred. 
-  */ 
- int initializeModuleHash(void); 
-   
- /** 
-  * Test this module. 
-  * 
-  * @return 0 if all tests succeed. 
-  */ 
- int testModuleHash(void); 
-   
- #endif 
-