xref: /AOO41X/main/svl/source/items/itemiter.cxx (revision ff0525f24f03981d56b7579b645949f111420994)
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_svl.hxx"
26 
27 #ifndef GCC
28 #endif
29 
30 #include <svl/itemiter.hxx>
31 #include <svl/itempool.hxx>
32 #include <svl/itemset.hxx>
33 
34 // STATIC DATA -----------------------------------------------------------
35 
36 DBG_NAME(SfxItemIter);
37 
38 
39 // --------------------------------------------------------------------------
40 
41 
42 SfxItemIter::SfxItemIter( const SfxItemSet& rItemSet )
43     : _rSet( rItemSet )
44 {
45     DBG_CTOR(SfxItemIter, 0);
46     DBG_ASSERTWARNING( _rSet.Count(), "es gibt gar keine Attribute" );
47 
48     if ( !_rSet._nCount )
49     {
50         _nStt = 1;
51         _nEnd = 0;
52     }
53     else
54     {
55         SfxItemArray ppFnd = _rSet._aItems;
56 
57         // suche das 1. gesetzte Item
58         for ( _nStt = 0; !*(ppFnd + _nStt ); ++_nStt )
59             ; // empty loop
60         if ( 1 < _rSet.Count() )
61             for( _nEnd = _rSet.TotalCount(); !*( ppFnd + --_nEnd);  )
62                 ; // empty loop
63         else
64             _nEnd = _nStt;
65     }
66 
67     _nAkt = _nStt;
68 }
69 
70 // --------------------------------------------------------------------------
71 
72 
73 SfxItemIter::~SfxItemIter()
74 {
75     DBG_DTOR(SfxItemIter, 0);
76 }
77 
78 // --------------------------------------------------------------------------
79 
80 
81 const SfxPoolItem* SfxItemIter::NextItem()
82 {
83     DBG_CHKTHIS(SfxItemIter, 0);
84     SfxItemArray ppFnd = _rSet._aItems;
85 
86     if( _nAkt < _nEnd )
87     {
88         do {
89             _nAkt++;
90         } while( _nAkt < _nEnd && !*(ppFnd + _nAkt ) );
91         return *(ppFnd+_nAkt);
92     }
93     return 0;
94 }
95 
96 // --------------------------------------------------------------------------
97 
98 
99 const SfxPoolItem* SfxItemIter::PrevItem()
100 {
101     DBG_CHKTHIS(SfxItemIter, 0);
102     SfxItemArray ppFnd = _rSet._aItems;
103 
104     if ( _nAkt > _nStt )
105     {
106         do {
107             --_nAkt;
108         } while( _nAkt && !*(ppFnd + _nAkt ));
109         return *(ppFnd+_nAkt);
110     }
111     return 0;
112 }
113 
114 
115 
116