From: Markus R. <rol...@us...> - 2005-12-05 21:05:14
|
Update of /cvsroot/simspark/simspark/spark/zeitgeist/randomserver In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv11684/randomserver Added Files: randomserver.cpp randomserver.h randomserver_c.cpp Log Message: --- NEW FILE: randomserver.h --- /* -*- mode: c++; c-basic-offset: 4; indent-tabs-mode: nil -*- this file is part of rcssserver3D Fri May 9 2003 Copyright (C) 2002,2003 Koblenz University Copyright (C) 2004 RoboCup Soccer Server 3D Maintenance Group $Id: randomserver.h,v 1.1 2005/12/05 21:05:01 rollmark Exp $ This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #ifndef ZEITGEIST_RANDOMSERVER_H #define ZEITGEIST_RANDOMSERVER_H #include <salt/random.h> #include <zeitgeist/node.h> #include <sys/time.h> namespace zeitgeist { /** The random server provides access to the salt RandomEngine from with the * zeitgeist framework. Additionally, it provides interfaces to set a seed * and access some distributions. */ class RandomServer : public Node { public: /** constructs a RandomServer */ RandomServer() {} virtual ~RandomServer() {} /** set a random seed */ void Seed(salt::RandomEngine::result_type seed) { if (seed == 0) { timeval tv; gettimeofday(&tv,0); seed = tv.tv_usec; } salt::RandomEngine::instance(seed); } /** get a uniformly distributed random number */ template<class RealType> RealType GetUniformRandom(RealType min, RealType max) const { return salt::UniformRNG<RealType>(min,max)(); } template<class RealType> RealType GetNormalRandom(RealType mean, RealType sigma) const { return salt::NormalRNG<RealType>(mean,sigma)(); } template<class RealType> RealType GetExponentialRandom(RealType lambda) const { return salt::ExponentialRNG<RealType>(lambda)(); } }; DECLARE_CLASS(RandomServer); } //namespace zeitgeist #endif //ZEITGEIST_LOGSERVER_H --- NEW FILE: randomserver_c.cpp --- /* -*- mode: c++; c-basic-offset: 4; indent-tabs-mode: nil -*- this file is part of rcssserver3D Fri May 9 2003 Copyright (C) 2002,2003 Koblenz University Copyright (C) 2004 RoboCup Soccer Server 3D Maintenance Group $Id: randomserver_c.cpp,v 1.1 2005/12/05 21:05:01 rollmark Exp $ This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #include "randomserver.h" #include <cmath> using namespace boost; using namespace zeitgeist; FUNCTION(RandomServer,seed) { int inSeed; if ( (in.GetSize() != 1) || (! in.GetValue(in.begin(),inSeed)) ) { return false; } obj->Seed(inSeed); return true; } FUNCTION(RandomServer,uniformRND) { float inMin; float inMax; if ( (in.GetSize() != 2) || (! in.GetValue(in[0],inMin)) || (! in.GetValue(in[1],inMax)) ) { return 0.0f; } return obj->GetUniformRandom(inMin,inMax); } FUNCTION(RandomServer,normalRND) { float inMean; float inSigma; if ( (in.GetSize() != 2) || (! in.GetValue(in[0],inMean)) || (! in.GetValue(in[1],inSigma)) ) { return 0.0f; } return obj->GetNormalRandom(inMean,inSigma); } FUNCTION(RandomServer,exponentialRND) { float inLambda; if ( (in.GetSize() != 1) || (! in.GetValue(in[0],inLambda)) ) { return 0.0f; } return obj->GetExponentialRandom(inLambda); } void CLASS(RandomServer)::DefineClass() { DEFINE_BASECLASS(zeitgeist/Node); DEFINE_FUNCTION(seed); DEFINE_FUNCTION(uniformRND); DEFINE_FUNCTION(normalRND); DEFINE_FUNCTION(exponentialRND); } --- NEW FILE: randomserver.cpp --- /* -*- mode: c++; c-basic-offset: 4; indent-tabs-mode: nil -*- this file is part of rcssserver3D Fri May 9 2003 Copyright (C) 2002,2003 Koblenz University Copyright (C) 2004 RoboCup Soccer Server 3D Maintenance Group $Id: randomserver.cpp,v 1.1 2005/12/05 21:05:01 rollmark Exp $ This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #include "randomserver.h" #include <cmath> #if 0 void RandomServer::Seed(salt::RandomEngine::result_type seed) { salt::RandomEngine.instance(seed); } #endif |