Re: Durations in existing JDK APIs

classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

Re: Durations in existing JDK APIs

JSR166 Concurrency mailing list
v.0.2 has both conversion methods in TimeUnit.  The unexpected weirdness is that convert(Duration) saturates while toDuration throws ArithmeticException, but both seem author-culture-consistent.  Perhaps TimeUnit#toDuration doesn't provide enough value in view of the existing Duration.of and TimeUnit#toChronoUnit.  And most of the time you'd expect to convert from Duration to long, just before calling a TimeUnit based method.

    /**
     * Converts the given time duration to this unit.
     *
     * @param duration the time duration
     * @return the converted duration in this unit,
     * or {@code Long.MIN_VALUE} if conversion would negatively overflow,
     * or {@code Long.MAX_VALUE} if it would positively overflow.
     * @throws NullPointerException if {@code duration} is null
     */
    public long convert(Duration duration) {
        long s = convert(duration.getSeconds(), SECONDS);
        if (s == Long.MIN_VALUE) return s;
        long n = convert(duration.getNano(), NANOSECONDS);
        assert n >= 0 && n < 1_000_000_000;
        return (s + n < s) ? Long.MAX_VALUE : s + n;
    }

    /**
     * Converts the given time duration in this unit to a Duration.
     *
     * @param duration the time duration
     * @return the time duration represented as a Duration
     * @throws ArithmeticException if the duration cannot be represented
     * as a Duration due to numeric overflow
     */
    public Duration toDuration(long duration) {
        return Duration.of(duration, toChronoUnit());
    }


_______________________________________________
Concurrency-interest mailing list
[hidden email]
http://cs.oswego.edu/mailman/listinfo/concurrency-interest
Reply | Threaded
Open this post in threaded view
|

Re: Durations in existing JDK APIs

JSR166 Concurrency mailing list
I am not sure I understand this implementation, but isn’t

>        long s = convert(duration.getSeconds(), SECONDS);

needing to actually be

>        long s = convert(duration.getSeconds(), NANOSECONDS);

so that s+n is in a common unit of measure?

Gregg

> On May 30, 2018, at 7:19 PM, Martin Buchholz via Concurrency-interest <[hidden email]> wrote:
>
> v.0.2 has both conversion methods in TimeUnit.  The unexpected weirdness is that convert(Duration) saturates while toDuration throws ArithmeticException, but both seem author-culture-consistent.  Perhaps TimeUnit#toDuration doesn't provide enough value in view of the existing Duration.of and TimeUnit#toChronoUnit.  And most of the time you'd expect to convert from Duration to long, just before calling a TimeUnit based method.
>
>     /**
>      * Converts the given time duration to this unit.
>      *
>      * @param duration the time duration
>      * @return the converted duration in this unit,
>      * or {@code Long.MIN_VALUE} if conversion would negatively overflow,
>      * or {@code Long.MAX_VALUE} if it would positively overflow.
>      * @throws NullPointerException if {@code duration} is null
>      */
>     public long convert(Duration duration) {
>         long s = convert(duration.getSeconds(), SECONDS);
>         if (s == Long.MIN_VALUE) return s;
>         long n = convert(duration.getNano(), NANOSECONDS);
>         assert n >= 0 && n < 1_000_000_000;
>         return (s + n < s) ? Long.MAX_VALUE : s + n;
>     }
>
>     /**
>      * Converts the given time duration in this unit to a Duration.
>      *
>      * @param duration the time duration
>      * @return the time duration represented as a Duration
>      * @throws ArithmeticException if the duration cannot be represented
>      * as a Duration due to numeric overflow
>      */
>     public Duration toDuration(long duration) {
>         return Duration.of(duration, toChronoUnit());
>     }
>
> _______________________________________________
> Concurrency-interest mailing list
> [hidden email]
> http://cs.oswego.edu/mailman/listinfo/concurrency-interest

_______________________________________________
Concurrency-interest mailing list
[hidden email]
http://cs.oswego.edu/mailman/listinfo/concurrency-interest