Generated on Thu Jan 16 2025 00:00:00 for Gecode by doxygen 1.14.0
rnd.cpp
Go to the documentation of this file.
1/* -*- mode: C++; c-basic-offset: 2; indent-tabs-mode: nil -*- */
2/*
3 * Main authors:
4 * Christian Schulte <schulte@gecode.org>
5 * Mikael Lagerkvist <lagerkvist@gecode.org>
6 *
7 * Copyright:
8 * Christian Schulte, 2008
9 * Mikael Lagerkvist, 2008
10 *
11 * This file is part of Gecode, the generic constraint
12 * development environment:
13 * http://www.gecode.org
14 *
15 * Permission is hereby granted, free of charge, to any person obtaining
16 * a copy of this software and associated documentation files (the
17 * "Software"), to deal in the Software without restriction, including
18 * without limitation the rights to use, copy, modify, merge, publish,
19 * distribute, sublicense, and/or sell copies of the Software, and to
20 * permit persons to whom the Software is furnished to do so, subject to
21 * the following conditions:
22 *
23 * The above copyright notice and this permission notice shall be
24 * included in all copies or substantial portions of the Software.
25 *
26 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
27 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
28 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
29 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
30 * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
31 * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
32 * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
33 *
34 */
35
36#include <gecode/kernel.hh>
37
38namespace Gecode {
39
40 Support::Mutex Rnd::IMP::m;
41
43 Rnd::IMP::IMP(unsigned int s)
44 : rg(s) {}
45
46 Rnd::IMP::~IMP(void) {}
47
48 forceinline void
49 Rnd::_seed(unsigned int s) {
50 if (object() == NULL) {
51 object(new IMP(s));
52 } else {
53 static_cast<IMP*>(object())->seed(s);
54 }
55 }
56
57 Rnd::Rnd(void) {}
58 Rnd::Rnd(unsigned int s) {
59 object(new IMP(s));
60 }
61 Rnd::Rnd(const Rnd& r)
62 : SharedHandle(r) {}
63 Rnd&
65 (void) SharedHandle::operator =(r);
66 return *this;
67 }
68 Rnd::~Rnd(void) {}
69
70 void
71 Rnd::seed(unsigned int s) {
72 _seed(s);
73 }
74 void
75 Rnd::time(void) {
76 _seed(static_cast<unsigned int>(::time(NULL)));
77 }
78 void
79 Rnd::hw(void) {
80 _seed(Support::hwrnd());
81 }
82}
83
84// STATISTICS: kernel-other
Random number generator.
Definition rnd.hpp:42
unsigned int seed(void) const
Return current seed.
Definition rnd.hpp:120
Rnd & operator=(const Rnd &r)
Assignment operator.
Definition rnd.cpp:64
void time(void)
Set current seed based on time (initializes if needed)
Definition rnd.cpp:75
~Rnd(void)
Destructor.
Definition rnd.cpp:68
Rnd(void)
Default constructor that does not initialize the generator.
Definition rnd.cpp:57
void hw(void)
Set current seed to hardware-based random number (initializes if needed)
Definition rnd.cpp:79
SharedHandle(void)
Create shared handle with no object pointing to.
SharedHandle::Object * object(void) const
Access to the shared object.
A mutex for mutual exclausion among several threads.
Definition thread.hpp:96
unsigned int hwrnd(void)
Return hardware generated random number.
Definition hw-rnd.cpp:59
Gecode toplevel namespace
Post propagator for SetVar SetOpType SetVar SetRelType r
Definition set.hh:773
#define forceinline
Definition config.hpp:194