mirror of
https://github.com/moses-smt/mosesdecoder.git
synced 2024-12-28 14:32:38 +03:00
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){}
|
||
|
|
||
|
}
|
||
|
|