xref: /trunk/main/sw/qa/core/bigpointerarray-new.cxx (revision efeef26f)
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 // MARKER(update_precomp.py): autogen include statement, do not remove
25 #include "precompiled_sw.hxx"
26 
27 #include "bparr.hxx"
28 #include <algorithm>
29 
BigPtrArray()30 BigPtrArray::BigPtrArray()
31 {
32     //container_.reserve(1000);
33 }
34 
Count() const35 sal_uLong BigPtrArray::Count() const
36 {
37     return container_.size();
38 }
39 
Move(sal_uLong fromPos,sal_uLong toPos)40 void BigPtrArray::Move(sal_uLong fromPos, sal_uLong toPos)
41 {
42 	DBG_ASSERT(fromPos < container_.size() && toPos < container_.size(), "BigPtrArray.Move precondition violation");
43     Insert(container_[fromPos], toPos);
44     Remove(toPos < fromPos ? fromPos + 1 : fromPos, 1);
45 }
46 
ForEach(sal_uLong fromPos,sal_uLong toPos,FnForEach fn,void * pArgs)47 void BigPtrArray::ForEach(sal_uLong fromPos, sal_uLong toPos, FnForEach fn, void* pArgs)
48 {
49     DBG_ASSERT(fromPos < toPos && fromPos < container_.size() && toPos < container_.size(), "BigPtrArray::ForEach precondition violation");
50     Container_t::const_iterator iter = container_.begin() + fromPos;
51     Container_t::const_iterator iter_end = container_.begin() + toPos;
52     for (/*no init*/; iter != iter_end; ++iter)
53         fn(*iter, pArgs);
54 }
55 
ForEach(FnForEach fn,void * pArgs)56 void BigPtrArray::ForEach(FnForEach fn, void* pArgs)
57 {
58     Container_t::const_iterator iter = container_.begin();
59     Container_t::const_iterator iter_end = container_.end();
60     for ( /*no init*/; iter != iter_end; ++iter)
61         fn(*iter, pArgs);
62 }
63 
operator [](sal_uLong pos) const64 ElementPtr BigPtrArray::operator[](sal_uLong pos) const
65 {
66     DBG_ASSERT(pos < container_.size(), "BigPtrArray::operator[] precondition violation");
67     return container_[pos];
68 }
69 
Insert(const ElementPtr & rElem,sal_uLong pos)70 void BigPtrArray::Insert(const ElementPtr& rElem, sal_uLong pos)
71 {
72     DBG_ASSERT(pos <= container_.size(), "BigPtrArray::Insert precondition violation");
73 
74     rElem->pBigPtrArray_ = this;
75     rElem->pos_ = pos;
76 
77     if (pos == container_.size())
78         container_.push_back(rElem);
79     else
80     {
81         container_.insert(container_.begin() + pos, rElem);
82         FixElementIndizes(container_.begin(), container_.end());
83     }
84 }
85 
Remove(sal_uLong pos,sal_uLong n)86 void BigPtrArray::Remove( sal_uLong pos, sal_uLong n )
87 {
88     DBG_ASSERT((pos < container_.size()) && ((container_.begin() + pos + n) < container_.end()), "BigPtrArray.Remove precondition violation")
89     container_.erase(container_.begin() + pos, container_.begin() + pos + n);
90     FixElementIndizes(container_.begin(), container_.end());
91 }
92 
Replace(sal_uLong pos,const ElementPtr & rElem)93 void BigPtrArray::Replace(sal_uLong pos, const ElementPtr& rElem)
94 {
95     DBG_ASSERT(pos < container_.size(), "BigPtrArray::Replace precondition violation");
96     rElem->pBigPtrArray_ = this;
97     rElem->pos_ = pos;
98     container_[pos] = rElem;
99 }
100 
FixElementIndizes(Container_t::const_iterator begin,Container_t::const_iterator end) const101 void BigPtrArray::FixElementIndizes(Container_t::const_iterator begin, Container_t::const_iterator end) const
102 {
103     Container_t::const_iterator iter = begin;
104     for (int i = 0; iter != end; ++iter, i++)
105         (*iter)->pos_ = i;
106 }
107