| VRS - The Virtual Rendering System |
| version 3.3 |
00001 /****************************************************************************** 00002 * VRS - The Virtual Rendering System 00003 * Copyright (C) 2000-2004 Computer Graphics Systems Group at the 00004 * Hasso-Plattner-Institute (HPI), Potsdam, Germany. 00005 * 00006 * This library is free software; you can redistribute it and/or modify it 00007 * under the terms of the GNU Lesser General Public License as published by 00008 * the Free Software Foundation; either version 2.1 of the License, or (at 00009 * your option) any later version. This library is distributed in the hope 00010 * that it will be useful, but WITHOUT ANY WARRANTY; without even the implied 00011 * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00012 * GNU Lesser General Public License for more details. You should have received 00013 * a copy of the GNU Lesser+ General Public License along with this library; if 00014 * not, write to the FreeSoftware Foundation, Inc., 59 Temple Place, Suite 330, 00015 * Boston, MA, 02111-1307, USA. 00016 ******************************************************************************/ 00017 00018 // $Id: guardedcastiterator.h 4455 2004-11-03 10:58:29Z saar $ 00019 // $Date: 2004-11-03 11:58:29 +0100 (Wed, 03 Nov 2004) $ 00020 // $Revision: 4455 $ 00021 // $State$ 00022 // $Author: saar $ 00023 // 00024 // $Log$ 00025 // Revision 1.3 2004/11/03 10:58:28 saar 00026 // Class comment changed (Doxygen style) 00027 // 00028 // Revision 1.2 2004/04/29 13:18:15 kirsch 00029 // minor cleanup 00030 // 00031 // Revision 1.1 2004/04/29 10:30:14 buchholz 00032 // first check-in 00033 // 00034 00035 #ifndef VRS_GUARDEDCASTITERATOR_H 00036 #define VRS_GUARDEDCASTITERATOR_H 00037 00038 #include <vrs/container/iterator.h> 00039 00040 namespace VRS { 00041 00043 template<typename TO, typename FROM> 00044 class GuardedCastIterator : public Iterator<SO<TO> > { 00045 public: 00046 GuardedCastIterator(Iterator<SO<FROM> >* from) : from_(from) { VRS_CheckArg(from, "no iterator"); } 00054 virtual unsigned int size() const { return from_->size(); } 00055 virtual SO<TO> get(unsigned int index) const { 00056 FROM* from = from_->get(index); 00057 return (from==NULL ? NULL : VRS_GuardedCast(TO, from)); 00058 } 00059 00060 virtual const TransactionNo& lastTransactionNo() const { return from_->lastTransactionNo(); } 00061 00062 VRS_TYPEINFO(GuardedCastIterator, Iterator<SO<TO> >); 00063 VRS_SERIALIZABLE(GuardedCastIterator); 00064 00065 protected: 00066 GuardedCastIterator() { } // only for serialization 00067 00068 private: 00069 SO<const Iterator<SO<FROM> > > from_; 00070 }; 00071 00072 template<typename TO, typename FROM> 00073 inline void GuardedCastIterator<TO, FROM>::serialize(SerializationManager& doc) { 00074 VRS_SERIALIZATION_PARENT_CLASS(doc, Iterator<SO<TO> >); 00075 serialization(doc, "Master", from_); 00076 } 00077 00078 VRS_SERIALIZATION_REGISTRATION_TEMPLATE_2(GuardedCastIterator); 00079 00080 } // namespace VRS 00081 00082 #endif // VRS_GUARDEDCASTITERATOR_H 00083