| VRS - The Virtual Rendering System |
| version 3.3 |
00001 /********************************************************************** 00002 VRS - The Virtual Rendering System 00003 Copyright (C) 2001 Computer Graphics Systems Group at the 00004 Hasso-Plattner-Institute, Potsdam, Germany. 00005 This library is free software; you can redistribute it and/or 00006 modify it under the terms of the GNU Lesser General Public 00007 License as published by the Free Software Foundation; either 00008 version 2.1 of the License, or (at your option) any later version. 00009 This library is distributed in the hope that it will be useful, but 00010 WITHOUT ANY WARRANTY; without even the implied warranty of 00011 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 00012 See the GNU Lesser General Public License for more details. 00013 You should have received a copy of the GNU Lesser+ General Public 00014 License along with this library; if not, write to the FreeSoftware 00015 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA, 02111-1307, USA. 00016 **********************************************************************/ 00017 // $Id: constantiterator.h 4455 2004-11-03 10:58:29Z saar $ 00018 // $Date: 2004-11-03 11:58:29 +0100 (Wed, 03 Nov 2004) $ 00019 // $Revision: 4455 $ 00020 // $State$ 00021 // $Author: saar $ 00022 // 00023 // $Log$ 00024 // Revision 1.19 2004/11/03 10:58:28 saar 00025 // Class comment changed (Doxygen style) 00026 // 00027 // Revision 1.18 2004/03/12 16:28:39 baumann 00028 // macros VRS_NAMESPACE_BEGIN/_END expanded and removed 00029 // 00030 // Revision 1.17 2004/03/10 15:17:42 kirsch 00031 // changes due to two-stage name lookup in non-dependent templates (gcc 3.4) 00032 // 00033 // Revision 1.16 2004/02/10 10:51:39 wendland 00034 // added VRS_SERIALIZATION_PARENT_CLASS 00035 // 00036 // Revision 1.15 2004/01/19 11:43:57 baumann 00037 // serialization mechanism improved 00038 // 00039 // Revision 1.14 2004/01/15 14:16:54 baumann 00040 // serialization mechanism improved 00041 // 00042 // Revision 1.13 2003/07/10 11:07:56 baumann 00043 // code cleanup 00044 // 00045 // Revision 1.12 2003/02/19 08:29:56 kirsch 00046 // removed unused parameter warning 00047 // 00048 // Revision 1.11 2003/02/14 10:30:09 baumann 00049 // public default construtor added 00050 // 00051 // Revision 1.10 2003/02/11 11:05:16 baumann 00052 // new function makeConstantIterator() added 00053 // 00054 // Revision 1.9 2003/01/22 17:13:38 baumann 00055 // modified() addad to setSize() 00056 // 00057 // Revision 1.8 2002/11/20 15:59:21 baumann 00058 // method setSize() added 00059 // 00060 // Revision 1.7 2002/08/06 16:24:01 baumann 00061 // VRS_API removed for template classes 00062 // 00063 // Revision 1.6 2002/07/11 14:21:52 kersting 00064 // added version for serialize method 00065 // 00066 // Revision 1.5 2002/07/05 05:55:27 baumann 00067 // changed return type of get()-method from "const T&" to "T" 00068 // 00069 // Revision 1.4 2002/07/03 15:52:50 baumann 00070 // several changes for iterator code 00071 // most iterators are now serializable again 00072 // 00073 // Revision 1.3 2002/07/02 06:12:34 baumann 00074 // VRS::Iterator<T> completely rewritten 00075 // 00076 // Revision 1.2 2002/04/07 17:14:11 baumann 00077 // Matrix::identity() changed to Matrix::identity 00078 // 00079 // Revision 1.1 2002/03/04 12:03:54 kersting 00080 // directory structure changes 00081 // 00082 // Revision 1.10 2002/03/03 21:44:24 kosta 00083 // VRS_TYPEINFO-macro rewritten 00084 // 00085 // Revision 1.9 2002/02/19 10:34:07 kosta 00086 // undone all changes since 2002-02-15 00087 // 00088 // Revision 1.6 2002/02/14 09:37:20 kosta 00089 // automatic serialization registration for template classes implemented 00090 // 00091 // Revision 1.5 2002/02/05 07:48:25 kosta 00092 // new persistency macros: 00093 // VRS_SERIALIZABLE(CLASS_NAME); 00094 // VRS_SERIALIZABLE_ABSTRACT_CLASS(CLASS_NAME); 00095 // VRS_SERIALIZABLE_NO_SO_CLASS(CLASS_NAME) 00096 // 00097 // Revision 1.4 2002/02/04 13:07:19 kosta 00098 // VRS_SERIALIZABLE macros completely rewritten 00099 // 00100 // Revision 1.3 2002/01/15 16:25:53 kosta 00101 // macros rewritten for a better namespace support 00102 // 00103 // Revision 1.2 2001/11/13 16:36:30 kirsch 00104 // changed line feed to unix style (removed control-M) 00105 // 00106 // Revision 1.1.1.1 2001/06/08 08:09:20 kirsch 00107 // imported alpha-version by olli 00108 // 00109 00110 00111 #ifndef VRS_CONTAINER_CONSTANTITERATOR_H 00112 #define VRS_CONTAINER_CONSTANTITERATOR_H 00113 00114 #include <vrs/container/iterator.h> 00115 00116 namespace VRS { 00117 00119 template<typename T> 00120 class ConstantIterator : public Iterator<T> { 00121 public: 00122 ConstantIterator(const T& value = T(), unsigned int size = 0) : value_(value), size_(size) { } 00127 void setValue(const T& constantValue) { value_ = constantValue; this->modified(); } 00128 const T& getValue() const { return value_; } 00132 virtual unsigned int size() const { return size_; } 00133 void setSize(unsigned int size) { size_ = size; this->modified(); } 00134 virtual T get(unsigned int /* index */ ) const { return value_; } 00136 00137 VRS_TYPEINFO(ConstantIterator, Iterator<T>); 00138 VRS_SERIALIZABLE(ConstantIterator); 00139 00140 private: 00141 T value_; 00142 unsigned int size_; 00143 }; 00144 00145 template<class T> 00146 inline ConstantIterator<T>* makeConstantIterator(const T& value, unsigned int size = 0) { 00147 return new ConstantIterator<T>(value, size); 00148 } 00149 00150 template<class T> 00151 inline void ConstantIterator<T>::serialize(SerializationManager& doc) { 00152 VRS_SERIALIZATION_PARENT_CLASS(doc, Iterator<T>); 00153 serialization(doc, "Size", size_); 00154 serialization(doc, "Value", value_); 00155 } 00156 00157 VRS_SERIALIZATION_REGISTRATION_TEMPLATE(ConstantIterator); 00158 00159 } // namespace VRS 00160 00161 #endif // VRS_CONTAINER_CONSTANTITERATOR_H