Mercurial > hg > vamp-build-and-test
diff DEPENDENCIES/generic/include/boost/locale/boundary/boundary_point.hpp @ 16:2665513ce2d3
Add boost headers
author | Chris Cannam |
---|---|
date | Tue, 05 Aug 2014 11:11:38 +0100 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/DEPENDENCIES/generic/include/boost/locale/boundary/boundary_point.hpp Tue Aug 05 11:11:38 2014 +0100 @@ -0,0 +1,183 @@ +// +// Copyright (c) 2009-2011 Artyom Beilis (Tonkikh) +// +// Distributed under the Boost Software License, Version 1.0. (See +// accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +#ifndef BOOST_LOCALE_BOUNDARY_BOUNDARY_POINT_HPP_INCLUDED +#define BOOST_LOCALE_BOUNDARY_BOUNDARY_POINT_HPP_INCLUDED + +#include <boost/locale/boundary/types.hpp> + +namespace boost { +namespace locale { +namespace boundary { + + /// + /// \addtogroup boundary + /// @{ + + /// + /// \brief This class represents a boundary point in the text. + /// + /// It represents a pair - an iterator and a rule that defines this + /// point. + /// + /// This type of object is dereference by the iterators of boundary_point_index. Using a rule() + /// member function you can get the reason why this specific boundary point was selected. + /// + /// For example, When you use a sentence boundary analysis, the (rule() & \ref sentence_term) != 0 means + /// that this boundary point was selected because a sentence terminator (like .?!) was spotted + /// and the (rule() & \ref sentence_sep)!=0 means that a separator like line feed or carriage + /// return was observed. + /// + /// \note + /// + /// - The beginning of analyzed range is always considered a boundary point and its rule is always 0. + /// - when using a word boundary analysis the returned rule relates to a chunk of text preceding + /// this point. + /// + /// \see + /// + /// - \ref boundary_point_index + /// - \ref segment + /// - \ref segment_index + /// + template<typename IteratorType> + class boundary_point { + public: + /// + /// The type of the base iterator that iterates the original text + /// + typedef IteratorType iterator_type; + + /// + /// Empty default constructor + /// + boundary_point() : rule_(0) {} + + /// + /// Create a new boundary_point using iterator \p and a rule \a r + /// + boundary_point(iterator_type p,rule_type r) : + iterator_(p), + rule_(r) + { + } + /// + /// Set an new iterator value \a i + /// + void iterator(iterator_type i) + { + iterator_ = i; + } + /// + /// Set an new rule value \a r + /// + void rule(rule_type r) + { + rule_ = r; + } + /// + /// Fetch an iterator + /// + iterator_type iterator() const + { + return iterator_; + } + /// + /// Fetch a rule + /// + rule_type rule() const + { + return rule_; + } + /// + /// Check if two boundary points are the same + /// + bool operator==(boundary_point const &other) const + { + return iterator_ == other.iterator_ && rule_ = other.rule_; + } + /// + /// Check if two boundary points are different + /// + bool operator!=(boundary_point const &other) const + { + return !(*this==other); + } + /// + /// Check if the boundary point points to same location as an iterator \a other + /// + bool operator==(iterator_type const &other) const + { + return iterator_ == other; + } + /// + /// Check if the boundary point points to different location from an iterator \a other + /// + bool operator!=(iterator_type const &other) const + { + return iterator_ != other; + } + + /// + /// Automatic cast to the iterator it represents + /// + operator iterator_type ()const + { + return iterator_; + } + + private: + iterator_type iterator_; + rule_type rule_; + + }; + /// + /// Check if the boundary point \a r points to same location as an iterator \a l + /// + template<typename BaseIterator> + bool operator==(BaseIterator const &l,boundary_point<BaseIterator> const &r) + { + return r==l; + } + /// + /// Check if the boundary point \a r points to different location from an iterator \a l + /// + template<typename BaseIterator> + bool operator!=(BaseIterator const &l,boundary_point<BaseIterator> const &r) + { + return r!=l; + } + + /// @} + + typedef boundary_point<std::string::const_iterator> sboundary_point; ///< convenience typedef + typedef boundary_point<std::wstring::const_iterator> wsboundary_point; ///< convenience typedef + #ifdef BOOST_HAS_CHAR16_T + typedef boundary_point<std::u16string::const_iterator> u16sboundary_point;///< convenience typedef + #endif + #ifdef BOOST_HAS_CHAR32_T + typedef boundary_point<std::u32string::const_iterator> u32sboundary_point;///< convenience typedef + #endif + + typedef boundary_point<char const *> cboundary_point; ///< convenience typedef + typedef boundary_point<wchar_t const *> wcboundary_point; ///< convenience typedef + #ifdef BOOST_HAS_CHAR16_T + typedef boundary_point<char16_t const *> u16cboundary_point; ///< convenience typedef + #endif + #ifdef BOOST_HAS_CHAR32_T + typedef boundary_point<char32_t const *> u32cboundary_point; ///< convenience typedef + #endif + + +} // boundary +} // locale +} // boost + + +#endif + +// vim: tabstop=4 expandtab shiftwidth=4 softtabstop=4