@@ -90,11 +90,12 @@ macro fixed_vector(name, parent)
90
90
immutable $ (name){S, T} <: $ (parent){T}
91
91
data:: NTuple{S, T}
92
92
93
- function $ (name)(x:: NTuple{S,T} )
94
- new (x)
93
+ function ( :: Type{ $(name){S, T}} ){S, T} (x:: NTuple{S,T} )
94
+ new {S, T} (x)
95
95
end
96
- function $ (name)(x:: NTuple{S} )
97
- new (StaticArrays. convert_ntuple (T, x))
96
+
97
+ function (:: Type{$(name){S, T}} ){S, T}(x:: NTuple{S,Any} )
98
+ new {S, T} (StaticArrays. convert_ntuple (T, x))
98
99
end
99
100
end
100
101
# Array constructor
@@ -122,6 +123,19 @@ macro fixed_vector(name, parent)
122
123
@inline function (:: Type{$(name){S}} ){S, T <: Tuple }(x:: T )
123
124
$ (name){S, StaticArrays. promote_tuple_eltype (T)}(x)
124
125
end
126
+ (:: Type{$(name){S, T}} ){S, T}(x:: StaticVector ) = $ (name){S, T}(Tuple (x))
127
+ @generated function (:: Type{$(name){S, T}} ){S, T}(x:: $ (name))
128
+ idx = [:(x[$ i]) for i = 1 : S]
129
+ quote
130
+ $ ($ (name)){S, T}($ (idx... ))
131
+ end
132
+ end
133
+ @generated function convert {S, T} (:: Type{$(name){S, T}} , x:: $ (name))
134
+ idx = [:(x[$ i]) for i = 1 : S]
135
+ quote
136
+ $ ($ (name)){S, T}($ (idx... ))
137
+ end
138
+ end
125
139
@generated function (:: Type{SV} ){SV <: $ (name)}(x:: StaticVector )
126
140
len = size_or (SV, size (x))[1 ]
127
141
if length (x) == len
@@ -134,37 +148,46 @@ macro fixed_vector(name, parent)
134
148
end
135
149
end
136
150
137
- Base. @pure StaticArrays. Size {S} (:: Type{$(name){S}} ) = Size (S)
151
+ Base. @pure StaticArrays. Size {S} (:: Type{$(name){S, Any }} ) = Size (S)
138
152
Base. @pure StaticArrays. Size {S,T} (:: Type{$(name){S, T}} ) = Size (S)
139
153
140
- Base. @propagate_inbounds function Base. getindex (v:: $ (name), i:: Integer )
154
+ Base. @propagate_inbounds function Base. getindex {S, T} (v:: $ (name){S, T}, i:: Int )
141
155
v. data[i]
142
156
end
143
157
@inline Base. Tuple (v:: $ (name)) = v. data
144
158
@inline Base. convert {S, T} (:: Type{$(name){S, T}} , x:: NTuple{S, T} ) = $ (name){S, T}(x)
145
- @inline Base. convert {SV <: $(name)} ( :: Type{SV } , x:: StaticVector ) = SV (x)
159
+ @inline Base. convert ( :: Type{$(name) } , x:: StaticVector ) = SV (x)
146
160
@inline function Base. convert {S, T} (:: Type{$(name){S, T}} , x:: Tuple )
147
161
$ (name){S, T}(convert (NTuple{S, T}, x))
148
162
end
149
163
150
- @generated function StaticArrays. similar_type {SV <: $(name), T,S} (:: Type{SV} , :: Type{T} , s:: Size{S} )
164
+ @generated function StaticArrays. similar_type {SV <: $(name), T, S} (:: Type{SV} , :: Type{T} , s:: Size{S} )
151
165
if length (S) === 1
152
166
$ (name){S[1 ], T}
153
167
else
154
168
StaticArrays. default_similar_type (T,s (),Val{length (S)})
155
169
end
156
170
end
157
-
158
-
171
+ size_or (:: Type{$(name)} , or) = or
159
172
eltype_or (:: Type{$(name)} , or) = or
160
- eltype_or {T} (:: Type{$(name){TypeVar(:S), T}} , or) = T
161
- eltype_or {S} (:: Type{$(name){S, TypeVar(:T)}} , or) = or
162
- eltype_or {S, T} (:: Type{$(name){S, T}} , or) = T
163
173
164
- size_or (:: Type{$(name)} , or) = or
165
- size_or {T} (:: Type{$(name){TypeVar(:S), T}} , or) = or
166
- size_or {S} (:: Type{$(name){S, TypeVar(:T)}} , or) = (S,)
167
- size_or {S, T} (:: Type{$(name){S, T}} , or) = (S,)
174
+ if VERSION < v " 0.6.0-dev"
175
+ eltype_or {T} (:: Type{$(name){TypeVar(:S), T}} , or) = T
176
+ eltype_or {S} (:: Type{$(name){S, TypeVar(:T)}} , or) = or
177
+ eltype_or {S, T} (:: Type{$(name){S, T}} , or) = T
178
+
179
+ size_or {T} (:: Type{$(name){S where S, T}} , or) = or
180
+ size_or {S} (:: Type{$(name){S, T where T}} , or) = Size {(S,)} ()
181
+ size_or {S, T} (:: Type{$(name){S, T}} , or) = (S,)
182
+ else
183
+ eltype_or {T} (:: Type{$(name){S, T} where S} , or) = T
184
+ eltype_or {S} (:: Type{$(name){S, T} where T} , or) = or
185
+ eltype_or {S, T} (:: Type{$(name){S, T}} , or) = T
186
+
187
+ size_or {T} (:: Type{$(name){S, T} where S} , or) = or
188
+ size_or {S} (:: Type{$(name){S, T} where T} , or) = Size {(S,)} ()
189
+ size_or {S, T} (:: Type{$(name){S, T}} , or) = (S,)
190
+ end
168
191
end )
169
192
end
170
193
0 commit comments