mirror of
https://github.com/moses-smt/mosesdecoder.git
synced 2024-12-28 14:32:38 +03:00
168 lines
4.8 KiB
C++
168 lines
4.8 KiB
C++
|
#include "hashMapStringInfos.h"
|
||
|
|
||
|
// The following class defines a hash function for strings
|
||
|
|
||
|
|
||
|
using namespace std;
|
||
|
|
||
|
namespace HashMapSpace
|
||
|
{
|
||
|
// hashMapStringInfos::hashMap();
|
||
|
/* hashMapStringInfos::~hashMap()
|
||
|
{
|
||
|
// vector<stringInfosHasher>::const_iterator del = m_hasher.begin();
|
||
|
for ( vector<stringInfosHasher>::const_iterator del=m_hasher.begin(); del != m_hasher.end(); del++ )
|
||
|
{
|
||
|
delete(*del);
|
||
|
}
|
||
|
}*/
|
||
|
/**
|
||
|
* int hashMapStringInfos::trouve ( long searchKey )
|
||
|
* @param searchKey
|
||
|
* @return
|
||
|
*/
|
||
|
int hashMapStringInfos::trouve ( long searchKey )
|
||
|
{
|
||
|
long foundKey;
|
||
|
// vector<stringInfosHasher>::const_iterator l_hasher=m_hasher.begin();
|
||
|
for ( vector<stringInfosHasher>:: 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 hashMapStringInfos::trouve ( string key )
|
||
|
{
|
||
|
long searchKey = hashValue ( key );
|
||
|
long foundKey;;
|
||
|
// vector<stringInfosHasher>::const_iterator l_hasher=m_hasher.begin();
|
||
|
for ( vector<stringInfosHasher>:: 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 hashMapStringInfos::hashValue ( string key )
|
||
|
* @param key
|
||
|
* @return
|
||
|
*/
|
||
|
long hashMapStringInfos::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 hashMapStringInfos::addHasher ( string key, string value )
|
||
|
* @param key
|
||
|
* @param value
|
||
|
*/
|
||
|
void hashMapStringInfos::addHasher ( string key, vector<string> value )
|
||
|
{
|
||
|
if ( trouve ( hashValue ( key ) ) == 0 ) {
|
||
|
// cerr << "ICI1" <<endl;
|
||
|
stringInfosHasher H ( hashValue ( key ), key, value );
|
||
|
// cerr <<" "<< hashValue ( key )<<" "<< key<<" "<<value <<endl;
|
||
|
// cerr << "ICI2" <<endl;
|
||
|
|
||
|
m_hasher.push_back ( H );
|
||
|
}
|
||
|
}
|
||
|
void hashMapStringInfos::addValue ( string key, vector<string> value )
|
||
|
{
|
||
|
addHasher ( key, value );
|
||
|
}
|
||
|
stringInfosHasher hashMapStringInfos::getHasher ( string key )
|
||
|
{
|
||
|
long searchKey = hashValue ( key );
|
||
|
long foundKey;
|
||
|
// vector<stringInfosHasher>::const_iterator l_hasher=m_hasher.begin();
|
||
|
for ( vector<stringInfosHasher>:: iterator l_hasher = m_hasher.begin() ; l_hasher != m_hasher.end() ; l_hasher++ ) {
|
||
|
foundKey = ( *l_hasher ).getHashKey();
|
||
|
if ( searchKey == foundKey ) {
|
||
|
return ( *l_hasher );
|
||
|
}
|
||
|
}
|
||
|
vector<string> tmp;
|
||
|
stringInfosHasher defaut ( 0, "", tmp );
|
||
|
return defaut;
|
||
|
}
|
||
|
vector<string> hashMapStringInfos::getValue ( string key )
|
||
|
{
|
||
|
long searchKey = hashValue ( key );
|
||
|
long foundKey;
|
||
|
vector<string> retour;
|
||
|
// vector<stringInfosHasher>::const_iterator l_hasher=m_hasher.begin();
|
||
|
for ( vector<stringInfosHasher>:: 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 retour;
|
||
|
}
|
||
|
// string hashMapStringInfos::searchValue ( string value )
|
||
|
// {
|
||
|
// // long searchKey=hashValue ( key );
|
||
|
// // long foundKey;
|
||
|
// vector<int> foundValue;
|
||
|
//
|
||
|
// // vector<stringInfosHasher>::const_iterator l_hasher=m_hasher.begin();
|
||
|
// for ( vector<stringInfosHasher>:: 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 hashMapStringInfos::setValue ( string key , vector<string> value )
|
||
|
{
|
||
|
long searchKey = hashValue ( key );
|
||
|
long foundKey;
|
||
|
// vector<stringInfosHasher>::const_iterator l_hasher=m_hasher.begin();
|
||
|
for ( vector<stringInfosHasher>:: 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 hashMapStringInfos::printHash()
|
||
|
{
|
||
|
for ( vector<stringInfosHasher>:: iterator l_hasher = m_hasher.begin() ; l_hasher != m_hasher.end() ; l_hasher++ ) {
|
||
|
// cout << ( *l_hasher ).getHashKey() <<" | "<< ( *l_hasher ).getKey() << " | " << ( *l_hasher ).getValue() << endl;
|
||
|
}
|
||
|
}
|
||
|
vector< stringInfosHasher > hashMapStringInfos::getHashMap()
|
||
|
{
|
||
|
return m_hasher;
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
// long hashValue(string key){}
|
||
|
|
||
|
}
|
||
|
|