1 #Region "Microsoft.VisualBasic::a4340f380698df28410faf9ff7a6a08f, Microsoft.VisualBasic.Core\Language\Linq\Indexer.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 Indexer
35     
36     '         FunctionIndexing
37     
38     
39     ' /********************************************************************************/
40
41 #End Region
42
43 Imports Microsoft.VisualBasic.Emit.Delegates
44 Imports Microsoft.VisualBasic.Linq
45
46 Namespace Language
47
48     Public Module Indexer
49
50 #Region "Default Public Overloads Property Item(args As ObjectAs T()"
51
52         ''' <summary>
53         ''' Generates the vector elements index collection.
54         ''' </summary>
55         ''' <param name="args"></param>
56         ''' <returns></returns>
57         Public Function Indexing(args As ObjectAs IEnumerable(Of Integer)
58             Dim type As Type = args.GetType
59
60             If type Is GetType(Integer) Then
61                 Return {DirectCast(args, Integer)}
62             ElseIf type.ImplementInterface(GetType(IEnumerable(Of Integer))) Then
63                 Return DirectCast(args, IEnumerable(Of Integer))
64             ElseIf type.ImplementInterface(GetType(IEnumerable(Of Boolean))) Then
65                 Return Which.IsTrue(DirectCast(args, IEnumerable(Of Boolean)))
66             ElseIf type.ImplementInterface(GetType(IEnumerable(Of Object))) Then
67                 Dim array = DirectCast(args, IEnumerable(Of Object)).ToArray
68
69                 With array(Scan0).GetType
70                     If .ByRef Is GetType(Boolean) Then
71                         Return Which.IsTrue(array.Select(Function(o) CBool(o)))
72                     ElseIf .ByRef Is GetType(Integer) Then
73                         Return array.Select(Function(o) CInt(o))
74                     Else
75                         Throw New NotImplementedException
76                     End If
77                 End With
78             Else
79                 Throw New NotImplementedException
80             End If
81         End Function
82 #End Region
83     End Module
84 End Namespace