xref: /aoo41x/main/sfx2/inc/sfx2/minstack.hxx (revision 353d8f4d)
1*353d8f4dSAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
3*353d8f4dSAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
4*353d8f4dSAndrew Rist  * or more contributor license agreements.  See the NOTICE file
5*353d8f4dSAndrew Rist  * distributed with this work for additional information
6*353d8f4dSAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
7*353d8f4dSAndrew Rist  * to you under the Apache License, Version 2.0 (the
8*353d8f4dSAndrew Rist  * "License"); you may not use this file except in compliance
9*353d8f4dSAndrew Rist  * with the License.  You may obtain a copy of the License at
10*353d8f4dSAndrew Rist  *
11*353d8f4dSAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12*353d8f4dSAndrew Rist  *
13*353d8f4dSAndrew Rist  * Unless required by applicable law or agreed to in writing,
14*353d8f4dSAndrew Rist  * software distributed under the License is distributed on an
15*353d8f4dSAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*353d8f4dSAndrew Rist  * KIND, either express or implied.  See the License for the
17*353d8f4dSAndrew Rist  * specific language governing permissions and limitations
18*353d8f4dSAndrew Rist  * under the License.
19*353d8f4dSAndrew Rist  *
20*353d8f4dSAndrew Rist  *************************************************************/
21*353d8f4dSAndrew Rist 
22*353d8f4dSAndrew Rist 
23cdf0e10cSrcweir #ifndef _SFXMINSTACK_HXX
24cdf0e10cSrcweir #define _SFXMINSTACK_HXX
25cdf0e10cSrcweir 
26cdf0e10cSrcweir //ASDBG #ifndef _SFXMINARRAY_HXX
27cdf0e10cSrcweir #include <sfx2/minarray.hxx>
28cdf0e10cSrcweir 
29cdf0e10cSrcweir #define DECL_OBJSTACK( ARR, T, nI, nG ) \
30cdf0e10cSrcweir DECL_OBJARRAY( ARR##arr_, T, nI, nG ); \
31cdf0e10cSrcweir class ARR: private ARR##arr_ \
32cdf0e10cSrcweir { \
33cdf0e10cSrcweir public: \
34cdf0e10cSrcweir 	ARR( sal_uInt8 nInitSize = nI, sal_uInt8 nGrowSize = nG ): \
35cdf0e10cSrcweir 		ARR##arr_( nInitSize, nGrowSize ) \
36cdf0e10cSrcweir     {} \
37cdf0e10cSrcweir \
38cdf0e10cSrcweir 	ARR( const ARR& rOrig ): \
39cdf0e10cSrcweir 		ARR##arr_( rOrig ) \
40cdf0e10cSrcweir     {} \
41cdf0e10cSrcweir \
42cdf0e10cSrcweir 	sal_uInt16		Count() const { return ARR##arr_::Count(); } \
43cdf0e10cSrcweir 	void		Push( const T& rElem ) { Append( rElem ); } \
44cdf0e10cSrcweir 	const T& Top( sal_uInt16 nLevel = 0 ) const \
45cdf0e10cSrcweir                 { return (*this)[Count()-nLevel-1]; } \
46cdf0e10cSrcweir 	const T& Bottom() const { return (*this)[0]; } \
47cdf0e10cSrcweir 	T		 Pop(); \
48cdf0e10cSrcweir 	void		Clear() { ARR##arr_::Clear(); } \
49cdf0e10cSrcweir 	sal_Bool		Contains( const T& rItem ) const \
50cdf0e10cSrcweir 				{ return ARR##arr_::Contains( rItem ); } \
51cdf0e10cSrcweir }
52cdf0e10cSrcweir 
53cdf0e10cSrcweir #define IMPL_OBJSTACK( ARR, T ) \
54cdf0e10cSrcweir IMPL_OBJARRAY( ARR##arr_, T ); \
55cdf0e10cSrcweir \
56cdf0e10cSrcweir T ARR::Pop() \
57cdf0e10cSrcweir {	T aRet = (*this)[Count()-1]; \
58cdf0e10cSrcweir     Remove( Count()-1, 1 ); \
59cdf0e10cSrcweir     return aRet; \
60cdf0e10cSrcweir }
61cdf0e10cSrcweir 
62cdf0e10cSrcweir #define DECL_PTRSTACK( ARR, T, nI, nG ) \
63cdf0e10cSrcweir DECL_PTRARRAY( ARR##arr_, T, nI, nG ) \
64cdf0e10cSrcweir class ARR: private ARR##arr_ \
65cdf0e10cSrcweir { \
66cdf0e10cSrcweir public: \
67cdf0e10cSrcweir 	ARR( sal_uInt8 nInitSize = nI, sal_uInt8 nGrowSize = nG ): \
68cdf0e10cSrcweir 		ARR##arr_( nInitSize, nGrowSize ) \
69cdf0e10cSrcweir     {} \
70cdf0e10cSrcweir \
71cdf0e10cSrcweir 	ARR( const ARR& rOrig ): \
72cdf0e10cSrcweir 		ARR##arr_( rOrig ) \
73cdf0e10cSrcweir     {} \
74cdf0e10cSrcweir \
75cdf0e10cSrcweir 	sal_uInt16		Count() const { return ARR##arr_::Count(); } \
76cdf0e10cSrcweir 	void		Push( T rElem ) { Append( rElem ); } \
77cdf0e10cSrcweir     sal_Bool        Replace( T rOldElem, T rNewElem ) \
78cdf0e10cSrcweir                 { return ARR##arr_::Replace( rOldElem, rNewElem ); } \
79cdf0e10cSrcweir 	T			Top( sal_uInt16 nLevel = 0 ) const \
80cdf0e10cSrcweir                 { return (*this)[Count()-nLevel-1]; } \
81cdf0e10cSrcweir 	T			Bottom() const { return (*this)[0]; } \
82cdf0e10cSrcweir 	T			Pop() \
83cdf0e10cSrcweir 				{	T aRet = (*this)[Count()-1]; \
84cdf0e10cSrcweir                     Remove( Count()-1, 1 ); \
85cdf0e10cSrcweir                     return aRet; \
86cdf0e10cSrcweir                 } \
87cdf0e10cSrcweir 	T*		 operator*() \
88cdf0e10cSrcweir                 { return &(*this)[Count()-1]; } \
89cdf0e10cSrcweir 	void		Clear() { ARR##arr_::Clear(); } \
90cdf0e10cSrcweir 	sal_Bool		Contains( const T pItem ) const \
91cdf0e10cSrcweir 				{ return ARR##arr_::Contains( pItem ); } \
92cdf0e10cSrcweir }
93cdf0e10cSrcweir 
94cdf0e10cSrcweir #endif
95cdf0e10cSrcweir 
96