xref: /trunk/main/ucb/source/inc/regexpmap.hxx (revision 6df1ea1f)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 #ifndef _UCB_REGEXPMAP_HXX_
25 #define _UCB_REGEXPMAP_HXX_
26 
27 #include <rtl/ustring.hxx>
28 #include <sal/types.h>
29 
30 namespace ucb_impl {
31 
32 template< typename Val > class RegexpMap;
33 template< typename Val > class RegexpMapIter;
34 
35 //============================================================================
36 template< typename Val >
37 class RegexpMapEntry
38 {
39 public:
RegexpMapEntry(rtl::OUString const & rTheRegexp,Val * pTheValue)40 	inline RegexpMapEntry(rtl::OUString const & rTheRegexp,
41 						  Val * pTheValue):
42 		m_aRegexp(rTheRegexp), m_pValue(pTheValue) {}
43 
getRegexp() const44 	rtl::OUString getRegexp() const { return m_aRegexp; }
45 
getValue() const46 	Val const & getValue() const { return *m_pValue; }
47 
getValue()48 	Val & getValue() { return *m_pValue; }
49 
50 private:
51 	rtl::OUString m_aRegexp;
52 	Val * m_pValue;
53 };
54 
55 //============================================================================
56 template< typename Val > class RegexpMapIterImpl;
57 	// MSC doesn't like this to be a private RegexpMapConstIter member
58 	// class...
59 
60 template< typename Val >
61 class RegexpMapConstIter
62 {
63 	friend class RegexpMap< Val >; // to access m_pImpl, ctor
64 	friend class RegexpMapIter< Val >; // to access m_pImpl, ctor
65 
66 public:
67 	RegexpMapConstIter();
68 
69 	RegexpMapConstIter(RegexpMapConstIter const & rOther);
70 
71 	~RegexpMapConstIter();
72 
73 	RegexpMapConstIter & operator =(RegexpMapConstIter const & rOther);
74 
75 	RegexpMapConstIter & operator ++();
76 
77 	RegexpMapConstIter operator ++(int);
78 
79 	RegexpMapEntry< Val > const & operator *() const;
80 
81 	RegexpMapEntry< Val > const * operator ->() const;
82 
83 	bool equals(RegexpMapConstIter const & rOther) const;
84 		// for free operator ==(), operator !=()
85 
86 private:
87 	RegexpMapIterImpl< Val > * m_pImpl;
88 
89 	RegexpMapConstIter(RegexpMapIterImpl< Val > * pTheImpl);
90 };
91 
92 //============================================================================
93 template< typename Val >
94 class RegexpMapIter: public RegexpMapConstIter< Val >
95 {
96 	friend class RegexpMap< Val >; // to access ctor
97 
98 public:
RegexpMapIter()99 	RegexpMapIter() {}
100 
101 	RegexpMapIter & operator ++();
102 
103 	RegexpMapIter operator ++(int);
104 
105 	RegexpMapEntry< Val > & operator *();
106 
107 	RegexpMapEntry< Val > const & operator *() const;
108 
109 	RegexpMapEntry< Val > * operator ->();
110 
111 	RegexpMapEntry< Val > const * operator ->() const;
112 
113 private:
114 	RegexpMapIter(RegexpMapIterImpl< Val > * pTheImpl);
115 };
116 
117 //============================================================================
118 template< typename Val > struct RegexpMapImpl;
119 	// MSC doesn't like this to be a RegexpMap member class...
120 
121 template< typename Val >
122 class RegexpMap
123 {
124 public:
125 	typedef sal_uInt32 size_type;
126 	typedef RegexpMapIter< Val > iterator;
127 	typedef RegexpMapConstIter< Val > const_iterator;
128 
129 	RegexpMap();
130 
131 	RegexpMap(RegexpMap const & rOther);
132 
133 	~RegexpMap();
134 
135 	RegexpMap & operator =(RegexpMap const & rOther);
136 
137 	bool add(rtl::OUString const & rKey, Val const & rValue, bool bOverwrite,
138 			 rtl::OUString * pReverse = 0);
139 		// throws com::sun::star::lang::IllegalArgumentException
140 
141 	iterator find(rtl::OUString const & rKey, rtl::OUString * pReverse = 0);
142 		// throws com::sun::star::lang::IllegalArgumentException
143 
144 	void erase(iterator const & rPos);
145 
146 	iterator begin();
147 
148 	const_iterator begin() const;
149 
150 	iterator end();
151 
152 	const_iterator end() const;
153 
154 	bool empty() const;
155 
156 	size_type size() const;
157 
158 	Val const * map(rtl::OUString const & rString,
159 					rtl::OUString * pTranslation = 0, bool * pTranslated = 0)
160 		const;
161 
162 private:
163 	RegexpMapImpl< Val > * m_pImpl;
164 };
165 
166 }
167 
168 //============================================================================
169 template< typename Val >
operator ==(ucb_impl::RegexpMapConstIter<Val> const & rIter1,ucb_impl::RegexpMapConstIter<Val> const & rIter2)170 inline bool operator ==(ucb_impl::RegexpMapConstIter< Val > const & rIter1,
171 						ucb_impl::RegexpMapConstIter< Val > const & rIter2)
172 {
173 	return rIter1.equals(rIter2);
174 }
175 
176 template< typename Val >
operator !=(ucb_impl::RegexpMapConstIter<Val> const & rIter1,ucb_impl::RegexpMapConstIter<Val> const & rIter2)177 inline bool operator !=(ucb_impl::RegexpMapConstIter< Val > const & rIter1,
178 						ucb_impl::RegexpMapConstIter< Val > const & rIter2)
179 {
180 	return !rIter1.equals(rIter2);
181 }
182 
183 #endif // _UCB_REGEXPMAP_HXX_
184 
185