multiarray 0.5.1 → 0.5.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/Rakefile +3 -3
- data/TODO +7 -31
- data/lib/multiarray.rb +8 -4
- data/lib/multiarray/complex.rb +360 -0
- data/lib/multiarray/composite.rb +65 -0
- data/lib/multiarray/diagonal.rb +8 -0
- data/lib/multiarray/element.rb +3 -3
- data/lib/multiarray/{unarymethod.rb → elementwise.rb} +66 -44
- data/lib/multiarray/gccfunction.rb +14 -20
- data/lib/multiarray/gcctype.rb +8 -8
- data/lib/multiarray/gccvalue.rb +57 -15
- data/lib/multiarray/inject.rb +10 -2
- data/lib/multiarray/lambda.rb +21 -3
- data/lib/multiarray/lookup.rb +8 -0
- data/lib/multiarray/methods.rb +10 -4
- data/lib/multiarray/node.rb +80 -15
- data/lib/multiarray/operations.rb +193 -12
- data/lib/multiarray/pointer.rb +19 -0
- data/lib/multiarray/rgb.rb +15 -45
- data/lib/multiarray/sequence.rb +34 -5
- data/test/tc_float.rb +20 -41
- data/test/tc_int.rb +10 -0
- data/test/tc_multiarray.rb +225 -49
- data/test/tc_object.rb +11 -0
- data/test/tc_rgb.rb +15 -0
- data/test/tc_sequence.rb +224 -11
- metadata +13 -9
- data/lib/multiarray/binarymethod.rb +0 -195
- data/lib/multiarray/binaryop.rb +0 -189
- data/lib/multiarray/unaryop.rb +0 -179
@@ -1,195 +0,0 @@
|
|
1
|
-
# multiarray - Lazy multi-dimensional arrays for Ruby
|
2
|
-
# Copyright (C) 2010 Jan Wedekind
|
3
|
-
#
|
4
|
-
# This program is free software: you can redistribute it and/or modify
|
5
|
-
# it under the terms of the GNU General Public License as published by
|
6
|
-
# the Free Software Foundation, either version 3 of the License, or
|
7
|
-
# (at your option) any later version.
|
8
|
-
#
|
9
|
-
# This program is distributed in the hope that it will be useful,
|
10
|
-
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
11
|
-
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
12
|
-
# GNU General Public License for more details.
|
13
|
-
#
|
14
|
-
# You should have received a copy of the GNU General Public License
|
15
|
-
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
16
|
-
|
17
|
-
# Namespace of Hornetseye computer vision library
|
18
|
-
module Hornetseye
|
19
|
-
|
20
|
-
# Class for representing binary operations on scalars and arrays
|
21
|
-
class BinaryMethod_ < Node
|
22
|
-
|
23
|
-
class << self
|
24
|
-
|
25
|
-
# Name of module
|
26
|
-
#
|
27
|
-
# @return [Module] The module with the method.
|
28
|
-
attr_accessor :mod
|
29
|
-
|
30
|
-
# Name of operation
|
31
|
-
#
|
32
|
-
# @return [Symbol,String] The name of this operation.
|
33
|
-
attr_accessor :operation
|
34
|
-
|
35
|
-
# Name of method for type conversion
|
36
|
-
#
|
37
|
-
# @return [Symbol,String] The name of the method for type conversion.
|
38
|
-
attr_accessor :coercion
|
39
|
-
|
40
|
-
# Get string with information about this class
|
41
|
-
#
|
42
|
-
# @return [String] Return string with information about this class.
|
43
|
-
def inspect
|
44
|
-
"#{mod.to_s}.#{operation.to_s}"
|
45
|
-
end
|
46
|
-
|
47
|
-
# Get unique descriptor of this class
|
48
|
-
#
|
49
|
-
# @param [Hash] hash Labels for any variables.
|
50
|
-
#
|
51
|
-
# @return [String] Descriptor of this class.
|
52
|
-
#
|
53
|
-
# @private
|
54
|
-
def descriptor( hash )
|
55
|
-
inspect
|
56
|
-
end
|
57
|
-
|
58
|
-
end
|
59
|
-
|
60
|
-
# Initialise binary operation
|
61
|
-
#
|
62
|
-
# @param [Node] value1 First operand to apply operation to.
|
63
|
-
# @param [Node] value2 Second operand to apply operation to.
|
64
|
-
def initialize( value1, value2 )
|
65
|
-
@value1, @value2 = value1, value2
|
66
|
-
end
|
67
|
-
|
68
|
-
# Get unique descriptor of this object
|
69
|
-
#
|
70
|
-
# @param [Hash] hash Labels for any variables.
|
71
|
-
#
|
72
|
-
# @return [String] Descriptor of this object,
|
73
|
-
#
|
74
|
-
# @private
|
75
|
-
def descriptor( hash )
|
76
|
-
"#{self.class.descriptor( hash )}(#{@value1.descriptor( hash )})," +
|
77
|
-
"(#{@value2.descriptor( hash )})"
|
78
|
-
end
|
79
|
-
|
80
|
-
# Array type of this term
|
81
|
-
#
|
82
|
-
# @return [Class] Resulting array type.
|
83
|
-
#
|
84
|
-
# @private
|
85
|
-
def array_type
|
86
|
-
@value1.array_type.send self.class.coercion, @value2.array_type
|
87
|
-
end
|
88
|
-
|
89
|
-
# Substitute variables
|
90
|
-
#
|
91
|
-
# Substitute the variables with the values given in the hash.
|
92
|
-
#
|
93
|
-
# @param [Hash] hash Substitutions to apply.
|
94
|
-
#
|
95
|
-
# @return [Node] Term with substitutions applied.
|
96
|
-
#
|
97
|
-
# @private
|
98
|
-
def subst( hash )
|
99
|
-
self.class.new @value1.subst( hash ), @value2.subst( hash )
|
100
|
-
end
|
101
|
-
|
102
|
-
# Get variables contained in this term
|
103
|
-
#
|
104
|
-
# @return [Set] Returns set of variables.
|
105
|
-
#
|
106
|
-
# @private
|
107
|
-
def variables
|
108
|
-
@value1.variables + @value2.variables
|
109
|
-
end
|
110
|
-
|
111
|
-
# Strip of all values
|
112
|
-
#
|
113
|
-
# Split up into variables, values, and a term where all values have been
|
114
|
-
# replaced with variables.
|
115
|
-
#
|
116
|
-
# @return [Array<Array,Node>] Returns an array of variables, an array of
|
117
|
-
# values, and the term based on variables.
|
118
|
-
#
|
119
|
-
# @private
|
120
|
-
def strip
|
121
|
-
vars1, values1, term1 = @value1.strip
|
122
|
-
vars2, values2, term2 = @value2.strip
|
123
|
-
return vars1 + vars2, values1 + values2, self.class.new( term1, term2 )
|
124
|
-
end
|
125
|
-
|
126
|
-
# Reevaluate computation
|
127
|
-
#
|
128
|
-
# @return [Node,Object] Result of computation
|
129
|
-
#
|
130
|
-
# @see #force
|
131
|
-
#
|
132
|
-
# @private
|
133
|
-
def demand
|
134
|
-
self.class.mod.send self.class.operation, @value1, @value2
|
135
|
-
end
|
136
|
-
|
137
|
-
def skip( index, start )
|
138
|
-
element1 = @value1.skip( index, start )
|
139
|
-
element2 = @value2.skip( index, start )
|
140
|
-
self.class.new( element1, element2 ).demand
|
141
|
-
end
|
142
|
-
|
143
|
-
# Get element of unary operation
|
144
|
-
#
|
145
|
-
# @param [Integer,Node] i Index of desired element.
|
146
|
-
#
|
147
|
-
# @return [Node,Object] Element of unary operation.
|
148
|
-
def element( i )
|
149
|
-
element1 = @value1.dimension == 0 ? @value1 : @value1.element( i )
|
150
|
-
element2 = @value2.dimension == 0 ? @value2 : @value2.element( i )
|
151
|
-
self.class.new( element1, element2 ).demand
|
152
|
-
end
|
153
|
-
|
154
|
-
def slice( start, length )
|
155
|
-
element1 = @value1.dimension == 0 ? @value1 :
|
156
|
-
@value1.slice( start, length )
|
157
|
-
element2 = @value2.dimension == 0 ? @value2 :
|
158
|
-
@value2.slice( start, length )
|
159
|
-
self.class.new( element1, element2 ).demand
|
160
|
-
end
|
161
|
-
|
162
|
-
# Check whether this term is compilable
|
163
|
-
#
|
164
|
-
# @return [FalseClass,TrueClass] Returns whether this term is compilable.
|
165
|
-
#
|
166
|
-
# @private
|
167
|
-
def compilable?
|
168
|
-
@value1.compilable? and @value2.compilable?
|
169
|
-
end
|
170
|
-
|
171
|
-
end
|
172
|
-
|
173
|
-
# Create a class deriving from +BinaryMethod_+
|
174
|
-
#
|
175
|
-
# @param [Symbol,String] operation Name of operation.
|
176
|
-
# @param [Symbol,String] conversion Name of method for type conversion.
|
177
|
-
#
|
178
|
-
# @return [Class] A class deriving from +BinaryMethod_+.
|
179
|
-
#
|
180
|
-
# @see BinaryMethod_
|
181
|
-
# @see BinaryMethod_.operation
|
182
|
-
# @see BinaryMethod_.coercion
|
183
|
-
#
|
184
|
-
# @private
|
185
|
-
def BinaryMethod( mod, operation, coercion = :coercion )
|
186
|
-
retval = Class.new BinaryMethod_
|
187
|
-
retval.mod = mod
|
188
|
-
retval.operation = operation
|
189
|
-
retval.coercion = coercion
|
190
|
-
retval
|
191
|
-
end
|
192
|
-
|
193
|
-
module_function :BinaryMethod
|
194
|
-
|
195
|
-
end
|
data/lib/multiarray/binaryop.rb
DELETED
@@ -1,189 +0,0 @@
|
|
1
|
-
# multiarray - Lazy multi-dimensional arrays for Ruby
|
2
|
-
# Copyright (C) 2010 Jan Wedekind
|
3
|
-
#
|
4
|
-
# This program is free software: you can redistribute it and/or modify
|
5
|
-
# it under the terms of the GNU General Public License as published by
|
6
|
-
# the Free Software Foundation, either version 3 of the License, or
|
7
|
-
# (at your option) any later version.
|
8
|
-
#
|
9
|
-
# This program is distributed in the hope that it will be useful,
|
10
|
-
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
11
|
-
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
12
|
-
# GNU General Public License for more details.
|
13
|
-
#
|
14
|
-
# You should have received a copy of the GNU General Public License
|
15
|
-
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
16
|
-
|
17
|
-
# Namespace of Hornetseye computer vision library
|
18
|
-
module Hornetseye
|
19
|
-
|
20
|
-
# Class for representing binary operations on scalars and arrays
|
21
|
-
class BinaryOp_ < Node
|
22
|
-
|
23
|
-
class << self
|
24
|
-
|
25
|
-
# Name of operation
|
26
|
-
#
|
27
|
-
# @return [Symbol,String] The name of this operation.
|
28
|
-
attr_accessor :operation
|
29
|
-
|
30
|
-
# Name of method for type conversion
|
31
|
-
#
|
32
|
-
# @return [Symbol,String] The name of the method for type conversion.
|
33
|
-
attr_accessor :coercion
|
34
|
-
|
35
|
-
# Get string with information about this class
|
36
|
-
#
|
37
|
-
# @return [String] Return string with information about this class.
|
38
|
-
def inspect
|
39
|
-
operation.to_s
|
40
|
-
end
|
41
|
-
|
42
|
-
# Get unique descriptor of this class
|
43
|
-
#
|
44
|
-
# @param [Hash] hash Labels for any variables.
|
45
|
-
#
|
46
|
-
# @return [String] Descriptor of this class.
|
47
|
-
#
|
48
|
-
# @private
|
49
|
-
def descriptor( hash )
|
50
|
-
inspect
|
51
|
-
end
|
52
|
-
|
53
|
-
end
|
54
|
-
|
55
|
-
# Initialise binary operation
|
56
|
-
#
|
57
|
-
# @param [Node] value1 First operand to apply operation to.
|
58
|
-
# @param [Node] value2 Second operand to apply operation to.
|
59
|
-
def initialize( value1, value2 )
|
60
|
-
@value1, @value2 = value1, value2
|
61
|
-
end
|
62
|
-
|
63
|
-
# Get unique descriptor of this object
|
64
|
-
#
|
65
|
-
# @param [Hash] hash Labels for any variables.
|
66
|
-
#
|
67
|
-
# @return [String] Descriptor of this object,
|
68
|
-
#
|
69
|
-
# @private
|
70
|
-
def descriptor( hash )
|
71
|
-
"(#{@value1.descriptor( hash )}).#{self.class.descriptor( hash )}" +
|
72
|
-
"(#{@value2.descriptor( hash )})"
|
73
|
-
end
|
74
|
-
|
75
|
-
# Array type of this term
|
76
|
-
#
|
77
|
-
# @return [Class] Resulting array type.
|
78
|
-
#
|
79
|
-
# @private
|
80
|
-
def array_type
|
81
|
-
@value1.array_type.send self.class.coercion, @value2.array_type
|
82
|
-
end
|
83
|
-
|
84
|
-
# Substitute variables
|
85
|
-
#
|
86
|
-
# Substitute the variables with the values given in the hash.
|
87
|
-
#
|
88
|
-
# @param [Hash] hash Substitutions to apply.
|
89
|
-
#
|
90
|
-
# @return [Node] Term with substitutions applied.
|
91
|
-
#
|
92
|
-
# @private
|
93
|
-
def subst( hash )
|
94
|
-
self.class.new @value1.subst( hash ), @value2.subst( hash )
|
95
|
-
end
|
96
|
-
|
97
|
-
# Get variables contained in this term
|
98
|
-
#
|
99
|
-
# @return [Set] Returns set of variables.
|
100
|
-
#
|
101
|
-
# @private
|
102
|
-
def variables
|
103
|
-
@value1.variables + @value2.variables
|
104
|
-
end
|
105
|
-
|
106
|
-
# Strip of all values
|
107
|
-
#
|
108
|
-
# Split up into variables, values, and a term where all values have been
|
109
|
-
# replaced with variables.
|
110
|
-
#
|
111
|
-
# @return [Array<Array,Node>] Returns an array of variables, an array of
|
112
|
-
# values, and the term based on variables.
|
113
|
-
#
|
114
|
-
# @private
|
115
|
-
def strip
|
116
|
-
vars1, values1, term1 = @value1.strip
|
117
|
-
vars2, values2, term2 = @value2.strip
|
118
|
-
return vars1 + vars2, values1 + values2, self.class.new( term1, term2 )
|
119
|
-
end
|
120
|
-
|
121
|
-
# Reevaluate computation
|
122
|
-
#
|
123
|
-
# @return [Node,Object] Result of computation
|
124
|
-
#
|
125
|
-
# @see #force
|
126
|
-
#
|
127
|
-
# @private
|
128
|
-
def demand
|
129
|
-
@value1.send self.class.operation, @value2
|
130
|
-
end
|
131
|
-
|
132
|
-
def skip( index, start )
|
133
|
-
element1 = @value1.skip( index, start )
|
134
|
-
element2 = @value2.skip( index, start )
|
135
|
-
self.class.new( element1, element2 ).demand
|
136
|
-
end
|
137
|
-
|
138
|
-
# Get element of unary operation
|
139
|
-
#
|
140
|
-
# @param [Integer,Node] i Index of desired element.
|
141
|
-
#
|
142
|
-
# @return [Node,Object] Element of unary operation.
|
143
|
-
def element( i )
|
144
|
-
element1 = @value1.dimension == 0 ? @value1 : @value1.element( i )
|
145
|
-
element2 = @value2.dimension == 0 ? @value2 : @value2.element( i )
|
146
|
-
self.class.new( element1, element2 ).demand
|
147
|
-
end
|
148
|
-
|
149
|
-
def slice( start, length )
|
150
|
-
element1 = @value1.dimension == 0 ? @value1 :
|
151
|
-
@value1.slice( start, length )
|
152
|
-
element2 = @value2.dimension == 0 ? @value2 :
|
153
|
-
@value2.slice( start, length )
|
154
|
-
self.class.new( element1, element2 ).demand
|
155
|
-
end
|
156
|
-
|
157
|
-
# Check whether this term is compilable
|
158
|
-
#
|
159
|
-
# @return [FalseClass,TrueClass] Returns whether this term is compilable.
|
160
|
-
#
|
161
|
-
# @private
|
162
|
-
def compilable?
|
163
|
-
@value1.compilable? and @value2.compilable?
|
164
|
-
end
|
165
|
-
|
166
|
-
end
|
167
|
-
|
168
|
-
# Create a class deriving from +BinaryOp_+
|
169
|
-
#
|
170
|
-
# @param [Symbol,String] operation Name of operation.
|
171
|
-
# @param [Symbol,String] conversion Name of method for type conversion.
|
172
|
-
#
|
173
|
-
# @return [Class] A class deriving from +BinaryOp_+.
|
174
|
-
#
|
175
|
-
# @see BinaryOp_
|
176
|
-
# @see BinaryOp_.operation
|
177
|
-
# @see BinaryOp_.coercion
|
178
|
-
#
|
179
|
-
# @private
|
180
|
-
def BinaryOp( operation, coercion = :coercion )
|
181
|
-
retval = Class.new BinaryOp_
|
182
|
-
retval.operation = operation
|
183
|
-
retval.coercion = coercion
|
184
|
-
retval
|
185
|
-
end
|
186
|
-
|
187
|
-
module_function :BinaryOp
|
188
|
-
|
189
|
-
end
|
data/lib/multiarray/unaryop.rb
DELETED
@@ -1,179 +0,0 @@
|
|
1
|
-
# multiarray - Lazy multi-dimensional arrays for Ruby
|
2
|
-
# Copyright (C) 2010 Jan Wedekind
|
3
|
-
#
|
4
|
-
# This program is free software: you can redistribute it and/or modify
|
5
|
-
# it under the terms of the GNU General Public License as published by
|
6
|
-
# the Free Software Foundation, either version 3 of the License, or
|
7
|
-
# (at your option) any later version.
|
8
|
-
#
|
9
|
-
# This program is distributed in the hope that it will be useful,
|
10
|
-
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
11
|
-
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
12
|
-
# GNU General Public License for more details.
|
13
|
-
#
|
14
|
-
# You should have received a copy of the GNU General Public License
|
15
|
-
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
16
|
-
|
17
|
-
# Namespace of Hornetseye computer vision library
|
18
|
-
module Hornetseye
|
19
|
-
|
20
|
-
# Class for representing unary operations on scalars and arrays
|
21
|
-
class UnaryOp_ < Node
|
22
|
-
|
23
|
-
class << self
|
24
|
-
|
25
|
-
# Name of operation
|
26
|
-
#
|
27
|
-
# @return [Symbol,String] The name of this operation.
|
28
|
-
attr_accessor :operation
|
29
|
-
|
30
|
-
# Name of method for type conversion
|
31
|
-
#
|
32
|
-
# @return [Symbol,String] The name of the method for type conversion.
|
33
|
-
attr_accessor :conversion
|
34
|
-
|
35
|
-
# Get string with information about this class
|
36
|
-
#
|
37
|
-
# @return [String] Return string with information about this class.
|
38
|
-
def inspect
|
39
|
-
operation.to_s
|
40
|
-
end
|
41
|
-
|
42
|
-
# Get unique descriptor of this class
|
43
|
-
#
|
44
|
-
# @param [Hash] hash Labels for any variables.
|
45
|
-
#
|
46
|
-
# @return [String] Descriptor of this class.
|
47
|
-
#
|
48
|
-
# @private
|
49
|
-
def descriptor( hash )
|
50
|
-
inspect
|
51
|
-
end
|
52
|
-
|
53
|
-
end
|
54
|
-
|
55
|
-
# Initialise unary operation
|
56
|
-
#
|
57
|
-
# @param [Node] value Value to apply operation to.
|
58
|
-
def initialize( value )
|
59
|
-
@value = value
|
60
|
-
end
|
61
|
-
|
62
|
-
# Get unique descriptor of this object
|
63
|
-
#
|
64
|
-
# @param [Hash] hash Labels for any variables.
|
65
|
-
#
|
66
|
-
# @return [String] Descriptor of this object,
|
67
|
-
#
|
68
|
-
# @private
|
69
|
-
def descriptor( hash )
|
70
|
-
"(#{@value.descriptor( hash )}).#{self.class.descriptor( hash )}"
|
71
|
-
end
|
72
|
-
|
73
|
-
# Array type of this term
|
74
|
-
#
|
75
|
-
# @return [Class] Resulting array type.
|
76
|
-
#
|
77
|
-
# @private
|
78
|
-
def array_type
|
79
|
-
@value.array_type.send self.class.conversion
|
80
|
-
end
|
81
|
-
|
82
|
-
# Substitute variables
|
83
|
-
#
|
84
|
-
# Substitute the variables with the values given in the hash.
|
85
|
-
#
|
86
|
-
# @param [Hash] hash Substitutions to apply.
|
87
|
-
#
|
88
|
-
# @return [Node] Term with substitutions applied.
|
89
|
-
#
|
90
|
-
# @private
|
91
|
-
def subst( hash )
|
92
|
-
self.class.new @value.subst( hash )
|
93
|
-
end
|
94
|
-
|
95
|
-
# Get variables contained in this term
|
96
|
-
#
|
97
|
-
# @return [Set] Returns set of variables.
|
98
|
-
#
|
99
|
-
# @private
|
100
|
-
def variables
|
101
|
-
@value.variables
|
102
|
-
end
|
103
|
-
|
104
|
-
# Strip of all values
|
105
|
-
#
|
106
|
-
# Split up into variables, values, and a term where all values have been
|
107
|
-
# replaced with variables.
|
108
|
-
#
|
109
|
-
# @return [Array<Array,Node>] Returns an array of variables, an array of
|
110
|
-
# values, and the term based on variables.
|
111
|
-
#
|
112
|
-
# @private
|
113
|
-
def strip
|
114
|
-
vars, values, term = @value.strip
|
115
|
-
return vars, values, self.class.new( term )
|
116
|
-
end
|
117
|
-
|
118
|
-
# Reevaluate computation
|
119
|
-
#
|
120
|
-
# @return [Node,Object] Result of computation
|
121
|
-
#
|
122
|
-
# @see #force
|
123
|
-
#
|
124
|
-
# @private
|
125
|
-
def demand
|
126
|
-
@value.send self.class.operation
|
127
|
-
end
|
128
|
-
|
129
|
-
def skip( index, start )
|
130
|
-
self.class.new( @value.skip( index, start ) ).demand
|
131
|
-
end
|
132
|
-
|
133
|
-
# Get element of unary operation
|
134
|
-
#
|
135
|
-
# @param [Integer,Node] i Index of desired element.
|
136
|
-
#
|
137
|
-
# @return [Node,Object] Element of unary operation.
|
138
|
-
def element( i )
|
139
|
-
self.class.new( @value.element( i ) ).demand
|
140
|
-
end
|
141
|
-
|
142
|
-
def slice( start, length )
|
143
|
-
self.class.new( @value.slice( start, length ) ).demand
|
144
|
-
end
|
145
|
-
|
146
|
-
# Check whether this term is compilable
|
147
|
-
#
|
148
|
-
# @return [FalseClass,TrueClass] Returns whether this term is compilable.
|
149
|
-
#
|
150
|
-
# @private
|
151
|
-
def compilable?
|
152
|
-
@value.compilable?
|
153
|
-
end
|
154
|
-
|
155
|
-
end
|
156
|
-
|
157
|
-
# Create a class deriving from +UnaryOp_+
|
158
|
-
#
|
159
|
-
# @param [Symbol,String] operation Name of operation.
|
160
|
-
# @param [Symbol,String] conversion Name of method for type conversion.
|
161
|
-
#
|
162
|
-
# @return [Class] A class deriving from +UnaryOp_+.
|
163
|
-
#
|
164
|
-
# @see UnaryOp_
|
165
|
-
# @see UnaryOp_.operation
|
166
|
-
# @see UnaryOp_.conversion
|
167
|
-
#
|
168
|
-
# @private
|
169
|
-
def UnaryOp( operation, conversion = :contiguous )
|
170
|
-
retval = Class.new UnaryOp_
|
171
|
-
retval.operation = operation
|
172
|
-
retval.conversion = conversion
|
173
|
-
retval
|
174
|
-
end
|
175
|
-
|
176
|
-
module_function :UnaryOp
|
177
|
-
|
178
|
-
end
|
179
|
-
|