Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of Eurobot_2012_Secondary by
Incrementor.h
00001 /* 00002 * Tiny Vector Matrix Library 00003 * Dense Vector Matrix Libary of Tiny size using Expression Templates 00004 * 00005 * Copyright (C) 2001 - 2007 Olaf Petzold <opetzold@users.sourceforge.net> 00006 * 00007 * This library is free software; you can redistribute it and/or 00008 * modify it under the terms of the GNU Lesser General Public 00009 * License as published by the Free Software Foundation; either 00010 * version 2.1 of the License, or (at your option) any later version. 00011 * 00012 * This library is distributed in the hope that it will be useful, 00013 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00014 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00015 * Lesser General Public License for more details. 00016 * 00017 * You should have received a copy of the GNU Lesser General Public 00018 * License along with this library; if not, write to the Free Software 00019 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 00020 * 00021 * $Id: Incrementor.h,v 1.7 2007-06-23 15:58:59 opetzold Exp $ 00022 */ 00023 00024 #ifndef TVMET_UTIL_INCREMENTOR_H 00025 #define TVMET_UTIL_INCREMENTOR_H 00026 00027 namespace tvmet { 00028 00029 namespace util { 00030 00031 00032 /** 00033 * \class Incrementor Incrementor.h "tvmet/util/Incrementor.h" 00034 * \brief A simple incrementor class. 00035 * The start value is given at construction time. After 00036 * each access the class increments the internal counter. 00037 * \ingroup _util_function 00038 * 00039 * \par Example: 00040 * \code 00041 * #include <algorithm> 00042 * 00043 * using namespace tvmet; 00044 * 00045 * ... 00046 * 00047 * std::generate(m1.begin(), m1.end(), 00048 * util::Incrementor<typename matrix_type::value_type>()); 00049 * \endcode 00050 */ 00051 template<class T> 00052 struct Incrementor 00053 { 00054 Incrementor(T start=0) : m_inc(start) { } 00055 T operator()() { m_inc+=1; return m_inc; } 00056 00057 private: 00058 T m_inc; 00059 }; 00060 00061 00062 #if defined(TVMET_HAVE_COMPLEX) 00063 /** 00064 * \class Incrementor< std::complex<T> > Incrementor.h "tvmet/util/Incrementor.h" 00065 * \brief Specialized Incrementor class. 00066 * \ingroup _util_function 00067 */ 00068 template<class T> 00069 struct Incrementor< std::complex<T> > { 00070 Incrementor(const std::complex<T>& start=0) 00071 : m_inc(start) { } 00072 std::complex<T> operator()() { 00073 m_inc += std::complex<T>(1,1); 00074 return m_inc; 00075 } 00076 private: 00077 std::complex<T> m_inc; 00078 }; 00079 #endif // defined(TVMET_HAVE_COMPLEX) 00080 00081 00082 } // namespace util 00083 00084 } // namespace tvmet 00085 00086 #endif // TVMET_UTIL_INCREMENTOR_H 00087 00088 // Local Variables: 00089 // mode:C++ 00090 // tab-width:8 00091 // End:
Generated on Tue Jul 12 2022 21:02:13 by
1.7.2
