Fix generator
This commit is contained in:
parent
a9abed7279
commit
c98b8d5d67
1 changed files with 35 additions and 49 deletions
|
@ -7,27 +7,18 @@ import 'package:libac_flutter/nbt/Stream.dart';
|
||||||
class UUID {
|
class UUID {
|
||||||
late final int LSB;
|
late final int LSB;
|
||||||
late final int MSB;
|
late final int MSB;
|
||||||
|
late final List<int> _bytes;
|
||||||
|
|
||||||
UUID(int msb, int lsb) {
|
UUID(int msb, int lsb) {
|
||||||
MSB = msb.abs();
|
MSB = msb;
|
||||||
LSB = lsb.abs();
|
LSB = lsb;
|
||||||
}
|
|
||||||
|
|
||||||
UUID.fromBytes(List<int> bytes) {
|
ByteLayer layer = ByteLayer();
|
||||||
int msb = 0;
|
layer.writeLong(MSB);
|
||||||
int lsb = 0;
|
layer.writeLong(LSB);
|
||||||
|
layer.resetPosition();
|
||||||
|
|
||||||
int i = 0;
|
_bytes = layer.readBytes(16);
|
||||||
for (i = 0; i < 8; ++i) {
|
|
||||||
msb = msb << 8 | bytes[i] & 255;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (i = 8; i < 16; ++i) {
|
|
||||||
lsb = lsb << 8 | bytes[i] & 255;
|
|
||||||
}
|
|
||||||
|
|
||||||
this.MSB = msb;
|
|
||||||
this.LSB = lsb;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static final UUID ZERO = UUID.generate(0);
|
static final UUID ZERO = UUID.generate(0);
|
||||||
|
@ -51,8 +42,24 @@ class UUID {
|
||||||
final msbString = segments.sublist(0, 3).join('');
|
final msbString = segments.sublist(0, 3).join('');
|
||||||
final lsbString = segments.sublist(3, 5).join('');
|
final lsbString = segments.sublist(3, 5).join('');
|
||||||
|
|
||||||
final msb = int.parse(msbString, radix: 16);
|
int msb = 0;
|
||||||
final lsb = int.parse(lsbString, radix: 16);
|
int lsb = 0;
|
||||||
|
|
||||||
|
int i = 0;
|
||||||
|
ByteLayer layer = ByteLayer();
|
||||||
|
for (i = 0; i < msbString.length; i += 2) {
|
||||||
|
int byte = int.parse(msbString.substring(i, i + 1), radix: 16);
|
||||||
|
layer.writeByte(byte);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = 0; i < lsbString.length; i += 2) {
|
||||||
|
int byte = int.parse(lsbString.substring(i, i + 1), radix: 16);
|
||||||
|
layer.writeByte(byte);
|
||||||
|
}
|
||||||
|
|
||||||
|
layer.resetPosition();
|
||||||
|
msb = layer.readLong();
|
||||||
|
lsb = layer.readLong();
|
||||||
|
|
||||||
return UUID(msb, lsb);
|
return UUID(msb, lsb);
|
||||||
} else
|
} else
|
||||||
|
@ -61,9 +68,11 @@ class UUID {
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String toString() {
|
String toString() {
|
||||||
final msbHex = MSB.toRadixString(16).padLeft(16, '0');
|
String hexBuilder = "";
|
||||||
final lsbHex = LSB.toRadixString(16).padLeft(16, '0');
|
for (int byte in _bytes) {
|
||||||
return '${msbHex.substring(0, 8)}-${msbHex.substring(8, 12)}-${msbHex.substring(12, 16)}-${lsbHex.substring(0, 4)}-${lsbHex.substring(4, 16)}';
|
hexBuilder += byte.toRadixString(16).padLeft(2, '0');
|
||||||
|
}
|
||||||
|
return '${hexBuilder.substring(0, 8)}-${hexBuilder.substring(8, 12)}-${hexBuilder.substring(12, 16)}-${hexBuilder.substring(16, 20)}-${hexBuilder.substring(20, 32)}';
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Returns the Most Significant Bits (MSB) long value of the UUID.
|
/// Returns the Most Significant Bits (MSB) long value of the UUID.
|
||||||
|
@ -94,47 +103,24 @@ class UUID {
|
||||||
|
|
||||||
ByteLayer layer = ByteLayer();
|
ByteLayer layer = ByteLayer();
|
||||||
|
|
||||||
if (!namespace.isEmpty) {
|
final namespaceBytes = utf8.encode(namespace);
|
||||||
final namespaceBytes = utf8.encode(namespace);
|
layer.writeBytes(namespaceBytes);
|
||||||
layer.writeBytes(namespaceBytes);
|
final nameBytes = utf8.encode(name);
|
||||||
}
|
layer.writeBytes(nameBytes);
|
||||||
|
|
||||||
if (!name.isEmpty) {
|
|
||||||
final nameBytes = utf8.encode(name);
|
|
||||||
layer.writeBytes(nameBytes);
|
|
||||||
}
|
|
||||||
|
|
||||||
var bytes = md5.convert(List.from(layer.bytes)).bytes;
|
var bytes = md5.convert(List.from(layer.bytes)).bytes;
|
||||||
layer.clear();
|
layer.clear();
|
||||||
layer.writeBytes(bytes);
|
layer.writeBytes(bytes);
|
||||||
|
|
||||||
layer.unsetSetBit(6, 0x0F, 0x30);
|
layer.unsetSetBit(6, 0x0F, 0x30);
|
||||||
print(
|
|
||||||
"Existing bit at position 8: ${layer.getBit(8).toRadixString(2)}:${layer.getBit(8)}");
|
|
||||||
layer.unsetSetBit(8, 0x3F, 0x80);
|
layer.unsetSetBit(8, 0x3F, 0x80);
|
||||||
print(
|
|
||||||
"New bit at position 8: ${layer.getBit(8).toRadixString(2)}:${layer.getBit(8)}");
|
|
||||||
|
|
||||||
layer.resetPosition();
|
|
||||||
|
|
||||||
String csv = "";
|
|
||||||
for (int byte in layer.readBytes(16)) {
|
|
||||||
csv += "0x${byte.toRadixString(16)}, ";
|
|
||||||
}
|
|
||||||
|
|
||||||
print("BYTES CSV: ${csv}");
|
|
||||||
|
|
||||||
layer.resetPosition();
|
layer.resetPosition();
|
||||||
|
|
||||||
var msb = layer.readUnsignedLong();
|
var msb = layer.readUnsignedLong();
|
||||||
var lsb = layer.readUnsignedLong();
|
var lsb = layer.readUnsignedLong();
|
||||||
|
|
||||||
if (msb < 0) print("Most significant bit is negative! ${msb}");
|
|
||||||
if (lsb < 0) print("Least significant bit is negative! ${lsb}");
|
|
||||||
|
|
||||||
print("Forming UUID using MSB-LSB - ${msb} - ${lsb}");
|
|
||||||
layer.resetPosition();
|
layer.resetPosition();
|
||||||
return UUID.fromBytes(layer.readBytes(16));
|
|
||||||
return UUID(msb, lsb);
|
return UUID(msb, lsb);
|
||||||
}
|
}
|
||||||
case 4:
|
case 4:
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue