Skip to content

Commit b7a6768

Browse files
committed
Updates to tgmath functions for CGFloat
These changes bring CGFloat in line with the other FloatingPoint types. Some of this stuff is now defined at the protocol level, so we can get rid of it at the concrete type level, with an obsoleted message. A couple other functions have been deprecated for all types, with protocol or tgmath replacements.
1 parent ca6be13 commit b7a6768

File tree

2 files changed

+35
-164
lines changed

2 files changed

+35
-164
lines changed

stdlib/public/SDK/CoreGraphics/CGFloat.swift.gyb

Lines changed: 33 additions & 162 deletions
Original file line numberDiff line numberDiff line change
@@ -499,175 +499,36 @@ public func %=(lhs: inout CGFloat, rhs: CGFloat) {
499499
// tgmath
500500
//===----------------------------------------------------------------------===//
501501

502-
@_transparent
503-
public func acos(_ x: CGFloat) -> CGFloat {
504-
return CGFloat(acos(x.native))
505-
}
506-
507-
@_transparent
508-
public func cos(_ x: CGFloat) -> CGFloat {
509-
return CGFloat(cos(x.native))
510-
}
511-
512-
@_transparent
513-
public func sin(_ x: CGFloat) -> CGFloat {
514-
return CGFloat(sin(x.native))
515-
}
516-
517-
@_transparent
518-
public func asin(_ x: CGFloat) -> CGFloat {
519-
return CGFloat(asin(x.native))
520-
}
521-
522-
@_transparent
523-
public func atan(_ x: CGFloat) -> CGFloat {
524-
return CGFloat(atan(x.native))
525-
}
526-
527-
@_transparent
528-
public func tan(_ x: CGFloat) -> CGFloat {
529-
return CGFloat(tan(x.native))
530-
}
531-
532-
@_transparent
533-
public func acosh(_ x: CGFloat) -> CGFloat {
534-
return CGFloat(acosh(x.native))
535-
}
536-
537-
@_transparent
538-
public func asinh(_ x: CGFloat) -> CGFloat {
539-
return CGFloat(asinh(x.native))
540-
}
541-
542-
@_transparent
543-
public func atanh(_ x: CGFloat) -> CGFloat {
544-
return CGFloat(atanh(x.native))
545-
}
546-
547-
@_transparent
548-
public func cosh(_ x: CGFloat) -> CGFloat {
549-
return CGFloat(cosh(x.native))
550-
}
551-
552-
@_transparent
553-
public func sinh(_ x: CGFloat) -> CGFloat {
554-
return CGFloat(sinh(x.native))
555-
}
556-
557-
@_transparent
558-
public func tanh(_ x: CGFloat) -> CGFloat {
559-
return CGFloat(tanh(x.native))
560-
}
561-
562-
@_transparent
563-
public func exp(_ x: CGFloat) -> CGFloat {
564-
return CGFloat(exp(x.native))
565-
}
566-
567-
@_transparent
568-
public func exp2(_ x: CGFloat) -> CGFloat {
569-
return CGFloat(exp2(x.native))
570-
}
571-
572-
@_transparent
573-
public func expm1(_ x: CGFloat) -> CGFloat {
574-
return CGFloat(expm1(x.native))
575-
}
576-
577-
@_transparent
578-
public func log(_ x: CGFloat) -> CGFloat {
579-
return CGFloat(log(x.native))
580-
}
581-
582-
@_transparent
583-
public func log10(_ x: CGFloat) -> CGFloat {
584-
return CGFloat(log10(x.native))
585-
}
586-
587-
@_transparent
588-
public func log2(_ x: CGFloat) -> CGFloat {
589-
return CGFloat(log2(x.native))
590-
}
591-
592-
@_transparent
593-
public func log1p(_ x: CGFloat) -> CGFloat {
594-
return CGFloat(log1p(x.native))
595-
}
596-
597-
@_transparent
598-
public func logb(_ x: CGFloat) -> CGFloat {
599-
return CGFloat(logb(x.native))
600-
}
601-
602-
@_transparent
603-
public func cbrt(_ x: CGFloat) -> CGFloat {
604-
return CGFloat(cbrt(x.native))
605-
}
606-
607-
@_transparent
608-
public func erf(_ x: CGFloat) -> CGFloat {
609-
return CGFloat(erf(x.native))
610-
}
611-
612-
@_transparent
613-
public func erfc(_ x: CGFloat) -> CGFloat {
614-
return CGFloat(erfc(x.native))
615-
}
616-
617-
@_transparent
618-
public func tgamma(_ x: CGFloat) -> CGFloat {
619-
return CGFloat(tgamma(x.native))
620-
}
621-
622-
@_transparent
623-
public func nearbyint(_ x: CGFloat) -> CGFloat {
624-
return CGFloat(nearbyint(x.native))
625-
}
626-
627-
@_transparent
628-
public func rint(_ x: CGFloat) -> CGFloat {
629-
return CGFloat(rint(x.native))
630-
}
631-
632-
@_transparent
633-
public func atan2(_ lhs: CGFloat, _ rhs: CGFloat) -> CGFloat {
634-
return CGFloat(atan2(lhs.native, rhs.native))
635-
}
636-
637-
@_transparent
638-
public func hypot(_ lhs: CGFloat, _ rhs: CGFloat) -> CGFloat {
639-
return CGFloat(hypot(lhs.native, rhs.native))
640-
}
641-
642-
@_transparent
643-
public func pow(_ lhs: CGFloat, _ rhs: CGFloat) -> CGFloat {
644-
return CGFloat(pow(lhs.native, rhs.native))
645-
}
646-
647-
@_transparent
648-
public func copysign(_ lhs: CGFloat, _ rhs: CGFloat) -> CGFloat {
649-
return CGFloat(copysign(lhs.native, rhs.native))
650-
}
502+
%{
503+
UnaryFunctions = [
504+
'acos', 'asin', 'atan', 'cos', 'sin', 'tan',
505+
'acosh', 'asinh', 'atanh', 'cosh', 'sinh', 'tanh',
506+
'exp', 'exp2', 'expm1',
507+
'log', 'log10', 'log1p', 'log2', 'logb',
508+
'cbrt', 'erf', 'erfc', 'tgamma',
509+
'nearbyint', 'rint'
510+
]
511+
512+
BinaryFunctions = [
513+
'atan2', 'hypot', 'pow', 'copysign', 'nextafter', 'fdim', 'fmax', 'fmin'
514+
]
515+
}%
651516

517+
%for ufunc in UnaryFunctions:
652518
@_transparent
653-
public func nextafter(_ lhs: CGFloat, _ rhs: CGFloat) -> CGFloat {
654-
return CGFloat(nextafter(lhs.native, rhs.native))
519+
public func ${ufunc}(_ x: CGFloat) -> CGFloat {
520+
return CGFloat(${ufunc}(x.native))
655521
}
656522

657-
@_transparent
658-
public func fdim(_ lhs: CGFloat, _ rhs: CGFloat) -> CGFloat {
659-
return CGFloat(fdim(lhs.native, rhs.native))
660-
}
523+
%end
661524

525+
%for bfunc in BinaryFunctions:
662526
@_transparent
663-
public func fmax(_ lhs: CGFloat, _ rhs: CGFloat) -> CGFloat {
664-
return CGFloat(fmax(lhs.native, rhs.native))
527+
public func ${bfunc}(_ lhs: CGFloat, _ rhs: CGFloat) -> CGFloat {
528+
return CGFloat(${bfunc}(lhs.native, rhs.native))
665529
}
666530

667-
@_transparent
668-
public func fmin(_ lhs: CGFloat, _ rhs: CGFloat) -> CGFloat {
669-
return CGFloat(fmin(lhs.native, rhs.native))
670-
}
531+
%end
671532

672533
@_transparent
673534
@available(*, unavailable, message: "use the floatingPointClass property.")
@@ -690,28 +551,36 @@ public func isnan(_ value: CGFloat) -> Bool { return value.isNaN }
690551
@available(*, unavailable, message: "use the sign property.")
691552
public func signbit(_ value: CGFloat) -> Int { return value.sign.rawValue }
692553

554+
// Generic implementation on FloatingPoint as of Swift 4.2
555+
@available(swift, obsoleted: 4.2)
693556
@_transparent
694557
public func modf(_ x: CGFloat) -> (CGFloat, CGFloat) {
695558
let (ipart, fpart) = modf(x.native)
696559
return (CGFloat(ipart), CGFloat(fpart))
697560
}
698561

562+
@available(swift, deprecated: 4.2, renamed: "scalbn")
699563
@_transparent
700564
public func ldexp(_ x: CGFloat, _ n: Int) -> CGFloat {
701565
return CGFloat(ldexp(x.native, n))
702566
}
703567

568+
// Generic implementation on FloatingPoint as of Swift 4.2
569+
@available(swift, obsoleted: 4.2)
704570
@_transparent
705571
public func frexp(_ x: CGFloat) -> (CGFloat, Int) {
706572
let (frac, exp) = frexp(x.native)
707573
return (CGFloat(frac), exp)
708574
}
709575

576+
@available(swift, deprecated: 4.2, message: "use the exponent property.")
710577
@_transparent
711578
public func ilogb(_ x: CGFloat) -> Int {
712-
return ilogb(x.native)
579+
return Int(x.exponent)
713580
}
714581

582+
// Generic implementation on FloatingPoint as of Swift 4.2
583+
@available(swift, obsoleted: 4.2)
715584
@_transparent
716585
public func scalbn(_ x: CGFloat, _ n: Int) -> CGFloat {
717586
return CGFloat(scalbn(x.native, n))
@@ -729,6 +598,8 @@ public func remquo(_ x: CGFloat, _ y: CGFloat) -> (CGFloat, Int) {
729598
return (CGFloat(rem), quo)
730599
}
731600

601+
@available(*, deprecated: 4.2, message:
602+
"use CGFloat(nan: CGFloat.RawSignificand) instead.")
732603
@_transparent
733604
public func nan(_ tag: String) -> CGFloat {
734605
return CGFloat(nan(tag) as CGFloat.NativeType)

test/stdlib/tgmath.swift.gyb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -189,8 +189,8 @@ extension ${T}: TGMath {
189189

190190
MathTests.test("${T}") {
191191
${T}.allTests()
192-
% if T == 'Double':
193-
// Functions that are defined only for Double
192+
% if T in ['Double','CGFloat']:
193+
// Functions that are defined only for Double and CGFloat
194194
expectEqualWithTolerance(0.99750156206604, j0(0.1), ulps: 16)
195195
expectEqualWithTolerance(0.049937526036242, j1(0.1), ulps: 16)
196196
expectEqualWithTolerance(1.2229926610356451e-22, jn(11, 0.1), ulps: 16)

0 commit comments

Comments
 (0)