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