Point Cloud Library (PCL) 1.14.0
Loading...
Searching...
No Matches
opennurbs_rand.h
1/* $NoKeywords: $ */
2/*
3//
4// Copyright (c) 1993-2012 Robert McNeel & Associates. All rights reserved.
5// OpenNURBS, Rhinoceros, and Rhino3D are registered trademarks of Robert
6// McNeel & Associates.
7//
8// THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY.
9// ALL IMPLIED WARRANTIES OF FITNESS FOR ANY PARTICULAR PURPOSE AND OF
10// MERCHANTABILITY ARE HEREBY DISCLAIMED.
11//
12// For complete openNURBS copyright information see <http://www.opennurbs.org>.
13//
14////////////////////////////////////////////////////////////////
15*/
16
17#if !defined(OPENNURBS_RANDOM_NUMBER_INC_)
18#define OPENNURBS_RANDOM_NUMBER_INC_
19
20ON_BEGIN_EXTERNC
21
23{
24 ON__UINT32 mti; /* mti = 0xFFFFFFFF means mt[] is not initialized */
25 ON__UINT32 mt[624]; /* the array for the state vector */
26};
27
28
29/*
30Description:
31 Seed a context for on_random_number().
32Parameters:
33 s - [in]
34 rand_context - [out] context to seed.
35
36Remarks:
37 on_random_number_seed() does not use any static memory.
38Example:
39 ON_RAND_CONTEXT rand_context;
40
41 ON__UINT seed = 123;
42 on_random_number_seed( seed, &rand_context );
43
44 ON__UINT32 r1 = on_random_number( &rand_context );
45 ON__UINT32 r2 = on_random_number( &rand_context );
46 ON__UINT32 r3 = on_random_number( &rand_context );
47*/
48void on_random_number_seed(
49 ON__UINT32 s,
50 struct ON_RANDOM_NUMBER_CONTEXT* rand_context
51 );
52
53/*
54Description:
55 Get a random number.
56Parameters:
57 rand_context - [in/out]
58 random number context. The first time rand_context is
59 used it must be either initialized by calling on_random_number_seed()
60 or rand_context->mti must be set to 0xFFFFFFFF. Otherwise do not
61 modify randcontext between calls to on_random_number.
62Returns:
63 A random number.
64Remarks:
65 on_random_number() does not use any static memory.
66Example:
67 ON_RAND_CONTEXT rand_context;
68
69 ON__UINT seed = 123;
70 on_random_number_seed( seed, &rand_context );
71
72 ON__UINT32 r1 = on_random_number( &rand_context );
73 ON__UINT32 r2 = on_random_number( &rand_context );
74 ON__UINT32 r3 = on_random_number( &rand_context );
75*/
76ON__UINT32 on_random_number(
77 struct ON_RANDOM_NUMBER_CONTEXT* rand_context
78 );
79
80
81/*
82Description:
83 Seed the random number generator used by on_rand().
84Parameters:
85 s - [in]
86Remarks:
87 on_srand() is not thread safe. It used static global memory
88 that is modified by on_srand() and on_rand().
89*/
90void on_srand(ON__UINT32 s);
91
92/*
93Description:
94 Get a random number.
95Returns:
96 A random number.
97Remarks:
98 on_rand() is not thread safe. It used static global memory
99 that is modified by on_srand() and on_rand().
100*/
101ON__UINT32 on_rand(void);
102
103
104ON_END_EXTERNC
105
106
107#if defined(ON_CPLUSPLUS)
108
109class ON_CLASS ON_RandomNumberGenerator
110{
111public:
112 ON_RandomNumberGenerator();
113
114 /*
115 Description:
116 Seed the random number generator.
117 Parameters:
118 s - [in]
119 */
120 void Seed( ON__UINT32 s );
121
122 /*
123 Returns:
124 32 bit unsigned random number [0,0xFFFFFFFF] [0,4294967295]
125 */
126 ON__UINT32 RandomNumber();
127
128 /*
129 Returns:
130 double in the interval [0.0 and 1.0]
131 */
132 double RandomDouble();
133
134 /*
135 Returns:
136 double in the interval [t0,t1]
137 */
138 double RandomDouble(double t0, double t1);
139
140 /*
141 Description:
142 Perform a random permuation on an array.
143 Parameters:
144 base - [in/out]
145 Array of element to permute
146 nel - [in]
147 number of elements in the array.
148 sizeof_element
149 size of an element in bytes.
150 */
151 void RandomPermutation(void* base, std::size_t nel, std::size_t sizeof_element );
152
153private:
154 struct ON_RANDOM_NUMBER_CONTEXT m_rand_context;
155};
156
157#endif
158
159
160#endif