Skip to content

Commit

Permalink
Merge pull request #63 from isaacl/opaqueIntSafer
Browse files Browse the repository at this point in the history
Add OpaqueIntSafer
  • Loading branch information
ornicar authored Oct 13, 2024
2 parents 72a58bd + da8b262 commit acc5262
Showing 1 changed file with 15 additions and 3 deletions.
18 changes: 15 additions & 3 deletions core/src/main/scala/newtypes.scala
Original file line number Diff line number Diff line change
Expand Up @@ -52,15 +52,15 @@ object newtypes:

trait OpaqueInt[A](using A =:= Int) extends TotalWrapper[A, Int]:
extension (inline a: A)
inline def unary_- = apply(-raw(a))
inline def unary_- : A = apply(-raw(a))
inline infix def >(inline o: Int): Boolean = raw(a) > o
inline infix def <(inline o: Int): Boolean = raw(a) < o
inline infix def >=(inline o: Int): Boolean = raw(a) >= o
inline infix def <=(inline o: Int): Boolean = raw(a) <= o
inline infix def +(inline o: Int): A = apply(raw(a) + o)
inline infix def -(inline o: Int): A = apply(raw(a) - o)
inline def atLeast(inline bot: Int): A = apply(math.max(raw(a), bot))
inline def atMost(inline top: Int): A = apply(math.min(raw(a), top))
inline def atLeast(inline bot: Int): A = apply(Math.max(raw(a), bot))
inline def atMost(inline top: Int): A = apply(Math.min(raw(a), top))
inline infix def >(inline o: A): Boolean = >(raw(o))
inline infix def <(inline o: A): Boolean = <(raw(o))
inline infix def >=(inline o: A): Boolean = >=(raw(o))
Expand All @@ -70,6 +70,18 @@ object newtypes:
inline def atLeast(inline bot: A): A = atLeast(raw(bot))
inline def atMost(inline top: A): A = atMost(raw(top))

trait OpaqueIntSafer[A](using A =:= Int) extends TotalWrapper[A, Int]:
extension (inline a: A)
inline def unary_- : A = apply(-raw(a))
inline infix def >(inline o: A): Boolean = raw(a) > raw(o)
inline infix def <(inline o: A): Boolean = raw(a) < raw(o)
inline infix def >=(inline o: A): Boolean = raw(a) >= raw(o)
inline infix def <=(inline o: A): Boolean = raw(a) <= raw(o)
inline infix def +(inline o: A): A = apply(raw(a) + raw(o))
inline infix def -(inline o: A): A = apply(raw(a) - raw(o))
inline def atLeast(inline bot: A): A = apply(Math.max(raw(a), raw(bot)))
inline def atMost(inline top: A): A = apply(Math.min(raw(a), raw(top)))

trait OpaqueLong[A](using A =:= Long) extends TotalWrapper[A, Long]
trait OpaqueDouble[A](using A =:= Double) extends TotalWrapper[A, Double]:
extension (inline a: A) inline def +(inline o: Int): A = apply(raw(a) + o)
Expand Down

0 comments on commit acc5262

Please sign in to comment.