Move math functions out of awful.util into new gears.math

This commit is contained in:
Kevin Zander 2017-02-19 10:39:16 -06:00
parent 7f6763fb00
commit d8f57e4997
3 changed files with 99 additions and 42 deletions

View File

@ -27,7 +27,7 @@ local capi =
mouse = mouse mouse = mouse
} }
local gears_debug = require("gears.debug") local gears_debug = require("gears.debug")
local floor = math.floor local gmath = require("gears.math")
local util = {} local util = {}
util.table = {} util.table = {}
@ -112,16 +112,15 @@ function util.ensure_pango_color(color, fallback)
end end
--- Make i cycle. --- Make i cycle.
-- @deprecated util.cycle
-- @param t A length. Must be greater than zero. -- @param t A length. Must be greater than zero.
-- @param i An absolute index to fit into #t. -- @param i An absolute index to fit into #t.
-- @return An integer in (1, t) or nil if t is less than or equal to zero. -- @return An integer in (1, t) or nil if t is less than or equal to zero.
-- @see gears.math
function util.cycle(t, i) function util.cycle(t, i)
if t < 1 then return end util.deprecate("gears.math.cycle", {deprecated_in=5})
i = i % t
if i == 0 then return gmath.cycle(t, i)
i = t
end
return i
end end
--- Create a directory --- Create a directory
@ -293,49 +292,19 @@ function util.is_dir(path)
return Gio.File.new_for_path(path):query_file_type({}) == "DIRECTORY" return Gio.File.new_for_path(path):query_file_type({}) == "DIRECTORY"
end end
local function subset_mask_apply(mask, set)
local ret = {}
for i = 1, #set do
if mask[i] then
rtable.insert(ret, set[i])
end
end
return ret
end
local function subset_next(mask)
local i = 1
while i <= #mask and mask[i] do
mask[i] = false
i = i + 1
end
if i <= #mask then
mask[i] = 1
return true
end
return false
end
--- Return all subsets of a specific set. --- Return all subsets of a specific set.
-- This function, giving a set, will return all subset it. -- This function, giving a set, will return all subset it.
-- For example, if we consider a set with value { 10, 15, 34 }, -- For example, if we consider a set with value { 10, 15, 34 },
-- it will return a table containing 2^n set: -- it will return a table containing 2^n set:
-- { }, { 10 }, { 15 }, { 34 }, { 10, 15 }, { 10, 34 }, etc. -- { }, { 10 }, { 15 }, { 34 }, { 10, 15 }, { 10, 34 }, etc.
-- @deprecated util.subsets
-- @param set A set. -- @param set A set.
-- @return A table with all subset. -- @return A table with all subset.
-- @see gears.math
function util.subsets(set) function util.subsets(set)
local mask = {} util.deprecate("gears.math.subsets", {deprecated_in=5})
local ret = {}
for i = 1, #set do mask[i] = false end
-- Insert the empty one return gmath.subsets(set)
rtable.insert(ret, {})
while subset_next(mask) do
rtable.insert(ret, subset_mask_apply(mask, set))
end
return ret
end end
--- Get the nearest rectangle in the given direction. Every rectangle is specified as a table --- Get the nearest rectangle in the given direction. Every rectangle is specified as a table
@ -585,10 +554,14 @@ function util.query_to_pattern(q)
end end
--- Round a number to an integer. --- Round a number to an integer.
-- @deprecated util.round
-- @tparam number x -- @tparam number x
-- @treturn integer -- @treturn integer
-- @see gears.math
function util.round(x) function util.round(x)
return floor(x + 0.5) util.deprecate("gears.math.round", {deprecated_in=5})
return gmath.round(x)
end end
return util return util

View File

@ -18,6 +18,7 @@ return
shape = require("gears.shape"); shape = require("gears.shape");
protected_call = require("gears.protected_call"); protected_call = require("gears.protected_call");
geometry = require("gears.geometry"); geometry = require("gears.geometry");
math = require("gears.math");
} }
-- vim: filetype=lua:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:textwidth=80 -- vim: filetype=lua:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:textwidth=80

83
lib/gears/math.lua Normal file
View File

@ -0,0 +1,83 @@
---------------------------------------------------------------------------
--- Math module for gears
--
-- @module gears.math
---------------------------------------------------------------------------
local rtable = table
local gmath = {}
local function subset_mask_apply(mask, set)
local ret = {}
for i = 1, #set do
if mask[i] then
rtable.insert(ret, set[i])
end
end
return ret
end
local function subset_next(mask)
local i = 1
while i <= #mask and mask[i] do
mask[i] = false
i = i + 1
end
if i <= #mask then
mask[i] = 1
return true
end
return false
end
--- Return all subsets of a specific set.
-- This function, giving a set, will return all subset it.
-- For example, if we consider a set with value { 10, 15, 34 },
-- it will return a table containing 2^n set:
-- { }, { 10 }, { 15 }, { 34 }, { 10, 15 }, { 10, 34 }, etc.
-- @class function
-- @name subsets
-- @param set A set.
-- @return A table with all subset.
function gmath.subsets(set)
local mask = {}
local ret = {}
for i = 1, #set do mask[i] = false end
-- Insert the empty one
rtable.insert(ret, {})
while subset_next(mask) do
rtable.insert(ret, subset_mask_apply(mask, set))
end
return ret
end
--- Make i cycle.
-- @class function
-- @name cycle
-- @param t A length. Must be greater than zero.
-- @param i An absolute index to fit into #t.
-- @return An integer in (1, t) or nil if t is less than or equal to zero.
function gmath.cycle(t, i)
if t < 1 then return end
i = i % t
if i == 0 then
i = t
end
return i
end
--- Round a number to an integer.
-- @class function
-- @name round
-- @tparam number x
-- @treturn integer
function gmath.round(x)
return math.floor(x + 0.5)
end
return gmath