1*efeef26fSAndrew Rist /************************************************************** 2cdf0e10cSrcweir * 3*efeef26fSAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one 4*efeef26fSAndrew Rist * or more contributor license agreements. See the NOTICE file 5*efeef26fSAndrew Rist * distributed with this work for additional information 6*efeef26fSAndrew Rist * regarding copyright ownership. The ASF licenses this file 7*efeef26fSAndrew Rist * to you under the Apache License, Version 2.0 (the 8*efeef26fSAndrew Rist * "License"); you may not use this file except in compliance 9*efeef26fSAndrew Rist * with the License. You may obtain a copy of the License at 10cdf0e10cSrcweir * 11*efeef26fSAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0 12cdf0e10cSrcweir * 13*efeef26fSAndrew Rist * Unless required by applicable law or agreed to in writing, 14*efeef26fSAndrew Rist * software distributed under the License is distributed on an 15*efeef26fSAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*efeef26fSAndrew Rist * KIND, either express or implied. See the License for the 17*efeef26fSAndrew Rist * specific language governing permissions and limitations 18*efeef26fSAndrew Rist * under the License. 19cdf0e10cSrcweir * 20*efeef26fSAndrew Rist *************************************************************/ 21*efeef26fSAndrew Rist 22*efeef26fSAndrew Rist 23cdf0e10cSrcweir 24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove 25cdf0e10cSrcweir #include "precompiled_sw.hxx" 26cdf0e10cSrcweir 27cdf0e10cSrcweir #include "bparr.hxx" 28cdf0e10cSrcweir #include <algorithm> 29cdf0e10cSrcweir 30cdf0e10cSrcweir BigPtrArray::BigPtrArray() 31cdf0e10cSrcweir { 32cdf0e10cSrcweir //container_.reserve(1000); 33cdf0e10cSrcweir } 34cdf0e10cSrcweir 35cdf0e10cSrcweir sal_uLong BigPtrArray::Count() const 36cdf0e10cSrcweir { 37cdf0e10cSrcweir return container_.size(); 38cdf0e10cSrcweir } 39cdf0e10cSrcweir 40cdf0e10cSrcweir void BigPtrArray::Move(sal_uLong fromPos, sal_uLong toPos) 41cdf0e10cSrcweir { 42cdf0e10cSrcweir DBG_ASSERT(fromPos < container_.size() && toPos < container_.size(), "BigPtrArray.Move precondition violation"); 43cdf0e10cSrcweir Insert(container_[fromPos], toPos); 44cdf0e10cSrcweir Remove(toPos < fromPos ? fromPos + 1 : fromPos, 1); 45cdf0e10cSrcweir } 46cdf0e10cSrcweir 47cdf0e10cSrcweir void BigPtrArray::ForEach(sal_uLong fromPos, sal_uLong toPos, FnForEach fn, void* pArgs) 48cdf0e10cSrcweir { 49cdf0e10cSrcweir DBG_ASSERT(fromPos < toPos && fromPos < container_.size() && toPos < container_.size(), "BigPtrArray::ForEach precondition violation"); 50cdf0e10cSrcweir Container_t::const_iterator iter = container_.begin() + fromPos; 51cdf0e10cSrcweir Container_t::const_iterator iter_end = container_.begin() + toPos; 52cdf0e10cSrcweir for (/*no init*/; iter != iter_end; ++iter) 53cdf0e10cSrcweir fn(*iter, pArgs); 54cdf0e10cSrcweir } 55cdf0e10cSrcweir 56cdf0e10cSrcweir void BigPtrArray::ForEach(FnForEach fn, void* pArgs) 57cdf0e10cSrcweir { 58cdf0e10cSrcweir Container_t::const_iterator iter = container_.begin(); 59cdf0e10cSrcweir Container_t::const_iterator iter_end = container_.end(); 60cdf0e10cSrcweir for ( /*no init*/; iter != iter_end; ++iter) 61cdf0e10cSrcweir fn(*iter, pArgs); 62cdf0e10cSrcweir } 63cdf0e10cSrcweir 64cdf0e10cSrcweir ElementPtr BigPtrArray::operator[](sal_uLong pos) const 65cdf0e10cSrcweir { 66cdf0e10cSrcweir DBG_ASSERT(pos < container_.size(), "BigPtrArray::operator[] precondition violation"); 67cdf0e10cSrcweir return container_[pos]; 68cdf0e10cSrcweir } 69cdf0e10cSrcweir 70cdf0e10cSrcweir void BigPtrArray::Insert(const ElementPtr& rElem, sal_uLong pos) 71cdf0e10cSrcweir { 72cdf0e10cSrcweir DBG_ASSERT(pos <= container_.size(), "BigPtrArray::Insert precondition violation"); 73cdf0e10cSrcweir 74cdf0e10cSrcweir rElem->pBigPtrArray_ = this; 75cdf0e10cSrcweir rElem->pos_ = pos; 76cdf0e10cSrcweir 77cdf0e10cSrcweir if (pos == container_.size()) 78cdf0e10cSrcweir container_.push_back(rElem); 79cdf0e10cSrcweir else 80cdf0e10cSrcweir { 81cdf0e10cSrcweir container_.insert(container_.begin() + pos, rElem); 82cdf0e10cSrcweir FixElementIndizes(container_.begin(), container_.end()); 83cdf0e10cSrcweir } 84cdf0e10cSrcweir } 85cdf0e10cSrcweir 86cdf0e10cSrcweir void BigPtrArray::Remove( sal_uLong pos, sal_uLong n ) 87cdf0e10cSrcweir { 88cdf0e10cSrcweir DBG_ASSERT((pos < container_.size()) && ((container_.begin() + pos + n) < container_.end()), "BigPtrArray.Remove precondition violation") 89cdf0e10cSrcweir container_.erase(container_.begin() + pos, container_.begin() + pos + n); 90cdf0e10cSrcweir FixElementIndizes(container_.begin(), container_.end()); 91cdf0e10cSrcweir } 92cdf0e10cSrcweir 93cdf0e10cSrcweir void BigPtrArray::Replace(sal_uLong pos, const ElementPtr& rElem) 94cdf0e10cSrcweir { 95cdf0e10cSrcweir DBG_ASSERT(pos < container_.size(), "BigPtrArray::Replace precondition violation"); 96cdf0e10cSrcweir rElem->pBigPtrArray_ = this; 97cdf0e10cSrcweir rElem->pos_ = pos; 98cdf0e10cSrcweir container_[pos] = rElem; 99cdf0e10cSrcweir } 100cdf0e10cSrcweir 101cdf0e10cSrcweir void BigPtrArray::FixElementIndizes(Container_t::const_iterator begin, Container_t::const_iterator end) const 102cdf0e10cSrcweir { 103cdf0e10cSrcweir Container_t::const_iterator iter = begin; 104cdf0e10cSrcweir for (int i = 0; iter != end; ++iter, i++) 105cdf0e10cSrcweir (*iter)->pos_ = i; 106cdf0e10cSrcweir } 107