From a089b160a25c6df36e5d32fd355906a6d46ff2a6 Mon Sep 17 00:00:00 2001 From: Josh Perry Date: Thu, 26 May 2022 14:05:04 +0100 Subject: [PATCH] uuid: added a uuid module Only contains a function for (the most useful) uuid4 at present. --- uuid.lua | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 uuid.lua diff --git a/uuid.lua b/uuid.lua new file mode 100644 index 0000000..beadbf7 --- /dev/null +++ b/uuid.lua @@ -0,0 +1,31 @@ +--[[ + uuid generation +]] + +local path = (...):gsub("uuid", "") + +local uuid = {} + +--helper for optionally passed random; defaults to love.math.random if present, otherwise math.random +local _global_random = math.random +if love and love.math and love.math.random then + _global_random = love.math.random +end + +local function _random(min, max, r) + return r and r:random(min, max) + or _global_random(min, max) +end + +local uuid4Template = "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx" + +--generate a UUID version 4 (random) +function uuid.uuid4() + return uuid4Template:gsub("[xy]", function (c) + -- x should be 0x0-0xF, the single y should be 0x8-0xB + -- 4 should always just be 4 (denoting uuid version) + return string.format("%x", c == "x" and _random(0x0, 0xF) or _random(0x8, 0xB)) + end) +end + +return uuid