// -*- c++ -*- #pragma once #include "ug_bitext.h" namespace sapt { template class imBitext : public Bitext { SPTR > myTx; SPTR > myT1; SPTR > myT2; SPTR > myI1; SPTR > myI2; static Moses::ThreadSafeCounter my_revision; public: size_t revision() const { return my_revision; } void open(std::string const base, std::string const L1, std::string L2); imBitext(SPTR const& V1, SPTR const& V2, size_t max_sample = 5000, size_t num_workers=4); imBitext(size_t max_sample = 5000, size_t num_workers=4); imBitext(imBitext const& other); // SPTR > // add(std::vector const& s1, std::vector const& s2, std::vector & a); SPTR > add(std::vector const& s1, std::vector const& s2, std::vector const& a) const; }; template Moses::ThreadSafeCounter imBitext::my_revision; template imBitext:: imBitext(size_t max_sample, size_t num_workers) : Bitext(max_sample, num_workers) { this->m_default_sample_size = max_sample; this->V1.reset(new TokenIndex()); this->V2.reset(new TokenIndex()); this->V1->setDynamic(true); this->V2->setDynamic(true); ++my_revision; } template imBitext:: imBitext(SPTR const& v1, SPTR const& v2, size_t max_sample, size_t num_workers) : Bitext(max_sample, num_workers) { // this->default_sample_size = max_sample; this->V1 = v1; this->V2 = v2; this->V1->setDynamic(true); this->V2->setDynamic(true); ++my_revision; } template imBitext:: imBitext(imBitext const& other) { this->myTx = other.myTx; this->myT1 = other.myT1; this->myT2 = other.myT2; this->myI1 = other.myI1; this->myI2 = other.myI2; this->Tx = this->myTx; this->T1 = this->myT1; this->T2 = this->myT2; this->I1 = this->myI1; this->I2 = this->myI2; this->V1 = other.V1; this->V2 = other.V2; this->m_default_sample_size = other.m_default_sample_size; this->m_num_workers = other.m_num_workers; ++my_revision; } template<> SPTR > > imBitext >:: add(std::vector const& s1, std::vector const& s2, std::vector const& aln) const; template SPTR > imBitext:: add(std::vector const& s1, std::vector const& s2, std::vector const& aln) const { throw "Not yet implemented"; } // What's up with this function???? UG template void imBitext:: open(std::string const base, std::string const L1, std::string L2) { mmTtrack& t1 = *reinterpret_cast*>(this->T1.get()); mmTtrack& t2 = *reinterpret_cast*>(this->T2.get()); mmTtrack& tx = *reinterpret_cast*>(this->Tx.get()); t1.open(base+L1+".mct"); t2.open(base+L2+".mct"); tx.open(base+L1+"-"+L2+".mam"); this->V1->open(base+L1+".tdx"); this->V1->iniReverseIndex(); this->V2->open(base+L2+".tdx"); this->V2->iniReverseIndex(); mmTSA& i1 = *reinterpret_cast*>(this->I1.get()); mmTSA& i2 = *reinterpret_cast*>(this->I2.get()); i1.open(base+L1+".sfa", this->T1); i2.open(base+L2+".sfa", this->T2); assert(this->T1->size() == this->T2->size()); } }