From fcd9772e00824a3526cec53ff9113783a36a5b7b Mon Sep 17 00:00:00 2001 From: Christien Rioux Date: Mon, 7 Aug 2023 14:26:58 -0700 Subject: [PATCH] improve timestamp --- veilid-flutter/lib/veilid.dart | 27 +++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/veilid-flutter/lib/veilid.dart b/veilid-flutter/lib/veilid.dart index 378cc732..84709a11 100644 --- a/veilid-flutter/lib/veilid.dart +++ b/veilid-flutter/lib/veilid.dart @@ -60,10 +60,11 @@ class VeilidVersion extends Equatable { ////////////////////////////////////// /// Timestamp @immutable -class Timestamp extends Equatable { +class Timestamp extends Equatable implements Comparable { const Timestamp({required this.value}); - factory Timestamp.fromInt64(Int64 i64) => - Timestamp(value: BigInt.parse(i64.toStringUnsigned())); + factory Timestamp.fromInt64(Int64 i64) => Timestamp( + value: (BigInt.from((i64 >> 32).toUnsigned(32).toInt()) << 32) | + BigInt.from(i64.toUnsigned(32).toInt())); factory Timestamp.fromString(String s) => Timestamp(value: BigInt.parse(s)); factory Timestamp.fromJson(dynamic json) => Timestamp.fromString(json as String); @@ -71,10 +72,14 @@ class Timestamp extends Equatable { @override List get props => [value]; + @override + int compareTo(Timestamp other) => value.compareTo(other.value); + @override String toString() => value.toString(); String toJson() => toString(); - Int64 toInt64() => Int64.parseInt(value.toString()); + Int64 toInt64() => Int64.fromInts( + (value >> 32).toUnsigned(32).toInt(), value.toUnsigned(32).toInt()); TimestampDuration diff(Timestamp other) => TimestampDuration(value: value - other.value); @@ -84,10 +89,12 @@ class Timestamp extends Equatable { } @immutable -class TimestampDuration extends Equatable { +class TimestampDuration extends Equatable + implements Comparable { const TimestampDuration({required this.value}); - factory TimestampDuration.fromInt64(Int64 i64) => - TimestampDuration(value: BigInt.parse(i64.toStringUnsigned())); + factory TimestampDuration.fromInt64(Int64 i64) => TimestampDuration( + value: (BigInt.from((i64 >> 32).toUnsigned(32).toInt()) << 32) | + BigInt.from(i64.toUnsigned(32).toInt())); factory TimestampDuration.fromString(String s) => TimestampDuration(value: BigInt.parse(s)); factory TimestampDuration.fromJson(dynamic json) => @@ -96,10 +103,14 @@ class TimestampDuration extends Equatable { @override List get props => [value]; + @override + int compareTo(TimestampDuration other) => value.compareTo(other.value); + @override String toString() => value.toString(); String toJson() => toString(); - Int64 toInt64() => Int64.parseInt(value.toString()); + Int64 toInt64() => Int64.fromInts( + (value >> 32).toUnsigned(32).toInt(), value.toUnsigned(32).toInt()); int toMillis() => (value ~/ BigInt.from(1000)).toInt(); BigInt toMicros() => value;