diff options
Diffstat (limited to 'contrib/moses2/AlignmentInfoCollection.cpp')
-rw-r--r-- | contrib/moses2/AlignmentInfoCollection.cpp | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/contrib/moses2/AlignmentInfoCollection.cpp b/contrib/moses2/AlignmentInfoCollection.cpp new file mode 100644 index 000000000..a6116400c --- /dev/null +++ b/contrib/moses2/AlignmentInfoCollection.cpp @@ -0,0 +1,62 @@ +/*********************************************************************** + Moses - statistical machine translation system + Copyright (C) 2006-2011 University of Edinburgh + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +***********************************************************************/ + +#include "AlignmentInfoCollection.h" + +using namespace std; + +namespace Moses2 +{ + +AlignmentInfoCollection AlignmentInfoCollection::s_instance; + +AlignmentInfoCollection::AlignmentInfoCollection() +{ + std::set<std::pair<size_t,size_t> > pairs; + m_emptyAlignmentInfo = Add(pairs); +} + +AlignmentInfoCollection::~AlignmentInfoCollection() +{} + +const AlignmentInfo &AlignmentInfoCollection::GetEmptyAlignmentInfo() const +{ + return *m_emptyAlignmentInfo; +} + +AlignmentInfo const * +AlignmentInfoCollection:: +Add(AlignmentInfo const& ainfo) +{ +#ifdef WITH_THREADS + { + boost::shared_lock<boost::shared_mutex> read_lock(m_accessLock); + AlignmentInfoSet::const_iterator i = m_collection.find(ainfo); + if (i != m_collection.end()) + return &*i; + } + boost::unique_lock<boost::shared_mutex> lock(m_accessLock); +#endif + std::pair<AlignmentInfoSet::iterator, bool> ret = m_collection.insert(ainfo); + return &(*ret.first); +} + + + +} |