mirror of
https://github.com/moses-smt/mosesdecoder.git
synced 2024-08-17 07:20:48 +03:00
minor leak showing for lex reordering. Just refactor
This commit is contained in:
parent
4ee4e07c1b
commit
6a9eb6c848
@ -5,6 +5,8 @@
|
|||||||
#include <boost/thread.hpp>
|
#include <boost/thread.hpp>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
namespace Moses
|
namespace Moses
|
||||||
{
|
{
|
||||||
void GenericCandidate::readBin(FILE* f)
|
void GenericCandidate::readBin(FILE* f)
|
||||||
@ -62,6 +64,17 @@ void Candidates::readBin(FILE* f)
|
|||||||
|
|
||||||
const LabelId PrefixTreeMap::MagicWord = std::numeric_limits<LabelId>::max() - 1;
|
const LabelId PrefixTreeMap::MagicWord = std::numeric_limits<LabelId>::max() - 1;
|
||||||
|
|
||||||
|
//////////////////////////////////////////////////////////////////
|
||||||
|
PrefixTreeMap::~PrefixTreeMap() {
|
||||||
|
if(m_FileSrc) {
|
||||||
|
fClose(m_FileSrc);
|
||||||
|
}
|
||||||
|
if(m_FileTgt) {
|
||||||
|
fClose(m_FileTgt);
|
||||||
|
}
|
||||||
|
FreeMemory();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void PrefixTreeMap::FreeMemory()
|
void PrefixTreeMap::FreeMemory()
|
||||||
{
|
{
|
||||||
@ -75,20 +88,21 @@ void PrefixTreeMap::FreeMemory()
|
|||||||
m_PtrPool.reset();
|
m_PtrPool.reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
static WordVoc* ReadVoc(const std::string& filename)
|
WordVoc &ReadVoc(std::map<std::string,WordVoc> &vocs, const std::string& filename)
|
||||||
{
|
{
|
||||||
static std::map<std::string,WordVoc*> vocs;
|
|
||||||
#ifdef WITH_THREADS
|
#ifdef WITH_THREADS
|
||||||
boost::mutex mutex;
|
boost::mutex mutex;
|
||||||
boost::mutex::scoped_lock lock(mutex);
|
boost::mutex::scoped_lock lock(mutex);
|
||||||
#endif
|
#endif
|
||||||
std::map<std::string,WordVoc*>::iterator vi = vocs.find(filename);
|
std::map<std::string,WordVoc>::iterator vi = vocs.find(filename);
|
||||||
if (vi == vocs.end()) {
|
if (vi == vocs.end()) {
|
||||||
WordVoc* voc = new WordVoc();
|
WordVoc &voc = vocs[filename];
|
||||||
voc->Read(filename);
|
voc.Read(filename);
|
||||||
vocs[filename] = voc;
|
return voc;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return vi->second;
|
||||||
}
|
}
|
||||||
return vocs[filename];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int PrefixTreeMap::Read(const std::string& fileNameStem, int numVocs)
|
int PrefixTreeMap::Read(const std::string& fileNameStem, int numVocs)
|
||||||
@ -133,7 +147,7 @@ int PrefixTreeMap::Read(const std::string& fileNameStem, int numVocs)
|
|||||||
sprintf(num, "%d", i);
|
sprintf(num, "%d", i);
|
||||||
//m_Voc[i] = new WordVoc();
|
//m_Voc[i] = new WordVoc();
|
||||||
//m_Voc[i]->Read(ifv + num);
|
//m_Voc[i]->Read(ifv + num);
|
||||||
m_Voc[i] = ReadVoc(ifv + num);
|
m_Voc[i] = &ReadVoc(m_vocs, ifv + num);
|
||||||
}
|
}
|
||||||
|
|
||||||
TRACE_ERR("binary file loaded, default OFF_T: "<< PTF::getDefault()<<"\n");
|
TRACE_ERR("binary file loaded, default OFF_T: "<< PTF::getDefault()<<"\n");
|
||||||
|
@ -99,18 +99,11 @@ public:
|
|||||||
PrefixTreeMap() : m_FileSrc(0), m_FileTgt(0) {
|
PrefixTreeMap() : m_FileSrc(0), m_FileTgt(0) {
|
||||||
PTF::setDefault(InvalidOffT);
|
PTF::setDefault(InvalidOffT);
|
||||||
}
|
}
|
||||||
~PrefixTreeMap() {
|
~PrefixTreeMap();
|
||||||
if(m_FileSrc) {
|
|
||||||
fClose(m_FileSrc);
|
|
||||||
}
|
|
||||||
if(m_FileTgt) {
|
|
||||||
fClose(m_FileTgt);
|
|
||||||
}
|
|
||||||
FreeMemory();
|
|
||||||
}
|
|
||||||
public:
|
public:
|
||||||
static const LabelId MagicWord;
|
static const LabelId MagicWord;
|
||||||
public:
|
|
||||||
void FreeMemory();
|
void FreeMemory();
|
||||||
|
|
||||||
int Read(const std::string& fileNameStem, int numVocs = -1);
|
int Read(const std::string& fileNameStem, int numVocs = -1);
|
||||||
@ -135,6 +128,7 @@ private:
|
|||||||
|
|
||||||
std::vector<WordVoc*> m_Voc;
|
std::vector<WordVoc*> m_Voc;
|
||||||
ObjectPool<PPimp> m_PtrPool;
|
ObjectPool<PPimp> m_PtrPool;
|
||||||
|
std::map<std::string,WordVoc> m_vocs;
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user