Eurobot2012_Secondary

Fork of Eurobot_2012_Secondary by Shuto Naruse

Committer:
narshu
Date:
Wed Oct 17 22:25:31 2012 +0000
Revision:
1:cc2a9eb0bd55
Commit before publishing

Who changed what in which revision?

UserRevisionLine numberNew contents of line
narshu 1:cc2a9eb0bd55 1 /*
narshu 1:cc2a9eb0bd55 2 * Tiny Vector Matrix Library
narshu 1:cc2a9eb0bd55 3 * Dense Vector Matrix Libary of Tiny size using Expression Templates
narshu 1:cc2a9eb0bd55 4 *
narshu 1:cc2a9eb0bd55 5 * Copyright (C) 2001 - 2007 Olaf Petzold <opetzold@users.sourceforge.net>
narshu 1:cc2a9eb0bd55 6 *
narshu 1:cc2a9eb0bd55 7 * This library is free software; you can redistribute it and/or
narshu 1:cc2a9eb0bd55 8 * modify it under the terms of the GNU Lesser General Public
narshu 1:cc2a9eb0bd55 9 * License as published by the Free Software Foundation; either
narshu 1:cc2a9eb0bd55 10 * version 2.1 of the License, or (at your option) any later version.
narshu 1:cc2a9eb0bd55 11 *
narshu 1:cc2a9eb0bd55 12 * This library is distributed in the hope that it will be useful,
narshu 1:cc2a9eb0bd55 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
narshu 1:cc2a9eb0bd55 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
narshu 1:cc2a9eb0bd55 15 * Lesser General Public License for more details.
narshu 1:cc2a9eb0bd55 16 *
narshu 1:cc2a9eb0bd55 17 * You should have received a copy of the GNU Lesser General Public
narshu 1:cc2a9eb0bd55 18 * License along with this library; if not, write to the Free Software
narshu 1:cc2a9eb0bd55 19 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
narshu 1:cc2a9eb0bd55 20 *
narshu 1:cc2a9eb0bd55 21 * $Id: Random.h,v 1.7 2007-06-23 15:58:59 opetzold Exp $
narshu 1:cc2a9eb0bd55 22 */
narshu 1:cc2a9eb0bd55 23
narshu 1:cc2a9eb0bd55 24 #ifndef TVMET_UTIL_RANDOM_H
narshu 1:cc2a9eb0bd55 25 #define TVMET_UTIL_RANDOM_H
narshu 1:cc2a9eb0bd55 26
narshu 1:cc2a9eb0bd55 27 #include <tvmet/CompileTimeError.h>
narshu 1:cc2a9eb0bd55 28
narshu 1:cc2a9eb0bd55 29 namespace tvmet {
narshu 1:cc2a9eb0bd55 30
narshu 1:cc2a9eb0bd55 31 namespace util {
narshu 1:cc2a9eb0bd55 32
narshu 1:cc2a9eb0bd55 33
narshu 1:cc2a9eb0bd55 34 /**
narshu 1:cc2a9eb0bd55 35 * \class Random Random.h "tvmet/util/Random.h"
narshu 1:cc2a9eb0bd55 36 * \brief A simple random class.
narshu 1:cc2a9eb0bd55 37 * On each access this class returns a new random number using
narshu 1:cc2a9eb0bd55 38 * std::rand(). The range generated is templated by MIN and
narshu 1:cc2a9eb0bd55 39 * MAX.
narshu 1:cc2a9eb0bd55 40 * \ingroup _util_function
narshu 1:cc2a9eb0bd55 41 *
narshu 1:cc2a9eb0bd55 42 * \par Example:
narshu 1:cc2a9eb0bd55 43 * \code
narshu 1:cc2a9eb0bd55 44 * #include <algorithm>
narshu 1:cc2a9eb0bd55 45 *
narshu 1:cc2a9eb0bd55 46 * tvmet::Random<int, 0, 100> random;
narshu 1:cc2a9eb0bd55 47 *
narshu 1:cc2a9eb0bd55 48 * std::generate(m1.begin(), m1.end(), random());
narshu 1:cc2a9eb0bd55 49 * \endcode
narshu 1:cc2a9eb0bd55 50 */
narshu 1:cc2a9eb0bd55 51 template<class T, int MIN=0, int MAX=100>
narshu 1:cc2a9eb0bd55 52 class Random {
narshu 1:cc2a9eb0bd55 53 static unsigned int s_seed;
narshu 1:cc2a9eb0bd55 54 public:
narshu 1:cc2a9eb0bd55 55 typedef T value_type;
narshu 1:cc2a9eb0bd55 56 Random() { TVMET_CT_CONDITION(MIN<MAX, wrong_random_range) }
narshu 1:cc2a9eb0bd55 57 value_type operator()() {
narshu 1:cc2a9eb0bd55 58 s_seed += (unsigned)std::time(0);
narshu 1:cc2a9eb0bd55 59 std::srand(s_seed);
narshu 1:cc2a9eb0bd55 60 return MIN + int(double(MAX) * std::rand()/(double(RAND_MAX)+1.0));
narshu 1:cc2a9eb0bd55 61 }
narshu 1:cc2a9eb0bd55 62 };
narshu 1:cc2a9eb0bd55 63 // instance
narshu 1:cc2a9eb0bd55 64 template<class T, int MIN, int MAX>
narshu 1:cc2a9eb0bd55 65 unsigned int Random<T, MIN, MAX>::s_seed;
narshu 1:cc2a9eb0bd55 66
narshu 1:cc2a9eb0bd55 67
narshu 1:cc2a9eb0bd55 68 #if defined(TVMET_HAVE_COMPLEX)
narshu 1:cc2a9eb0bd55 69 /**
narshu 1:cc2a9eb0bd55 70 * \class Random< std::complex<T> > Random.h "tvmet/util/Random.h"
narshu 1:cc2a9eb0bd55 71 * \brief Specialized Random class.
narshu 1:cc2a9eb0bd55 72 * \ingroup _util_function
narshu 1:cc2a9eb0bd55 73 */
narshu 1:cc2a9eb0bd55 74 template<class T, int MIN=0, int MAX=100>
narshu 1:cc2a9eb0bd55 75 class Random {
narshu 1:cc2a9eb0bd55 76 static unsigned int s_seed;
narshu 1:cc2a9eb0bd55 77 public:
narshu 1:cc2a9eb0bd55 78 typedef std::complex<T> value_type;
narshu 1:cc2a9eb0bd55 79 Random() { TVMET_CT_CONDITION(MIN<MAX, wrong_random_range) }
narshu 1:cc2a9eb0bd55 80 value_type operator()() {
narshu 1:cc2a9eb0bd55 81 s_seed += (unsigned)std::time(0);
narshu 1:cc2a9eb0bd55 82 std::srand(s_seed);
narshu 1:cc2a9eb0bd55 83 return MIN + int(double(MAX) * std::rand()/(double(RAND_MAX)+1.0));
narshu 1:cc2a9eb0bd55 84 }
narshu 1:cc2a9eb0bd55 85 };
narshu 1:cc2a9eb0bd55 86 // instance
narshu 1:cc2a9eb0bd55 87 template<class T, int MIN, int MAX>
narshu 1:cc2a9eb0bd55 88 unsigned int Random<std::complex<T>, MIN, MAX>::s_seed;
narshu 1:cc2a9eb0bd55 89 #endif // defined(TVMET_HAVE_COMPLEX)
narshu 1:cc2a9eb0bd55 90
narshu 1:cc2a9eb0bd55 91
narshu 1:cc2a9eb0bd55 92 } // namespace util
narshu 1:cc2a9eb0bd55 93
narshu 1:cc2a9eb0bd55 94 } // namespace tvmet
narshu 1:cc2a9eb0bd55 95
narshu 1:cc2a9eb0bd55 96 #endif // TVMET_UTIL_RANDOM_H
narshu 1:cc2a9eb0bd55 97
narshu 1:cc2a9eb0bd55 98 // Local Variables:
narshu 1:cc2a9eb0bd55 99 // mode:C++
narshu 1:cc2a9eb0bd55 100 // tab-width:8
narshu 1:cc2a9eb0bd55 101 // End: