Module:NBlocks

From Hacks Guide Wiki
This is the approved revision of this page, as well as being the most recent.

local p = {}

local TITLE_ALIGN_SIZE = 0x8000

function roundup(num, align)
	return math.ceil(num / align) * align
end

function p.raw_blocks_to_bytes(blocks)
	return blocks * 128 * 1024
end

function p.raw_blocks_to_kib(blocks)
	return blocks * 128
end

function p.raw_blocks_to_mib(blocks)
	return blocks / 8
end

function p.raw_bytes_to_blocks(bytes)
	return math.ceil(bytes / 1024 / 128)
end

function p.raw_mib_to_blocks(mib)
	return math.ceil(mib * 8)
end

function get_display_unit(size)
	if     size >= 1024 * 1024 * 1024 then
		return size / 1024 / 1024 / 1024, 'GiB'
	elseif size >= 1024 * 1024 then
		return size / 1024 / 1024, 'MiB'
	elseif size >= 1024 then
		return size / 1024, 'KiB'
	else 
		return size, 'bytes'
	end
end

function p.raw_format_bytes(bytes)
	-- this needs to do bytes, kib, and gib too
	local formatted_size, unit = get_display_unit(tonumber(bytes))
	return string.format("%.2f", formatted_size) .. ' ' .. unit
end

function p.roundup_all_sizes_to_bytes(sizes)
	total = 0
	for i, v in ipairs(sizes) do
		total = total + roundup(v, TITLE_ALIGN_SIZE)
	end
	return total
end

function p.blocks_to_bytes(frame)
	return p.raw_blocks_to_bytes(frame.args[1])
end

function p.blocks_to_kib(frame)
	return p.raw_blocks_to_kib(frame.args[1])
end

function p.blocks_to_mib(frame)
	return p.raw_blocks_to_mib(frame.args[1])
end

function p.bytes_to_blocks(frame)
	return p.raw_bytes_to_blocks(frame.args[1])
end

function p.mib_to_blocks(frame)
	return p.raw_mib_to_blocks(frame.args[1])
end

function p.format_bytes(frame)
	return p.raw_format_bytes(frame.args[1])
end

return p