1 #Region "Microsoft.VisualBasic::b3a6a3b66fc156c868468c8499cea068, Microsoft.VisualBasic.Core\Language\Linq\Vectorization\StringVector.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 StringVector
35     
36     '         Constructor: (+2 OverloadsSub New
37     '         FunctionInStr, IsPattern, ToString
38     '         Operators: <>, =
39     
40     
41     ' /********************************************************************************/
42
43 #End Region
44
45 Imports System.Runtime.CompilerServices
46 Imports System.Text.RegularExpressions
47 Imports Microsoft.VisualBasic.Linq
48 Imports Microsoft.VisualBasic.Serialization.JSON
49
50 Namespace Language.Vectorization
51
52     Public Class StringVector : Inherits Vector(Of String)
53
54         Sub New()
55         End Sub
56
57         Public Overrides Function ToString() As String
58             Return buffer.GetJson
59         End Function
60
61         <MethodImpl(MethodImplOptions.AggressiveInlining)>
62         Sub New(buffer As IEnumerable(Of String))
63             Me.buffer = buffer.SafeQuery.ToArray
64         End Sub
65
66         Public Shared Widening Operator CType(list As List(Of String)) As StringVector
67             Return New StringVector(list)
68         End Operator
69
70         Public Shared Widening Operator CType(array As String()) As StringVector
71             Return New StringVector(array)
72         End Operator
73
74         <MethodImpl(MethodImplOptions.AggressiveInlining)>
75         Public Overloads Shared Operator &(s1 As StringVector, s2$) As StringVector
76             Return New StringVector(s1.Select(Function(s) s & s2))
77         End Operator
78
79         <MethodImpl(MethodImplOptions.AggressiveInlining)>
80         Public Shared Operator <>(s1 As StringVector, s2$) As BooleanVector
81             Return Not s1 = s2
82         End Operator
83
84         <MethodImpl(MethodImplOptions.AggressiveInlining)>
85         Public Shared Operator =(s1 As StringVector, s2$) As BooleanVector
86             Return New BooleanVector(s1.Select(Function(s) s = s2))
87         End Operator
88
89         <MethodImpl(MethodImplOptions.AggressiveInlining)>
90         Public Shared Function InStr(string1 As StringVector, string2$, Optional method As CompareMethod = CompareMethod.Binary) As Vector(Of Integer)
91             Return string1.Select(Function(str) Strings.InStr(str, string2, method)).AsVector
92         End Function
93
94         <MethodImpl(MethodImplOptions.AggressiveInlining)>
95         Public Shared Function IsPattern(strings As StringVector, pattern$, Optional opt As RegexOptions = RegexICSng) As BooleanVector
96             Return strings.Select(Function(s) s.IsPattern(pattern, opt)).AsVector
97         End Function
98
99         ''' <summary>
100         ''' 
101         ''' </summary>
102         ''' <param name="expression">a,b,c,d,e</param>
103         ''' <returns></returns>
104         ''' 
105         <MethodImpl(MethodImplOptions.AggressiveInlining)>
106         Public Shared Widening Operator CType(expression As StringAs StringVector
107             Return New StringVector(Strings.Split(expression, ","))
108         End Operator
109     End Class
110 End Namespace