/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * This file is part of the LibreOffice project. * * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. * * This file incorporates work covered by the following license notice: * * 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 . */ #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 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */