1*1c78a5d6SAndrew Rist /************************************************************** 2cdf0e10cSrcweir * 3*1c78a5d6SAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one 4*1c78a5d6SAndrew Rist * or more contributor license agreements. See the NOTICE file 5*1c78a5d6SAndrew Rist * distributed with this work for additional information 6*1c78a5d6SAndrew Rist * regarding copyright ownership. The ASF licenses this file 7*1c78a5d6SAndrew Rist * to you under the Apache License, Version 2.0 (the 8*1c78a5d6SAndrew Rist * "License"); you may not use this file except in compliance 9*1c78a5d6SAndrew Rist * with the License. You may obtain a copy of the License at 10cdf0e10cSrcweir * 11*1c78a5d6SAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0 12cdf0e10cSrcweir * 13*1c78a5d6SAndrew Rist * Unless required by applicable law or agreed to in writing, 14*1c78a5d6SAndrew Rist * software distributed under the License is distributed on an 15*1c78a5d6SAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*1c78a5d6SAndrew Rist * KIND, either express or implied. See the License for the 17*1c78a5d6SAndrew Rist * specific language governing permissions and limitations 18*1c78a5d6SAndrew Rist * under the License. 19cdf0e10cSrcweir * 20*1c78a5d6SAndrew Rist *************************************************************/ 21*1c78a5d6SAndrew Rist 22*1c78a5d6SAndrew Rist 23cdf0e10cSrcweir 24cdf0e10cSrcweir #ifndef ARY_SCI_IMPL_HXX 25cdf0e10cSrcweir #define ARY_SCI_IMPL_HXX 26cdf0e10cSrcweir 27cdf0e10cSrcweir 28cdf0e10cSrcweir 29cdf0e10cSrcweir // USED SERVICES 30cdf0e10cSrcweir // BASE CLASSES 31cdf0e10cSrcweir #include <ary/stdconstiter.hxx> 32cdf0e10cSrcweir // COMPONENTS 33cdf0e10cSrcweir // PARAMETERS 34cdf0e10cSrcweir 35cdf0e10cSrcweir 36cdf0e10cSrcweir namespace ary 37cdf0e10cSrcweir { 38cdf0e10cSrcweir 39cdf0e10cSrcweir 40cdf0e10cSrcweir //************************* SCI_Vector **********************************// 41cdf0e10cSrcweir 42cdf0e10cSrcweir template <class ELEM> 43cdf0e10cSrcweir class SCI_Vector : public StdConstIterator<ELEM> 44cdf0e10cSrcweir { 45cdf0e10cSrcweir public: 46cdf0e10cSrcweir typedef std::vector<ELEM> source; 47cdf0e10cSrcweir typedef typename source::const_iterator source_iterator; 48cdf0e10cSrcweir 49cdf0e10cSrcweir SCI_Vector( 50cdf0e10cSrcweir const source & i_rSource ); 51cdf0e10cSrcweir virtual ~SCI_Vector(); 52cdf0e10cSrcweir 53cdf0e10cSrcweir private: 54cdf0e10cSrcweir // Interface StdConstIterator<>: 55cdf0e10cSrcweir virtual void do_Advance(); 56cdf0e10cSrcweir virtual const ELEM * 57cdf0e10cSrcweir inq_CurElement() const; 58cdf0e10cSrcweir virtual bool inq_IsSorted() const; 59cdf0e10cSrcweir 60cdf0e10cSrcweir // DATA 61cdf0e10cSrcweir source_iterator itRun; 62cdf0e10cSrcweir source_iterator itEnd; 63cdf0e10cSrcweir }; 64cdf0e10cSrcweir 65cdf0e10cSrcweir 66cdf0e10cSrcweir 67cdf0e10cSrcweir //************************* SCI_Map **********************************// 68cdf0e10cSrcweir 69cdf0e10cSrcweir template <class KEY, class VALUE> 70cdf0e10cSrcweir class SCI_Map : public StdConstIterator< typename std::map<KEY,VALUE>::value_type > 71cdf0e10cSrcweir { 72cdf0e10cSrcweir public: 73cdf0e10cSrcweir typedef std::map<KEY,VALUE> source; 74cdf0e10cSrcweir typedef typename source::const_iterator source_iterator; 75cdf0e10cSrcweir 76cdf0e10cSrcweir SCI_Map( 77cdf0e10cSrcweir const source & i_rSource ); 78cdf0e10cSrcweir virtual ~SCI_Map(); 79cdf0e10cSrcweir 80cdf0e10cSrcweir private: 81cdf0e10cSrcweir // Interface StdConstIterator<>: 82cdf0e10cSrcweir virtual void do_Advance(); 83cdf0e10cSrcweir virtual const typename std::map<KEY,VALUE>::value_type * 84cdf0e10cSrcweir inq_CurElement() const; 85cdf0e10cSrcweir virtual bool inq_IsSorted() const; 86cdf0e10cSrcweir 87cdf0e10cSrcweir // DATA 88cdf0e10cSrcweir source_iterator itRun; 89cdf0e10cSrcweir source_iterator itEnd; 90cdf0e10cSrcweir }; 91cdf0e10cSrcweir 92cdf0e10cSrcweir 93cdf0e10cSrcweir //************************* SCI_MultiMap **********************************// 94cdf0e10cSrcweir 95cdf0e10cSrcweir template <class KEY, class VALUE> 96cdf0e10cSrcweir class SCI_MultiMap : public StdConstIterator< typename std::multimap<KEY,VALUE>::value_type > 97cdf0e10cSrcweir { 98cdf0e10cSrcweir public: 99cdf0e10cSrcweir typedef std::multimap<KEY,VALUE> source; 100cdf0e10cSrcweir typedef typename source::const_iterator source_iterator; 101cdf0e10cSrcweir 102cdf0e10cSrcweir SCI_MultiMap( 103cdf0e10cSrcweir const source & i_rSource ); 104cdf0e10cSrcweir SCI_MultiMap( 105cdf0e10cSrcweir source_iterator i_begin, 106cdf0e10cSrcweir source_iterator i_end ); 107cdf0e10cSrcweir virtual ~SCI_MultiMap(); 108cdf0e10cSrcweir 109cdf0e10cSrcweir private: 110cdf0e10cSrcweir // Interface StdConstIterator<>: 111cdf0e10cSrcweir virtual void do_Advance(); 112cdf0e10cSrcweir virtual const typename std::multimap<KEY,VALUE>::value_type * 113cdf0e10cSrcweir inq_CurElement() const; 114cdf0e10cSrcweir virtual bool inq_IsSorted() const; 115cdf0e10cSrcweir 116cdf0e10cSrcweir // DATA 117cdf0e10cSrcweir source_iterator itRun; 118cdf0e10cSrcweir source_iterator itEnd; 119cdf0e10cSrcweir }; 120cdf0e10cSrcweir 121cdf0e10cSrcweir 122cdf0e10cSrcweir 123cdf0e10cSrcweir //************************* SCI_Set **********************************// 124cdf0e10cSrcweir 125cdf0e10cSrcweir 126cdf0e10cSrcweir template <class TYPES> 127cdf0e10cSrcweir class SCI_Set : public StdConstIterator<typename TYPES::element_type> 128cdf0e10cSrcweir { 129cdf0e10cSrcweir public: 130cdf0e10cSrcweir typedef typename TYPES::element_type element; 131cdf0e10cSrcweir typedef typename TYPES::sort_type sorter; 132cdf0e10cSrcweir typedef std::set<element, sorter> source; 133cdf0e10cSrcweir typedef typename source::const_iterator source_iterator; 134cdf0e10cSrcweir 135cdf0e10cSrcweir SCI_Set( 136cdf0e10cSrcweir const source & i_rSource ); 137cdf0e10cSrcweir virtual ~SCI_Set(); 138cdf0e10cSrcweir 139cdf0e10cSrcweir private: 140cdf0e10cSrcweir // Interface StdConstIterator<>: 141cdf0e10cSrcweir virtual void do_Advance(); 142cdf0e10cSrcweir virtual const element * 143cdf0e10cSrcweir inq_CurElement() const; 144cdf0e10cSrcweir virtual bool inq_IsSorted() const; 145cdf0e10cSrcweir 146cdf0e10cSrcweir // DATA 147cdf0e10cSrcweir source_iterator itRun; 148cdf0e10cSrcweir source_iterator itEnd; 149cdf0e10cSrcweir }; 150cdf0e10cSrcweir 151cdf0e10cSrcweir //************************* SCI_DataInMap **********************************// 152cdf0e10cSrcweir 153cdf0e10cSrcweir template <class KEY, class VALUE> 154cdf0e10cSrcweir class SCI_DataInMap : public StdConstIterator<VALUE> 155cdf0e10cSrcweir { 156cdf0e10cSrcweir public: 157cdf0e10cSrcweir typedef std::map<KEY,VALUE> source; 158cdf0e10cSrcweir typedef typename source::const_iterator source_iterator; 159cdf0e10cSrcweir 160cdf0e10cSrcweir SCI_DataInMap( 161cdf0e10cSrcweir const source & i_rSource ); 162cdf0e10cSrcweir virtual ~SCI_DataInMap(); 163cdf0e10cSrcweir 164cdf0e10cSrcweir private: 165cdf0e10cSrcweir // Interface StdConstIterator<>: 166cdf0e10cSrcweir virtual void do_Advance(); 167cdf0e10cSrcweir virtual const VALUE * 168cdf0e10cSrcweir inq_CurElement() const; 169cdf0e10cSrcweir virtual bool inq_IsSorted() const; 170cdf0e10cSrcweir 171cdf0e10cSrcweir // DATA 172cdf0e10cSrcweir source_iterator itRun; 173cdf0e10cSrcweir source_iterator itEnd; 174cdf0e10cSrcweir }; 175cdf0e10cSrcweir 176cdf0e10cSrcweir 177cdf0e10cSrcweir 178cdf0e10cSrcweir 179cdf0e10cSrcweir 180cdf0e10cSrcweir //********************************************************************// 181cdf0e10cSrcweir 182cdf0e10cSrcweir 183cdf0e10cSrcweir // IMPLEMENTATION 184cdf0e10cSrcweir 185cdf0e10cSrcweir template <class ELEM> 186cdf0e10cSrcweir SCI_Vector<ELEM>::SCI_Vector( const source & i_rSource ) 187cdf0e10cSrcweir : itRun(i_rSource.begin()), 188cdf0e10cSrcweir itEnd(i_rSource.end()) 189cdf0e10cSrcweir { 190cdf0e10cSrcweir } 191cdf0e10cSrcweir 192cdf0e10cSrcweir template <class ELEM> 193cdf0e10cSrcweir SCI_Vector<ELEM>::~SCI_Vector() 194cdf0e10cSrcweir { 195cdf0e10cSrcweir } 196cdf0e10cSrcweir 197cdf0e10cSrcweir 198cdf0e10cSrcweir template <class ELEM> 199cdf0e10cSrcweir void 200cdf0e10cSrcweir SCI_Vector<ELEM>::do_Advance() 201cdf0e10cSrcweir { 202cdf0e10cSrcweir if (itRun != itEnd) 203cdf0e10cSrcweir ++itRun; 204cdf0e10cSrcweir } 205cdf0e10cSrcweir 206cdf0e10cSrcweir template <class ELEM> 207cdf0e10cSrcweir const ELEM * 208cdf0e10cSrcweir SCI_Vector<ELEM>::inq_CurElement() const 209cdf0e10cSrcweir { 210cdf0e10cSrcweir if (itRun != itEnd) 211cdf0e10cSrcweir return &(*itRun); 212cdf0e10cSrcweir return 0; 213cdf0e10cSrcweir } 214cdf0e10cSrcweir 215cdf0e10cSrcweir template <class ELEM> 216cdf0e10cSrcweir bool 217cdf0e10cSrcweir SCI_Vector<ELEM>::inq_IsSorted() const 218cdf0e10cSrcweir { 219cdf0e10cSrcweir return false; 220cdf0e10cSrcweir } 221cdf0e10cSrcweir 222cdf0e10cSrcweir 223cdf0e10cSrcweir 224cdf0e10cSrcweir 225cdf0e10cSrcweir template <class KEY, class VALUE> 226cdf0e10cSrcweir SCI_Map<KEY,VALUE>::SCI_Map( const source & i_rSource ) 227cdf0e10cSrcweir : itRun(i_rSource.begin()), 228cdf0e10cSrcweir itEnd(i_rSource.end()) 229cdf0e10cSrcweir { 230cdf0e10cSrcweir } 231cdf0e10cSrcweir 232cdf0e10cSrcweir template <class KEY, class VALUE> 233cdf0e10cSrcweir SCI_Map<KEY,VALUE>::~SCI_Map() 234cdf0e10cSrcweir { 235cdf0e10cSrcweir } 236cdf0e10cSrcweir 237cdf0e10cSrcweir template <class KEY, class VALUE> 238cdf0e10cSrcweir void 239cdf0e10cSrcweir SCI_Map<KEY,VALUE>::do_Advance() 240cdf0e10cSrcweir { 241cdf0e10cSrcweir if (itRun != itEnd) 242cdf0e10cSrcweir ++itRun; 243cdf0e10cSrcweir } 244cdf0e10cSrcweir 245cdf0e10cSrcweir template <class KEY, class VALUE> 246cdf0e10cSrcweir const typename std::map<KEY,VALUE>::value_type * 247cdf0e10cSrcweir SCI_Map<KEY,VALUE>::inq_CurElement() const 248cdf0e10cSrcweir { 249cdf0e10cSrcweir if (itRun != itEnd) 250cdf0e10cSrcweir return &(*itRun); 251cdf0e10cSrcweir return 0; 252cdf0e10cSrcweir } 253cdf0e10cSrcweir 254cdf0e10cSrcweir 255cdf0e10cSrcweir template <class KEY, class VALUE> 256cdf0e10cSrcweir bool 257cdf0e10cSrcweir SCI_Map<KEY,VALUE>::inq_IsSorted() const 258cdf0e10cSrcweir { 259cdf0e10cSrcweir return true; 260cdf0e10cSrcweir } 261cdf0e10cSrcweir 262cdf0e10cSrcweir 263cdf0e10cSrcweir 264cdf0e10cSrcweir 265cdf0e10cSrcweir 266cdf0e10cSrcweir 267cdf0e10cSrcweir 268cdf0e10cSrcweir template <class KEY, class VALUE> 269cdf0e10cSrcweir SCI_MultiMap<KEY,VALUE>::SCI_MultiMap( const source & i_rSource ) 270cdf0e10cSrcweir : itRun(i_rSource.begin()), 271cdf0e10cSrcweir itEnd(i_rSource.end()) 272cdf0e10cSrcweir { 273cdf0e10cSrcweir } 274cdf0e10cSrcweir 275cdf0e10cSrcweir template <class KEY, class VALUE> 276cdf0e10cSrcweir SCI_MultiMap<KEY,VALUE>::SCI_MultiMap( source_iterator i_begin, 277cdf0e10cSrcweir source_iterator i_end ) 278cdf0e10cSrcweir : itRun(i_begin), 279cdf0e10cSrcweir itEnd(i_end) 280cdf0e10cSrcweir { 281cdf0e10cSrcweir } 282cdf0e10cSrcweir 283cdf0e10cSrcweir template <class KEY, class VALUE> 284cdf0e10cSrcweir SCI_MultiMap<KEY,VALUE>::~SCI_MultiMap() 285cdf0e10cSrcweir { 286cdf0e10cSrcweir } 287cdf0e10cSrcweir 288cdf0e10cSrcweir template <class KEY, class VALUE> 289cdf0e10cSrcweir void 290cdf0e10cSrcweir SCI_MultiMap<KEY,VALUE>::do_Advance() 291cdf0e10cSrcweir { 292cdf0e10cSrcweir if (itRun != itEnd) 293cdf0e10cSrcweir ++itRun; 294cdf0e10cSrcweir } 295cdf0e10cSrcweir 296cdf0e10cSrcweir template <class KEY, class VALUE> 297cdf0e10cSrcweir const typename std::multimap<KEY,VALUE>::value_type * 298cdf0e10cSrcweir SCI_MultiMap<KEY,VALUE>::inq_CurElement() const 299cdf0e10cSrcweir { 300cdf0e10cSrcweir if (itRun != itEnd) 301cdf0e10cSrcweir return &(*itRun); 302cdf0e10cSrcweir return 0; 303cdf0e10cSrcweir } 304cdf0e10cSrcweir 305cdf0e10cSrcweir 306cdf0e10cSrcweir template <class KEY, class VALUE> 307cdf0e10cSrcweir bool 308cdf0e10cSrcweir SCI_MultiMap<KEY,VALUE>::inq_IsSorted() const 309cdf0e10cSrcweir { 310cdf0e10cSrcweir return true; 311cdf0e10cSrcweir } 312cdf0e10cSrcweir 313cdf0e10cSrcweir 314cdf0e10cSrcweir 315cdf0e10cSrcweir 316cdf0e10cSrcweir 317cdf0e10cSrcweir 318cdf0e10cSrcweir 319cdf0e10cSrcweir 320cdf0e10cSrcweir template <class ELEM> 321cdf0e10cSrcweir SCI_Set<ELEM>::SCI_Set( const source & i_rSource ) 322cdf0e10cSrcweir : itRun(i_rSource.begin()), 323cdf0e10cSrcweir itEnd(i_rSource.end()) 324cdf0e10cSrcweir { 325cdf0e10cSrcweir } 326cdf0e10cSrcweir 327cdf0e10cSrcweir template <class ELEM> 328cdf0e10cSrcweir SCI_Set<ELEM>::~SCI_Set() 329cdf0e10cSrcweir { 330cdf0e10cSrcweir } 331cdf0e10cSrcweir 332cdf0e10cSrcweir 333cdf0e10cSrcweir template <class ELEM> 334cdf0e10cSrcweir void 335cdf0e10cSrcweir SCI_Set<ELEM>::do_Advance() 336cdf0e10cSrcweir { 337cdf0e10cSrcweir if (itRun != itEnd) 338cdf0e10cSrcweir ++itRun; 339cdf0e10cSrcweir } 340cdf0e10cSrcweir 341cdf0e10cSrcweir template <class ELEM> 342cdf0e10cSrcweir const typename SCI_Set<ELEM>::element * 343cdf0e10cSrcweir SCI_Set<ELEM>::inq_CurElement() const 344cdf0e10cSrcweir { 345cdf0e10cSrcweir if (itRun != itEnd) 346cdf0e10cSrcweir return &(*itRun); 347cdf0e10cSrcweir return 0; 348cdf0e10cSrcweir } 349cdf0e10cSrcweir 350cdf0e10cSrcweir template <class ELEM> 351cdf0e10cSrcweir bool 352cdf0e10cSrcweir SCI_Set<ELEM>::inq_IsSorted() const 353cdf0e10cSrcweir { 354cdf0e10cSrcweir return true; 355cdf0e10cSrcweir } 356cdf0e10cSrcweir 357cdf0e10cSrcweir 358cdf0e10cSrcweir 359cdf0e10cSrcweir 360cdf0e10cSrcweir 361cdf0e10cSrcweir 362cdf0e10cSrcweir 363cdf0e10cSrcweir template <class KEY, class VALUE> 364cdf0e10cSrcweir SCI_DataInMap<KEY,VALUE>::SCI_DataInMap( const source & i_rSource ) 365cdf0e10cSrcweir : itRun(i_rSource.begin()), 366cdf0e10cSrcweir itEnd(i_rSource.end()) 367cdf0e10cSrcweir { 368cdf0e10cSrcweir } 369cdf0e10cSrcweir 370cdf0e10cSrcweir template <class KEY, class VALUE> 371cdf0e10cSrcweir SCI_DataInMap<KEY,VALUE>::~SCI_DataInMap() 372cdf0e10cSrcweir { 373cdf0e10cSrcweir } 374cdf0e10cSrcweir 375cdf0e10cSrcweir template <class KEY, class VALUE> 376cdf0e10cSrcweir void 377cdf0e10cSrcweir SCI_DataInMap<KEY,VALUE>::do_Advance() 378cdf0e10cSrcweir { 379cdf0e10cSrcweir if (itRun != itEnd) 380cdf0e10cSrcweir ++itRun; 381cdf0e10cSrcweir } 382cdf0e10cSrcweir 383cdf0e10cSrcweir template <class KEY, class VALUE> 384cdf0e10cSrcweir const VALUE * 385cdf0e10cSrcweir SCI_DataInMap<KEY,VALUE>::inq_CurElement() const 386cdf0e10cSrcweir { 387cdf0e10cSrcweir if (itRun != itEnd) 388cdf0e10cSrcweir return &(*itRun).second; 389cdf0e10cSrcweir return 0; 390cdf0e10cSrcweir } 391cdf0e10cSrcweir 392cdf0e10cSrcweir 393cdf0e10cSrcweir template <class KEY, class VALUE> 394cdf0e10cSrcweir bool 395cdf0e10cSrcweir SCI_DataInMap<KEY,VALUE>::inq_IsSorted() const 396cdf0e10cSrcweir { 397cdf0e10cSrcweir return true; 398cdf0e10cSrcweir } 399cdf0e10cSrcweir 400cdf0e10cSrcweir 401cdf0e10cSrcweir 402cdf0e10cSrcweir 403cdf0e10cSrcweir 404cdf0e10cSrcweir 405cdf0e10cSrcweir 406cdf0e10cSrcweir } // namespace ary 407cdf0e10cSrcweir 408cdf0e10cSrcweir 409cdf0e10cSrcweir #endif 410