/************************************************************** * * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. * *************************************************************/ #ifndef ARY_SCI_IMPL_HXX #define ARY_SCI_IMPL_HXX // USED SERVICES // BASE CLASSES #include // COMPONENTS // PARAMETERS namespace ary { //************************* SCI_Vector **********************************// template class SCI_Vector : public StdConstIterator { public: typedef std::vector source; typedef typename source::const_iterator source_iterator; SCI_Vector( const source & i_rSource ); virtual ~SCI_Vector(); private: // Interface StdConstIterator<>: virtual void do_Advance(); virtual const ELEM * inq_CurElement() const; virtual bool inq_IsSorted() const; // DATA source_iterator itRun; source_iterator itEnd; }; //************************* SCI_Map **********************************// template class SCI_Map : public StdConstIterator< typename std::map::value_type > { public: typedef std::map source; typedef typename source::const_iterator source_iterator; SCI_Map( const source & i_rSource ); virtual ~SCI_Map(); private: // Interface StdConstIterator<>: virtual void do_Advance(); virtual const typename std::map::value_type * inq_CurElement() const; virtual bool inq_IsSorted() const; // DATA source_iterator itRun; source_iterator itEnd; }; //************************* SCI_MultiMap **********************************// template class SCI_MultiMap : public StdConstIterator< typename std::multimap::value_type > { public: typedef std::multimap source; typedef typename source::const_iterator source_iterator; SCI_MultiMap( const source & i_rSource ); SCI_MultiMap( source_iterator i_begin, source_iterator i_end ); virtual ~SCI_MultiMap(); private: // Interface StdConstIterator<>: virtual void do_Advance(); virtual const typename std::multimap::value_type * inq_CurElement() const; virtual bool inq_IsSorted() const; // DATA source_iterator itRun; source_iterator itEnd; }; //************************* SCI_Set **********************************// template class SCI_Set : public StdConstIterator { public: typedef typename TYPES::element_type element; typedef typename TYPES::sort_type sorter; typedef std::set source; typedef typename source::const_iterator source_iterator; SCI_Set( const source & i_rSource ); virtual ~SCI_Set(); private: // Interface StdConstIterator<>: virtual void do_Advance(); virtual const element * inq_CurElement() const; virtual bool inq_IsSorted() const; // DATA source_iterator itRun; source_iterator itEnd; }; //************************* SCI_DataInMap **********************************// template class SCI_DataInMap : public StdConstIterator { public: typedef std::map source; typedef typename source::const_iterator source_iterator; SCI_DataInMap( const source & i_rSource ); virtual ~SCI_DataInMap(); private: // Interface StdConstIterator<>: virtual void do_Advance(); virtual const VALUE * inq_CurElement() const; virtual bool inq_IsSorted() const; // DATA source_iterator itRun; source_iterator itEnd; }; //********************************************************************// // IMPLEMENTATION template SCI_Vector::SCI_Vector( const source & i_rSource ) : itRun(i_rSource.begin()), itEnd(i_rSource.end()) { } template SCI_Vector::~SCI_Vector() { } template void SCI_Vector::do_Advance() { if (itRun != itEnd) ++itRun; } template const ELEM * SCI_Vector::inq_CurElement() const { if (itRun != itEnd) return &(*itRun); return 0; } template bool SCI_Vector::inq_IsSorted() const { return false; } template SCI_Map::SCI_Map( const source & i_rSource ) : itRun(i_rSource.begin()), itEnd(i_rSource.end()) { } template SCI_Map::~SCI_Map() { } template void SCI_Map::do_Advance() { if (itRun != itEnd) ++itRun; } template const typename std::map::value_type * SCI_Map::inq_CurElement() const { if (itRun != itEnd) return &(*itRun); return 0; } template bool SCI_Map::inq_IsSorted() const { return true; } template SCI_MultiMap::SCI_MultiMap( const source & i_rSource ) : itRun(i_rSource.begin()), itEnd(i_rSource.end()) { } template SCI_MultiMap::SCI_MultiMap( source_iterator i_begin, source_iterator i_end ) : itRun(i_begin), itEnd(i_end) { } template SCI_MultiMap::~SCI_MultiMap() { } template void SCI_MultiMap::do_Advance() { if (itRun != itEnd) ++itRun; } template const typename std::multimap::value_type * SCI_MultiMap::inq_CurElement() const { if (itRun != itEnd) return &(*itRun); return 0; } template bool SCI_MultiMap::inq_IsSorted() const { return true; } template SCI_Set::SCI_Set( const source & i_rSource ) : itRun(i_rSource.begin()), itEnd(i_rSource.end()) { } template SCI_Set::~SCI_Set() { } template void SCI_Set::do_Advance() { if (itRun != itEnd) ++itRun; } template const typename SCI_Set::element * SCI_Set::inq_CurElement() const { if (itRun != itEnd) return &(*itRun); return 0; } template bool SCI_Set::inq_IsSorted() const { return true; } template SCI_DataInMap::SCI_DataInMap( const source & i_rSource ) : itRun(i_rSource.begin()), itEnd(i_rSource.end()) { } template SCI_DataInMap::~SCI_DataInMap() { } template void SCI_DataInMap::do_Advance() { if (itRun != itEnd) ++itRun; } template const VALUE * SCI_DataInMap::inq_CurElement() const { if (itRun != itEnd) return &(*itRun).second; return 0; } template bool SCI_DataInMap::inq_IsSorted() const { return true; } } // namespace ary #endif