1 #Region "Microsoft.VisualBasic::fdd7e2cc739502aa21f7d26ff59d4f06, Microsoft.VisualBasic.Core\Scripting\Runtime\CType\CastStringVector.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 CastStringVector
35     
36     '         FunctionAsBoolean, AsCharacter, AsColor, (+2 OverloadsAsDouble, AsGeneric
37     '                   AsInteger, (+2 OverloadsAsNumeric, AsSingle, AsType
38     
39     
40     ' /********************************************************************************/
41
42 #End Region
43
44 Imports System.Drawing
45 Imports System.Runtime.CompilerServices
46 Imports Microsoft.VisualBasic.Linq
47
48 Namespace Scripting.Runtime
49
50     Public Module CastStringVector
51
52         ''' <summary>
53         ''' Convert the numeric <see cref="Double"/> type as the <see cref="String"/> text type.
54         ''' </summary>
55         ''' <param name="values"></param>
56         ''' <returns></returns>
57         <MethodImpl(MethodImplOptions.AggressiveInlining)>
58         <Extension>
59         Public Function AsCharacter(values As Dictionary(Of StringDouble)) As Dictionary(Of StringString)
60             Return values.ToDictionary(
61                 Function(x) x.Key,
62                 Function(x) CStr(x.Value))
63         End Function
64
65         ''' <summary>
66         ''' Convert the <see cref="String"/> value as <see cref="Double"/> numeric type.
67         ''' </summary>
68         ''' <param name="values"></param>
69         ''' <returns></returns>
70         <MethodImpl(MethodImplOptions.AggressiveInlining)>
71         <Extension>
72         Public Function AsNumeric(values As Dictionary(Of StringString)) As Dictionary(Of StringDouble)
73             Return values.ToDictionary(
74                 Function(x) x.Key,
75                 Function(x) x.Value.ParseNumeric)
76         End Function
77
78         <MethodImpl(MethodImplOptions.AggressiveInlining)>
79         <Extension>
80         Public Function AsGeneric(Of T)(values As Dictionary(Of String, T)) As Dictionary(Of StringObject)
81             Return values.ToDictionary(
82                 Function(x) x.Key,
83                 Function(x) CObj(x.Value))
84         End Function
85
86         <Extension> Public Function AsType(Of T)(source As IEnumerable(Of String)) As IEnumerable(Of T)
87             Dim type As Type = GetType(T)
88             Dim [ctype] = InputHandler.CasterString(type)
89             Dim result = source.Select(Function(x) DirectCast([ctype](x), T))
90             Return result
91         End Function
92
93         <Extension>
94         Public Function AsDouble(source As IEnumerable(Of String)) As Double()
95             Return source.AsType(Of Double).ToArray
96         End Function
97
98         <Extension>
99         Public Function AsNumeric(source As IEnumerable(Of String)) As Double()
100             Return source _
101                 .Select(Function(s) s.ParseNumeric) _
102                 .ToArray
103         End Function
104
105         <Extension>
106         Public Function AsDouble(singles As IEnumerable(Of Single)) As Double()
107             Return singles _
108                 .SafeQuery _
109                 .Select(Function(s) CDbl(s)) _
110                 .ToArray
111         End Function
112
113         <Extension>
114         Public Function AsSingle(source As IEnumerable(Of String)) As Single()
115             Return source.AsType(Of Single).ToArray
116         End Function
117
118         <Extension>
119         Public Function AsBoolean(source As IEnumerable(Of String)) As Boolean()
120             Return source.AsType(Of Boolean).ToArray
121         End Function
122
123         <Extension>
124         Public Function AsInteger(source As IEnumerable(Of String)) As Integer()
125             Return source.AsType(Of Integer).ToArray
126         End Function
127
128         <Extension>
129         Public Function AsColor(source As IEnumerable(Of String)) As Color()
130             Return source.AsType(Of Color).ToArray
131         End Function
132     End Module
133 End Namespace