1 #Region "Microsoft.VisualBasic::bf207431c3b5e09a290a4d58b648dbbf, Microsoft.VisualBasic.Core\ComponentModel\ValuePair\TagData\TagData.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 TagData
35     
36     '         Properties: Key, Tag, TagStr
37     
38     '     Structure NumericTagged
39     
40     '         FunctionToString
41     
42     '     Class IntegerTagged
43     
44     
45     
46     '     Class DoubleTagged
47     
48     
49     
50     '     Class LongTagged
51     
52     
53     
54     '     Class DateTagged
55     
56     
57     
58     '     Class VectorTagged
59     
60     
61     
62     
63     ' /********************************************************************************/
64
65 #End Region
66
67 Imports Microsoft.VisualBasic.ComponentModel.Collection.Generic
68 Imports Microsoft.VisualBasic.ComponentModel.DataSourceModel.Repository
69 Imports Microsoft.VisualBasic.Language
70 Imports Microsoft.VisualBasic.Serialization.JSON
71
72 Namespace ComponentModel.TagData
73
74     ''' <summary>
75     ''' Target value have a specific tag key.
76     ''' </summary>
77     ''' <typeparam name="T">The type of the tag key</typeparam>
78     ''' <typeparam name="V">The type of the value data</typeparam>
79     Public Class TagData(Of T, V) : Inherits Value(Of V)
80         Implements INamedValue
81
82         ''' <summary>
83         ''' ``<see cref="Tag"/> -> <see cref="GetJson"/>``
84         ''' </summary>
85         ''' <returns></returns>
86         Private Property Key As String Implements IKeyedEntity(Of String).Key
87             Get
88                 Return Tag.GetJson
89             End Get
90             Set(value As String)
91                 Tag = value.LoadObject(Of T)
92             End Set
93         End Property
94
95         ''' <summary>
96         ''' Target value have this specific tag data.
97         ''' </summary>
98         ''' <returns></returns>
99         Public Property Tag As T
100
101         ''' <summary>
102         ''' 默认都有一个字符串类型的标签用于保存其他的数据,但是主要还是使用``<see cref="Tag"/>``属性来进行标记
103         ''' </summary>
104         ''' <returns></returns>
105         Public Property TagStr As String
106
107         Public Overloads Shared Narrowing Operator CType(t As TagData(Of T, V)) As KeyValuePair(Of T, V)
108             Return New KeyValuePair(Of T, V)(t.Tag, t.value)
109         End Operator
110
111         ''' <summary>
112         ''' 将这个标签数据转换为``元组``类型
113         ''' </summary>
114         ''' <param name="r"></param>
115         ''' <returns></returns>
116         Public Overloads Shared Narrowing Operator CType(r As TagData(Of T, V)) As Tuple(Of T, V)
117             Return New Tuple(Of T, V)(r.Tag, r.value)
118         End Operator
119     End Class
120
121     ''' <summary>
122     ''' Almost equals to <see cref="DoubleTagged(Of T)"/>, but this object is a structure type. 
123     ''' (作用几乎等同于<see cref="DoubleTagged(Of T)"/>,只不过这个是Structure类型,开销会小一些)
124     ''' </summary>
125     ''' <typeparam name="T"></typeparam>
126     Public Structure NumericTagged(Of T)
127
128         Dim Tag#
129         Dim value As T
130
131         Public Overrides Function ToString() As String
132             Return Me.GetJson
133         End Function
134     End Structure
135
136     ''' <summary>
137     ''' 使用一个整形数作为目标对象值的标签信息
138     ''' </summary>
139     ''' <typeparam name="T"></typeparam>
140     Public Class IntegerTagged(Of T) : Inherits TagData(Of Integer, T)
141
142     End Class
143
144     ''' <summary>
145     ''' 使用一个实数作为目标对象值的标签信息
146     ''' </summary>
147     ''' <typeparam name="T"></typeparam>
148     Public Class DoubleTagged(Of T) : Inherits TagData(Of Double, T)
149
150     End Class
151
152     ''' <summary>
153     ''' 使用一个长整形数作为目标对象值的标签信息
154     ''' </summary>
155     ''' <typeparam name="T"></typeparam>
156     Public Class LongTagged(Of T) : Inherits TagData(Of Long, T)
157
158     End Class
159
160     Public Class DateTagged(Of T) : Inherits TagData(Of Date, T)
161
162     End Class
163
164     Public Class VectorTagged(Of T) : Inherits TagData(Of Double(), T)
165
166     End Class
167 End Namespace