serde-generate/runtime/dart/serde/int_128.dart (34 lines of code) (raw):
// Copyright (c) Facebook, Inc. and its affiliates
// SPDX-License-Identifier: MIT OR Apache-2.0
part of serde;
@immutable
class Int128 {
Int128(this.high, this.low);
factory Int128.parse(String num, {int? radix}) {
return Int128.fromBigInt(BigInt.parse(num, radix: radix));
}
factory Int128.fromBigInt(BigInt num) {
final input = num.toSigned(128);
final high = (input >> 64).toSigned(64);
final low = (input & BigInt.from(0xFFFFFFFFFFFFFFFF)).toSigned(64);
return Int128(high, low);
}
final BigInt high;
final BigInt low;
@override
bool operator ==(Object other) {
if (identical(this, other)) return true;
if (other.runtimeType != runtimeType) return false;
return other is Int128 &&
high.toSigned(64) == other.high.toSigned(64) &&
low.toUnsigned(64) == other.low.toUnsigned(64);
}
@override
int get hashCode => Object.hash(
high,
low,
);
@override
String toString() {
return toBigInt().toString();
}
BigInt toBigInt() => (high.toSigned(64) << 64) + low.toUnsigned(64);
}