mirror of
https://github.com/moses-smt/mosesdecoder.git
synced 2024-12-27 05:55:02 +03:00
8c3b82e596
This change might be useful to avoid duplicating the names. The reason is that although MERT programs are standalone applications, some header files such as data.h and point.h have common guard macro names like "DATA_H" and "POINT_H", and this is not good naming conventions when you want to include external headers. Some files actually include headers in Moses and KenLM's util.
154 lines
4.1 KiB
C++
154 lines
4.1 KiB
C++
#include "hashMap.h"
|
|
|
|
// The following class defines a hash function for strings
|
|
|
|
|
|
using namespace std;
|
|
|
|
namespace HashMapSpace
|
|
{
|
|
// hashMap::hashMap();
|
|
/* hashMap::~hashMap()
|
|
{
|
|
// vector<stringHasher>::const_iterator del = m_hasher.begin();
|
|
for ( vector<stringHasher>::const_iterator del=m_hasher.begin(); del != m_hasher.end(); del++ )
|
|
{
|
|
delete(*del);
|
|
}
|
|
}*/
|
|
/**
|
|
* int hashMap::trouve ( long searchKey )
|
|
* @param searchKey
|
|
* @return
|
|
*/
|
|
int hashMap::trouve ( long searchKey )
|
|
{
|
|
long foundKey;
|
|
// vector<stringHasher>::const_iterator l_hasher=m_hasher.begin();
|
|
for ( vector<stringHasher>:: iterator l_hasher=m_hasher.begin() ; l_hasher!=m_hasher.end() ; l_hasher++ ) {
|
|
foundKey= ( *l_hasher ).getHashKey();
|
|
if ( searchKey == foundKey ) {
|
|
return 1;
|
|
}
|
|
}
|
|
return 0;
|
|
}
|
|
int hashMap::trouve ( string key )
|
|
{
|
|
long searchKey=hashValue ( key );
|
|
long foundKey;;
|
|
// vector<stringHasher>::const_iterator l_hasher=m_hasher.begin();
|
|
for ( vector<stringHasher>:: iterator l_hasher=m_hasher.begin() ; l_hasher!=m_hasher.end() ; l_hasher++ ) {
|
|
foundKey= ( *l_hasher ).getHashKey();
|
|
if ( searchKey == foundKey ) {
|
|
return 1;
|
|
}
|
|
}
|
|
return 0;
|
|
}
|
|
/**
|
|
* long hashMap::hashValue ( string key )
|
|
* @param key
|
|
* @return
|
|
*/
|
|
long hashMap::hashValue ( string key )
|
|
{
|
|
locale loc; // the "C" locale
|
|
const collate<char>& coll = use_facet<collate<char> >(loc);
|
|
return coll.hash(key.data(),key.data()+key.length());
|
|
// boost::hash<string> hasher;
|
|
// return hasher ( key );
|
|
}
|
|
/**
|
|
* void hashMap::addHasher ( string key, string value )
|
|
* @param key
|
|
* @param value
|
|
*/
|
|
void hashMap::addHasher ( string key, string value )
|
|
{
|
|
if ( trouve ( hashValue ( key ) ) ==0 ) {
|
|
// cerr << "ICI1" <<endl;
|
|
stringHasher H ( hashValue ( key ),key,value );
|
|
// cerr <<" "<< hashValue ( key )<<" "<< key<<" "<<value <<endl;
|
|
// cerr << "ICI2" <<endl;
|
|
|
|
m_hasher.push_back ( H );
|
|
}
|
|
}
|
|
stringHasher hashMap::getHasher ( string key )
|
|
{
|
|
long searchKey=hashValue ( key );
|
|
long foundKey;
|
|
stringHasher defaut(0,"","");
|
|
// vector<stringHasher>::const_iterator l_hasher=m_hasher.begin();
|
|
for ( vector<stringHasher>:: iterator l_hasher=m_hasher.begin() ; l_hasher!=m_hasher.end() ; l_hasher++ ) {
|
|
foundKey= ( *l_hasher ).getHashKey();
|
|
if ( searchKey == foundKey ) {
|
|
return ( *l_hasher );
|
|
}
|
|
}
|
|
return defaut;
|
|
}
|
|
string hashMap::getValue ( string key )
|
|
{
|
|
long searchKey=hashValue ( key );
|
|
long foundKey;
|
|
// vector<stringHasher>::const_iterator l_hasher=m_hasher.begin();
|
|
for ( vector<stringHasher>:: iterator l_hasher=m_hasher.begin() ; l_hasher!=m_hasher.end() ; l_hasher++ ) {
|
|
foundKey= ( *l_hasher ).getHashKey();
|
|
if ( searchKey == foundKey ) {
|
|
// cerr <<"value found : " << key<<"|"<< ( *l_hasher ).getValue()<<endl;
|
|
return ( *l_hasher ).getValue();
|
|
}
|
|
}
|
|
return "";
|
|
}
|
|
string hashMap::searchValue ( string value )
|
|
{
|
|
// long searchKey=hashValue ( key );
|
|
// long foundKey;
|
|
string foundValue;
|
|
|
|
// vector<stringHasher>::const_iterator l_hasher=m_hasher.begin();
|
|
for ( vector<stringHasher>:: iterator l_hasher=m_hasher.begin() ; l_hasher!=m_hasher.end() ; l_hasher++ ) {
|
|
foundValue= ( *l_hasher ).getValue();
|
|
if ( foundValue.compare ( value ) == 0 ) {
|
|
return ( *l_hasher ).getKey();
|
|
}
|
|
}
|
|
return "";
|
|
}
|
|
|
|
|
|
void hashMap::setValue ( string key , string value )
|
|
{
|
|
long searchKey=hashValue ( key );
|
|
long foundKey;
|
|
// vector<stringHasher>::const_iterator l_hasher=m_hasher.begin();
|
|
for ( vector<stringHasher>:: iterator l_hasher=m_hasher.begin() ; l_hasher!=m_hasher.end() ; l_hasher++ ) {
|
|
foundKey= ( *l_hasher ).getHashKey();
|
|
if ( searchKey == foundKey ) {
|
|
( *l_hasher ).setValue ( value );
|
|
// return ( *l_hasher ).getValue();
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
*
|
|
*/
|
|
void hashMap::printHash()
|
|
{
|
|
for ( vector<stringHasher>:: iterator l_hasher=m_hasher.begin() ; l_hasher!=m_hasher.end() ; l_hasher++ ) {
|
|
cout << ( *l_hasher ).getHashKey() <<" | "<< ( *l_hasher ).getKey() << " | " << ( *l_hasher ).getValue() << endl;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// long hashValue(string key){}
|
|
|
|
}
|
|
|