diff options
Diffstat (limited to 'ucb/source/inc/regexpmap.hxx')
-rw-r--r-- | ucb/source/inc/regexpmap.hxx | 188 |
1 files changed, 188 insertions, 0 deletions
diff --git a/ucb/source/inc/regexpmap.hxx b/ucb/source/inc/regexpmap.hxx new file mode 100644 index 000000000000..3bff4e619073 --- /dev/null +++ b/ucb/source/inc/regexpmap.hxx @@ -0,0 +1,188 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2000, 2010 Oracle and/or its affiliates. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org 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 version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +#ifndef _UCB_REGEXPMAP_HXX_ +#define _UCB_REGEXPMAP_HXX_ + +#include <rtl/ustring.hxx> +#include <sal/types.h> + +namespace ucb_impl { + +template< typename Val > class RegexpMap; +template< typename Val > class RegexpMapIter; + +//============================================================================ +template< typename Val > +class RegexpMapEntry +{ +public: + inline RegexpMapEntry(rtl::OUString const & rTheRegexp, + Val * pTheValue): + m_aRegexp(rTheRegexp), m_pValue(pTheValue) {} + + rtl::OUString getRegexp() const { return m_aRegexp; } + + Val const & getValue() const { return *m_pValue; } + + Val & getValue() { return *m_pValue; } + +private: + rtl::OUString m_aRegexp; + Val * m_pValue; +}; + +//============================================================================ +template< typename Val > class RegexpMapIterImpl; + // MSC doesn't like this to be a private RegexpMapConstIter member + // class... + +template< typename Val > +class RegexpMapConstIter +{ + friend class RegexpMap< Val >; // to access m_pImpl, ctor + friend class RegexpMapIter< Val >; // to access m_pImpl, ctor + +public: + RegexpMapConstIter(); + + RegexpMapConstIter(RegexpMapConstIter const & rOther); + + ~RegexpMapConstIter(); + + RegexpMapConstIter & operator =(RegexpMapConstIter const & rOther); + + RegexpMapConstIter & operator ++(); + + RegexpMapConstIter operator ++(int); + + RegexpMapEntry< Val > const & operator *() const; + + RegexpMapEntry< Val > const * operator ->() const; + + bool equals(RegexpMapConstIter const & rOther) const; + // for free operator ==(), operator !=() + +private: + RegexpMapIterImpl< Val > * m_pImpl; + + RegexpMapConstIter(RegexpMapIterImpl< Val > * pTheImpl); +}; + +//============================================================================ +template< typename Val > +class RegexpMapIter: public RegexpMapConstIter< Val > +{ + friend class RegexpMap< Val >; // to access ctor + +public: + RegexpMapIter() {} + + RegexpMapIter & operator ++(); + + RegexpMapIter operator ++(int); + + RegexpMapEntry< Val > & operator *(); + + RegexpMapEntry< Val > const & operator *() const; + + RegexpMapEntry< Val > * operator ->(); + + RegexpMapEntry< Val > const * operator ->() const; + +private: + RegexpMapIter(RegexpMapIterImpl< Val > * pTheImpl); +}; + +//============================================================================ +template< typename Val > struct RegexpMapImpl; + // MSC doesn't like this to be a RegexpMap member class... + +template< typename Val > +class RegexpMap +{ +public: + typedef sal_uInt32 size_type; + typedef RegexpMapIter< Val > iterator; + typedef RegexpMapConstIter< Val > const_iterator; + + RegexpMap(); + + RegexpMap(RegexpMap const & rOther); + + ~RegexpMap(); + + RegexpMap & operator =(RegexpMap const & rOther); + + bool add(rtl::OUString const & rKey, Val const & rValue, bool bOverwrite, + rtl::OUString * pReverse = 0); + // throws com::sun::star::lang::IllegalArgumentException + + iterator find(rtl::OUString const & rKey, rtl::OUString * pReverse = 0); + // throws com::sun::star::lang::IllegalArgumentException + + void erase(iterator const & rPos); + + iterator begin(); + + const_iterator begin() const; + + iterator end(); + + const_iterator end() const; + + bool empty() const; + + size_type size() const; + + Val const * map(rtl::OUString const & rString, + rtl::OUString * pTranslation = 0, bool * pTranslated = 0) + const; + +private: + RegexpMapImpl< Val > * m_pImpl; +}; + +} + +//============================================================================ +template< typename Val > +inline bool operator ==(ucb_impl::RegexpMapConstIter< Val > const & rIter1, + ucb_impl::RegexpMapConstIter< Val > const & rIter2) +{ + return rIter1.equals(rIter2); +} + +template< typename Val > +inline bool operator !=(ucb_impl::RegexpMapConstIter< Val > const & rIter1, + ucb_impl::RegexpMapConstIter< Val > const & rIter2) +{ + return !rIter1.equals(rIter2); +} + +#endif // _UCB_REGEXPMAP_HXX_ + |