Move math functions out of awful.util into new gears.math
This commit is contained in:
parent
7f6763fb00
commit
d8f57e4997
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
Loading…
Reference in New Issue