1 #Region "Microsoft.VisualBasic::86bf442bb41ea4eee0d47035b9175240, Microsoft.VisualBasic.Core\Language\Language\C\RandomNumbers.vb"
2
3     ' Author:
4     
5     '       asuka (amethyst.asuka@gcmodeller.org)
6     '       xie (genetics@smrucc.org)
7     '       xieguigang (xie.guigang@live.com)
8     
9     ' Copyright (c) 2018 GPL3 Licensed
10     
11     
12     ' GNU GENERAL PUBLIC LICENSE (GPL3)
13     
14     
15     ' This program is free software: you can redistribute it and/or modify
16     ' it under the terms of the GNU General Public License as published by
17     ' the Free Software Foundation, either version 3 of the License, or
18     ' (at your option) any later version.
19     
20     ' This program is distributed in the hope that it will be useful,
21     ' but WITHOUT ANY WARRANTY; without even the implied warranty of
22     ' MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
23     ' GNU General Public License for more details.
24     
25     ' You should have received a copy of the GNU General Public License
26     ' along with this program. If not, see <http://www.gnu.org/licenses/>.
27
28
29
30     ' /********************************************************************************/
31
32     ' Summaries:
33
34     '     Module RandomNumbers
35     
36     '         Constructor: (+1 OverloadsSub New
37     
38     '         Function: rand, random
39     
40     '         Sub: randomize, srand
41     
42     
43     ' /********************************************************************************/
44
45 #End Region
46
47 '----------------------------------------------------------------------------------------
48 ' Copyright © 2006 - 2012 Tangible Software Solutions Inc.
49 ' This class can be used by anyone provided that the copyright notice remains intact.
50 '
51 ' This class provides the ability to simulate the behavior of the C/C++ functions for 
52 ' generating random numbers, using the .NET Framework System.Random class.
53 ' 'rand' converts to the parameterless overload of NextNumber
54 ' 'random' converts to the single-parameter overload of NextNumber
55 ' 'randomize' converts to the parameterless overload of Seed
56 ' 'srand' converts to the single-parameter overload of Seed
57 '----------------------------------------------------------------------------------------
58
59 Namespace Language.C
60
61     ''' <summary>
62     ''' This class provides the ability to simulate the behavior of the C/C++ functions for 
63     ''' generating random numbers, using the .NET Framework <see cref="System.Random"/> class.
64     '''
65     ''' + ``rand`` converts to the parameterless overload of NextNumber
66     ''' + ``random`` converts to the single-parameter overload of NextNumber
67     ''' + ``randomize`` converts to the parameterless overload of Seed
68     ''' + ``srand`` converts to the single-parameter overload of Seed
69     ''' </summary>
70     Public Module RandomNumbers
71
72         Dim r As Random
73
74         Sub New()
75             Call randomize()
76         End Sub
77
78         ''' <summary>
79         ''' <see cref="System.Random.Next"/>.(线程安全的函数)
80         ''' </summary>
81         ''' <returns></returns>
82         Public Function rand() As Integer
83             SyncLock r
84                 Return r.[Next]()
85             End SyncLock
86         End Function
87
88         ''' <summary>
89         ''' <see cref="System.Random.Next(Integer)"/>.(线程安全的函数)
90         ''' </summary>
91         ''' <param name="ceiling"></param>
92         ''' <returns></returns>
93         Public Function random(ceiling As IntegerAs Integer
94             SyncLock r
95                 Return r.[Next](ceiling)
96             End SyncLock
97         End Function
98
99         Public Sub randomize()
100             r = New Random(Now.Millisecond)
101         End Sub
102
103         Public Sub srand(seed__1 As Integer)
104             r = New Random(seed__1)
105         End Sub
106     End Module
107 End Namespace