1 #Region "Microsoft.VisualBasic::ab787a6c262c729d299513ea74b46534, Microsoft.VisualBasic.Core\Language\Value\Pointer.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     '     Class Pointer
35     
36     '         Constructor: (+3 OverloadsSub New
37     '         FunctionToString
38     '         Operators: (+2 Overloads) -, (+4 Overloads) +, <, <<, <=
39     '                    >, >=
40     
41     
42     ' /********************************************************************************/
43
44 #End Region
45
46 Namespace Language
47
48     ''' <summary>
49     ''' Type of <see cref="Int32"/> pointer class to the <see cref="Array"/> class.
50     ''' (<see cref="Int32"/>类型,一般用来进行数组操作的)
51     ''' </summary>
52     Public Class Pointer
53
54         ''' <summary>
55         ''' Current read position
56         ''' </summary>
57         Protected __index As Integer
58         ReadOnly __step As Integer
59
60         ''' <summary>
61         ''' Construct a pointer class and then assign a initial <see cref="Int32"/> value.(构造一个指针对象,并且赋值其初始值)
62         ''' </summary>
63         ''' <param name="n">The initial value.</param>
64         Sub New(n As Integer)
65             __index = n
66             __step = 1
67         End Sub
68
69         Public Sub New(n As Integer, [step] As Integer)
70             __index = n
71             __step = [step]
72         End Sub
73
74         ''' <summary>
75         ''' Creates a new <see cref="Integer"/> type pointer object in VisualBasic with its initial value is ZERO.(构造一个初始值为零的整形数指针对象)
76         ''' </summary>
77         Sub New()
78             Call Me.New(Scan0)
79         End Sub
80
81         Public Overrides Function ToString() As String
82             Return __index
83         End Function
84
85         Public Shared Widening Operator CType(n As IntegerAs Pointer
86             Return New Pointer(n)
87         End Operator
88
89         Public Shared Narrowing Operator CType(n As Pointer) As Integer
90             Return n.__index
91         End Operator
92
93         Public Overloads Shared Operator +(n As Pointer, x As IntegerAs Pointer
94             n.__index += x
95             Return n
96         End Operator
97
98         Public Overloads Shared Operator +(x As Integer, n As Pointer) As Pointer
99             n.__index += x
100             Return n
101         End Operator
102
103         Public Overloads Shared Operator +(x As Pointer, n As Pointer) As Pointer
104             Return New Pointer(n.__index + x.__index)
105         End Operator
106
107         ''' <summary>
108         ''' ``<see cref="__index"/> &lt; <paramref name="n"/>``
109         ''' </summary>
110         ''' <param name="x"></param>
111         ''' <param name="n"></param>
112         ''' <returns></returns>
113         Public Overloads Shared Operator <(x As Pointer, n As IntegerAs Boolean
114             Return x.__index < n
115         End Operator
116
117         Public Overloads Shared Operator >(x As Pointer, n As IntegerAs Boolean
118             Return x.__index > n
119         End Operator
120
121         Public Shared Operator -(x As Pointer, n As IntegerAs Integer
122             Dim p As Integer = x.__index
123             x.__index -= n
124             Return p
125         End Operator
126
127         ''' <summary>
128         ''' 移动n,然后返回之前的数值
129         ''' </summary>
130         ''' <param name="x"></param>
131         ''' <param name="n"></param>
132         ''' <returns></returns>
133         Public Shared Operator <<(x As Pointer, n As IntegerAs Integer
134             Dim value As Integer = x.__index
135             x.__index += n
136             Return value
137         End Operator
138
139         ''' <summary>
140         ''' Automatically increasing self +1 and then returns the previous value.(自增1,然后返回之前的数值)
141         ''' </summary>
142         ''' <param name="x"></param>
143         ''' <returns></returns>
144         Public Overloads Shared Operator +(x As Pointer) As Integer
145             Dim p As Integer = x.__index
146             x.__index += x.__step
147             Return p
148         End Operator
149
150         ''' <summary>
151         ''' 自减1,然后返回之前的数值
152         ''' </summary>
153         ''' <param name="x"></param>
154         ''' <returns></returns>
155         Public Overloads Shared Operator -(x As Pointer) As Integer
156             Dim p As Integer = x.__index
157             x.__index -= x.__step
158             Return p
159         End Operator
160
161         ''' <summary>
162         ''' Less than or equals
163         ''' </summary>
164         ''' <param name="x"></param>
165         ''' <param name="n"></param>
166         ''' <returns></returns>
167         Public Shared Operator <=(x As Pointer, n As IntegerAs Boolean
168             Return x.__index <= n
169         End Operator
170
171         ''' <summary>
172         ''' Greater than or equals
173         ''' </summary>
174         ''' <param name="x"></param>
175         ''' <param name="n"></param>
176         ''' <returns></returns>
177         Public Shared Operator >=(x As Pointer, n As IntegerAs Boolean
178             Return x.__index >= n
179         End Operator
180     End Class
181 End Namespace