parse method Null safety
Parses the provided uuid
into a list of byte values.
Can optionally be provided a buffer
to write into and
a positional offset
for where to start inputting into the buffer.
Throws FormatException if the UUID is invalid. Optionally you can set
validate
to false to disable validation of the UUID before parsing.
Implementation
static List<int> parse(String uuid,
{List<int>? buffer, int offset = 0, bool validate = true}) {
if (validate && !isValidUUID(uuid)) {
throw FormatException('The provided UUID is invalid.', uuid);
}
var i = offset, ii = 0;
// Create a 16 item buffer if one hasn't been provided.
buffer = (buffer != null) ? buffer : Uint8List(16);
// Convert to lowercase and replace all hex with bytes then
// string.replaceAll() does a lot of work that I don't need, and a manual
// regex gives me more control.
final regex = RegExp('[0-9a-f]{2}');
for (Match match in regex.allMatches(uuid.toLowerCase())) {
if (ii < 16) {
var hex = uuid.toLowerCase().substring(match.start, match.end);
buffer[i + ii++] = int.parse(hex, radix: 16);
}
}
// Zero out any left over bytes if the string was too short.
while (ii < 16) {
buffer[i + ii++] = 0;
}
return buffer;
}