@@ -390,6 +390,15 @@ function getindex(r::FloatRange, s::OrdinalRange)
390
390
FloatRange (r. start + (first (s)- 1 )* r. step, step (s)* r. step, sl, r. divisor)
391
391
end
392
392
393
+ function getindex {T} (r:: LinSpace{T} , s:: OrdinalRange )
394
+ sl = check_indexingrange (s, r)
395
+ ifirst = first (s)
396
+ ilast = last (s)
397
+ LinSpace {T} (((r. len - ifirst) * r. start + (ifirst - 1 ) * r. stop) / r. divisor,
398
+ ((r. len - ilast) * r. start + (ilast - 1 ) * r. stop) / r. divisor,
399
+ sl, sl - 1 )
400
+ end
401
+
393
402
function show (io:: IO , r:: Range )
394
403
print (io, repr (first (r)), ' :' , repr (step (r)), ' :' , repr (last (r)))
395
404
end
@@ -538,27 +547,34 @@ end
538
547
539
548
- (r:: OrdinalRange ) = range (- r. start, - step (r), length (r))
540
549
- (r:: FloatRange ) = FloatRange (- r. start, - r. step, r. len, r. divisor)
550
+ - (r:: LinSpace ) = LinSpace (- r. start, - r. stop, r. len, r. divisor)
541
551
542
552
.+ (x:: Real , r:: UnitRange ) = range (x + r. start, length (r))
543
553
.+ (x:: Real , r:: Range ) = (x+ first (r)): step (r): (x+ last (r))
544
554
# .+(x::Real, r::StepRange) = range(x + r.start, r.step, length(r))
545
555
.+ (x:: Real , r:: FloatRange ) = FloatRange (r. divisor* x + r. start, r. step, r. len, r. divisor)
556
+ .+ (x:: Real , r:: LinSpace ) = LinSpace (x + r. start, x + r. stop, r. len, r. divisor)
546
557
.+ (r:: Range , x:: Real ) = x + r
547
558
# .+(r::FloatRange, x::Real) = x + r
548
559
549
560
.- (x:: Real , r:: Range ) = (x- first (r)): - step (r): (x- last (r))
550
561
.- (x:: Real , r:: FloatRange ) = FloatRange (r. divisor* x - r. start, - r. step, r. len, r. divisor)
562
+ .- (x:: Real , r:: LinSpace ) = LinSpace (x - r. start, x - r. stop, r. len, r. divisor)
551
563
.- (r:: UnitRange , x:: Real ) = range (r. start- x, length (r))
552
564
.- (r:: StepRange , x:: Real ) = range (r. start- x, r. step, length (r))
553
565
.- (r:: FloatRange , x:: Real ) = FloatRange (r. start - r. divisor* x, r. step, r. len, r. divisor)
566
+ .- (r:: LinSpace , x:: Real ) = LinSpace (r. start - x, r. stop - x, r. len, r. divisor)
554
567
555
568
.* (x:: Real , r:: OrdinalRange ) = range (x* r. start, x* step (r), length (r))
556
569
.* (x:: Real , r:: FloatRange ) = FloatRange (x* r. start, x* r. step, r. len, r. divisor)
570
+ .* (x:: Real , r:: LinSpace ) = LinSpace (x * r. start, x * r. stop, r. len, r. divisor)
557
571
.* (r:: Range , x:: Real ) = x .* r
558
572
.* (r:: FloatRange , x:: Real ) = x .* r
573
+ .* (r:: LinSpace , x:: Real ) = x .* r
559
574
560
575
./ (r:: OrdinalRange , x:: Real ) = range (r. start/ x, step (r)/ x, length (r))
561
576
./ (r:: FloatRange , x:: Real ) = FloatRange (r. start/ x, r. step/ x, r. len, r. divisor)
577
+ ./ (r:: LinSpace , x:: Real ) = LinSpace (r. start / x, r. stop / x, r. len, r. divisor)
562
578
563
579
promote_rule {T1,T2} (:: Type{UnitRange{T1}} ,:: Type{UnitRange{T2}} ) =
564
580
UnitRange{promote_type (T1,T2)}
@@ -589,6 +605,19 @@ convert{T}(::Type{FloatRange{T}}, r::OrdinalRange) =
589
605
convert {T} (:: Type{FloatRange} , r:: OrdinalRange{T} ) =
590
606
FloatRange {typeof(float(first(r)))} (first (r), step (r), length (r), one (T))
591
607
608
+ promote_rule {T1,T2} (:: Type{LinSpace{T1}} ,:: Type{LinSpace{T2}} ) =
609
+ LinSpace{promote_type (T1,T2)}
610
+ convert {T} (:: Type{LinSpace{T}} , r:: LinSpace{T} ) = r
611
+ convert {T} (:: Type{LinSpace{T}} , r:: LinSpace ) =
612
+ LinSpace {T} (r. start, r. stop, r. len, r. divisor)
613
+
614
+ promote_rule {F,OR<:OrdinalRange} (:: Type{LinSpace{F}} , :: Type{OR} ) =
615
+ LinSpace{promote_type (F,eltype (OR))}
616
+ convert {T} (:: Type{LinSpace{T}} , r:: OrdinalRange ) =
617
+ LinSpace {T} (first (r), step (r), length (r), one (T))
618
+ convert {T} (:: Type{LinSpace} , r:: OrdinalRange{T} ) =
619
+ LinSpace {typeof(float(first(r)))} (first (r), last (r), length (r), one (T))
620
+
592
621
593
622
# +/- of ranges is defined in operators.jl (to be able to use @eval etc.)
594
623
@@ -630,6 +659,7 @@ collect(r::Range) = vcat(r)
630
659
631
660
reverse (r:: OrdinalRange ) = colon (last (r), - step (r), first (r))
632
661
reverse (r:: FloatRange ) = FloatRange (r. start + (r. len- 1 )* r. step, - r. step, r. len, r. divisor)
662
+ reverse (r:: LinSpace ) = LinSpace (r. stop, r. start, r. len, r. divisor)
633
663
634
664
# # sorting ##
635
665
0 commit comments