From 2a99fd133daea2808253ff1d8545d53c700709af Mon Sep 17 00:00:00 2001 From: ruki Date: Sun, 7 Apr 2024 23:13:30 +0800 Subject: rename dlist to list --- tests/modules/dlist/test.lua | 120 ----------- tests/modules/list/test.lua | 120 +++++++++++ xmake/core/base/dlist.lua | 226 --------------------- xmake/core/base/list.lua | 226 +++++++++++++++++++++ .../sandbox/modules/import/core/base/dlist.lua | 2 +- .../core/sandbox/modules/import/core/base/list.lua | 22 ++ xmake/core/ui/panel.lua | 4 +- xmake/modules/private/async/jobpool.lua | 4 +- 8 files changed, 373 insertions(+), 351 deletions(-) delete mode 100644 tests/modules/dlist/test.lua create mode 100644 tests/modules/list/test.lua delete mode 100644 xmake/core/base/dlist.lua create mode 100644 xmake/core/base/list.lua create mode 100644 xmake/core/sandbox/modules/import/core/base/list.lua diff --git a/tests/modules/dlist/test.lua b/tests/modules/dlist/test.lua deleted file mode 100644 index 31f939aa2..000000000 --- a/tests/modules/dlist/test.lua +++ /dev/null @@ -1,120 +0,0 @@ -import("core.base.dlist") - -function test_push(t) - local d = dlist.new() - d:push({v = 1}) - d:push({v = 2}) - d:push({v = 3}) - d:push({v = 4}) - d:push({v = 5}) - t:are_equal(d:first().v, 1) - t:are_equal(d:last().v, 5) - local idx = 1 - for item in d:items() do - t:are_equal(item.v, idx) - idx = idx + 1 - end -end - -function test_insert(t) - local d = dlist.new() - local v3 = {v = 3} - d:insert({v = 1}) - d:insert({v = 2}) - d:insert(v3) - d:insert({v = 5}) - d:insert({v = 4}, v3) - t:are_equal(d:first().v, 1) - t:are_equal(d:last().v, 5) - local idx = 1 - for item in d:items() do - t:are_equal(item.v, idx) - idx = idx + 1 - end -end - -function test_remove(t) - local d = dlist.new() - local v3 = {v = 3} - d:insert({v = 1}) - d:insert({v = 2}) - d:insert(v3) - d:insert({v = 3}) - d:insert({v = 4}) - d:insert({v = 5}) - d:remove(v3) - t:are_equal(d:first().v, 1) - t:are_equal(d:last().v, 5) - local idx = 1 - for item in d:items() do - t:are_equal(item.v, idx) - idx = idx + 1 - end -end - -function test_remove_first(t) - local d = dlist.new() - d:push({v = 1}) - d:push({v = 2}) - d:push({v = 3}) - d:push({v = 4}) - d:push({v = 5}) - d:remove_first() - t:are_equal(d:first().v, 2) - t:are_equal(d:last().v, 5) - local idx = 2 - for item in d:items() do - t:are_equal(item.v, idx) - idx = idx + 1 - end -end - -function test_remove_last(t) - local d = dlist.new() - d:push({v = 1}) - d:push({v = 2}) - d:push({v = 3}) - d:push({v = 4}) - d:push({v = 5}) - d:remove_last() - t:are_equal(d:first().v, 1) - t:are_equal(d:last().v, 4) - local idx = 1 - for item in d:items() do - t:are_equal(item.v, idx) - idx = idx + 1 - end -end - -function test_insert_head(t) - local d = dlist.new() - d:push({v = 2}) - d:push({v = 3}) - d:push({v = 4}) - d:push({v = 5}) - d:insert_head({v = 1}) - t:are_equal(d:first().v, 1) - t:are_equal(d:last().v, 5) - local idx = 1 - for item in d:items() do - t:are_equal(item.v, idx) - idx = idx + 1 - end -end - -function test_insert_tail(t) - local d = dlist.new() - d:push({v = 1}) - d:push({v = 2}) - d:push({v = 3}) - d:push({v = 4}) - d:insert_tail({v = 5}) - t:are_equal(d:first().v, 1) - t:are_equal(d:last().v, 5) - local idx = 1 - for item in d:items() do - t:are_equal(item.v, idx) - idx = idx + 1 - end -end - diff --git a/tests/modules/list/test.lua b/tests/modules/list/test.lua new file mode 100644 index 000000000..b1679a304 --- /dev/null +++ b/tests/modules/list/test.lua @@ -0,0 +1,120 @@ +import("core.base.list") + +function test_push(t) + local d = list.new() + d:push({v = 1}) + d:push({v = 2}) + d:push({v = 3}) + d:push({v = 4}) + d:push({v = 5}) + t:are_equal(d:first().v, 1) + t:are_equal(d:last().v, 5) + local idx = 1 + for item in d:items() do + t:are_equal(item.v, idx) + idx = idx + 1 + end +end + +function test_insert(t) + local d = list.new() + local v3 = {v = 3} + d:insert({v = 1}) + d:insert({v = 2}) + d:insert(v3) + d:insert({v = 5}) + d:insert({v = 4}, v3) + t:are_equal(d:first().v, 1) + t:are_equal(d:last().v, 5) + local idx = 1 + for item in d:items() do + t:are_equal(item.v, idx) + idx = idx + 1 + end +end + +function test_remove(t) + local d = list.new() + local v3 = {v = 3} + d:insert({v = 1}) + d:insert({v = 2}) + d:insert(v3) + d:insert({v = 3}) + d:insert({v = 4}) + d:insert({v = 5}) + d:remove(v3) + t:are_equal(d:first().v, 1) + t:are_equal(d:last().v, 5) + local idx = 1 + for item in d:items() do + t:are_equal(item.v, idx) + idx = idx + 1 + end +end + +function test_remove_first(t) + local d = list.new() + d:push({v = 1}) + d:push({v = 2}) + d:push({v = 3}) + d:push({v = 4}) + d:push({v = 5}) + d:remove_first() + t:are_equal(d:first().v, 2) + t:are_equal(d:last().v, 5) + local idx = 2 + for item in d:items() do + t:are_equal(item.v, idx) + idx = idx + 1 + end +end + +function test_remove_last(t) + local d = list.new() + d:push({v = 1}) + d:push({v = 2}) + d:push({v = 3}) + d:push({v = 4}) + d:push({v = 5}) + d:remove_last() + t:are_equal(d:first().v, 1) + t:are_equal(d:last().v, 4) + local idx = 1 + for item in d:items() do + t:are_equal(item.v, idx) + idx = idx + 1 + end +end + +function test_insert_first(t) + local d = list.new() + d:push({v = 2}) + d:push({v = 3}) + d:push({v = 4}) + d:push({v = 5}) + d:insert_first({v = 1}) + t:are_equal(d:first().v, 1) + t:are_equal(d:last().v, 5) + local idx = 1 + for item in d:items() do + t:are_equal(item.v, idx) + idx = idx + 1 + end +end + +function test_insert_last(t) + local d = list.new() + d:push({v = 1}) + d:push({v = 2}) + d:push({v = 3}) + d:push({v = 4}) + d:insert_last({v = 5}) + t:are_equal(d:first().v, 1) + t:are_equal(d:last().v, 5) + local idx = 1 + for item in d:items() do + t:are_equal(item.v, idx) + idx = idx + 1 + end +end + diff --git a/xmake/core/base/dlist.lua b/xmake/core/base/dlist.lua deleted file mode 100644 index 3b893a622..000000000 --- a/xmake/core/base/dlist.lua +++ /dev/null @@ -1,226 +0,0 @@ ---!A cross-platform build utility based on Lua --- --- Licensed under the Apache License, Version 2.0 (the "License"); --- you may not use this file except in compliance with the License. --- You may obtain a copy of the License at --- --- http://www.apache.org/licenses/LICENSE-2.0 --- --- Unless required by applicable law or agreed to in writing, software --- distributed under the License is distributed on an "AS IS" BASIS, --- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. --- See the License for the specific language governing permissions and --- limitations under the License. --- --- Copyright (C) 2015-present, TBOOX Open Source Group. --- --- @author ruki --- @file dlist.lua --- - --- load modules -local object = require("base/object") - --- define module -local dlist = dlist or object { _init = {"_length"} } {0} - --- clear list -function dlist:clear() - self._length = 0 - self._first = nil - self._last = nil -end - --- insert item after the given item -function dlist:insert(t, after) - if not after then - return self:insert_tail(t) - end - assert(t ~= after) - if after._next then - after._next._prev = t - t._next = after._next - else - self._last = t - end - t._prev = after - after._next = t - self._length = self._length + 1 -end - --- insert item in head -function dlist:insert_head(t) - if self._first then - self._first._prev = t - t._next = self._first - self._first = t - else - self._first = t - self._last = t - end - self._length = self._length + 1 -end - --- insert item in tail -function dlist:insert_tail(t) - if self._last then - self._last._next = t - t._prev = self._last - self._last = t - else - self._first = t - self._last = t - end - self._length = self._length + 1 -end - --- remove item -function dlist:remove(t) - if t._next then - if t._prev then - t._next._prev = t._prev - t._prev._next = t._next - else - assert(t == self._first) - t._next._prev = nil - self._first = t._next - end - elseif t._prev then - assert(t == self._last) - t._prev._next = nil - self._last = t._prev - else - assert(t == self._first and t == self._last) - self._first = nil - self._last = nil - end - t._next = nil - t._prev = nil - self._length = self._length - 1 - return t -end - --- remove the first item -function dlist:remove_first() - if not self._first then - return - end - local t = self._first - if t._next then - t._next._prev = nil - self._first = t._next - t._next = nil - else - self._first = nil - self._last = nil - end - self._length = self._length - 1 - return t -end - --- remove last item -function dlist:remove_last() - if not self._last then - return - end - local t = self._last - if t._prev then - t._prev._next = nil - self._last = t._prev - t._prev = nil - else - self._first = nil - self._last = nil - end - self._length = self._length - 1 - return t -end - --- push item to tail -function dlist:push(t) - self:insert_tail(t) -end - --- pop item from tail -function dlist:pop() - self:remove_last() -end - --- shift item: 1 2 3 <- 2 3 -function dlist:shift() - self:remove_first() -end - --- unshift item: 1 2 -> t 1 2 -function dlist:unshift(t) - self:insert_head(t) -end - --- get first item -function dlist:first() - return self._first -end - --- get last item -function dlist:last() - return self._last -end - --- get next item -function dlist:next(last) - if last then - return last._next - else - return self._first - end -end - --- get the previous item -function dlist:prev(last) - if last then - return last._prev - else - return self._last - end -end - --- get list size -function dlist:size() - return self._length -end - --- is empty? -function dlist:empty() - return self:size() == 0 -end - --- get items --- --- e.g. --- --- for item in dlist:items() do --- print(item) --- end --- -function dlist:items() - local iter = function (list, item) - return list:next(item) - end - return iter, self, nil -end - --- get reverse items -function dlist:ritems() - local iter = function (list, item) - return list:prev(item) - end - return iter, self, nil -end - --- new dlist -function dlist.new() - return dlist() -end - --- return module: dlist -return dlist diff --git a/xmake/core/base/list.lua b/xmake/core/base/list.lua new file mode 100644 index 000000000..e6958f74d --- /dev/null +++ b/xmake/core/base/list.lua @@ -0,0 +1,226 @@ +--!A cross-platform build utility based on Lua +-- +-- Licensed under the Apache License, Version 2.0 (the "License"); +-- you may not use this file except in compliance with the License. +-- You may obtain a copy of the License at +-- +-- http://www.apache.org/licenses/LICENSE-2.0 +-- +-- Unless required by applicable law or agreed to in writing, software +-- distributed under the License is distributed on an "AS IS" BASIS, +-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +-- See the License for the specific language governing permissions and +-- limitations under the License. +-- +-- Copyright (C) 2015-present, TBOOX Open Source Group. +-- +-- @author ruki +-- @file list.lua +-- + +-- load modules +local object = require("base/object") + +-- define module +local list = list or object { _init = {"_length"} } {0} + +-- clear list +function list:clear() + self._length = 0 + self._first = nil + self._last = nil +end + +-- insert item after the given item +function list:insert(t, after) + if not after then + return self:insert_last(t) + end + assert(t ~= after) + if after._next then + after._next._prev = t + t._next = after._next + else + self._last = t + end + t._prev = after + after._next = t + self._length = self._length + 1 +end + +-- insert the first item in head +function list:insert_first(t) + if self._first then + self._first._prev = t + t._next = self._first + self._first = t + else + self._first = t + self._last = t + end + self._length = self._length + 1 +end + +-- insert the last item in tail +function list:insert_last(t) + if self._last then + self._last._next = t + t._prev = self._last + self._last = t + else + self._first = t + self._last = t + end + self._length = self._length + 1 +end + +-- remove item +function list:remove(t) + if t._next then + if t._prev then + t._next._prev = t._prev + t._prev._next = t._next + else + assert(t == self._first) + t._next._prev = nil + self._first = t._next + end + elseif t._prev then + assert(t == self._last) + t._prev._next = nil + self._last = t._prev + else + assert(t == self._first and t == self._last) + self._first = nil + self._last = nil + end + t._next = nil + t._prev = nil + self._length = self._length - 1 + return t +end + +-- remove the first item +function list:remove_first() + if not self._first then + return + end + local t = self._first + if t._next then + t._next._prev = nil + self._first = t._next + t._next = nil + else + self._first = nil + self._last = nil + end + self._length = self._length - 1 + return t +end + +-- remove last item +function list:remove_last() + if not self._last then + return + end + local t = self._last + if t._prev then + t._prev._next = nil + self._last = t._prev + t._prev = nil + else + self._first = nil + self._last = nil + end + self._length = self._length - 1 + return t +end + +-- push item to tail +function list:push(t) + self:insert_last(t) +end + +-- pop item from tail +function list:pop() + self:remove_last() +end + +-- shift item: 1 2 3 <- 2 3 +function list:shift() + self:remove_first() +end + +-- unshift item: 1 2 -> t 1 2 +function list:unshift(t) + self:insert_first(t) +end + +-- get first item +function list:first() + return self._first +end + +-- get last item +function list:last() + return self._last +end + +-- get next item +function list:next(last) + if last then + return last._next + else + return self._first + end +end + +-- get the previous item +function list:prev(last) + if last then + return last._prev + else + return self._last + end +end + +-- get list size +function list:size() + return self._length +end + +-- is empty? +function list:empty() + return self:size() == 0 +end + +-- get items +-- +-- e.g. +-- +-- for item in list:items() do +-- print(item) +-- end +-- +function list:items() + local iter = function (list, item) + return list:next(item) + end + return iter, self, nil +end + +-- get reverse items +function list:ritems() + local iter = function (list, item) + return list:prev(item) + end + return iter, self, nil +end + +-- new list +function list.new() + return list() +end + +-- return module: list +return list diff --git a/xmake/core/sandbox/modules/import/core/base/dlist.lua b/xmake/core/sandbox/modules/import/core/base/dlist.lua index 25047206d..924d27ab1 100644 --- a/xmake/core/sandbox/modules/import/core/base/dlist.lua +++ b/xmake/core/sandbox/modules/import/core/base/dlist.lua @@ -19,4 +19,4 @@ -- -- return module -return require("base/dlist") +return require("base/list") diff --git a/xmake/core/sandbox/modules/import/core/base/list.lua b/xmake/core/sandbox/modules/import/core/base/list.lua new file mode 100644 index 000000000..852fd5231 --- /dev/null +++ b/xmake/core/sandbox/modules/import/core/base/list.lua @@ -0,0 +1,22 @@ +--!A cross-platform build utility based on Lua +-- +-- Licensed under the Apache License, Version 2.0 (the "License"); +-- you may not use this file except in compliance with the License. +-- You may obtain a copy of the License at +-- +-- http://www.apache.org/licenses/LICENSE-2.0 +-- +-- Unless required by applicable law or agreed to in writing, software +-- distributed under the License is distributed on an "AS IS" BASIS, +-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +-- See the License for the specific language governing permissions and +-- limitations under the License. +-- +-- Copyright (C) 2015-present, TBOOX Open Source Group. +-- +-- @author ruki +-- @file list.lua +-- + +-- return module +return require("base/list") diff --git a/xmake/core/ui/panel.lua b/xmake/core/ui/panel.lua index 7baef5c3a..244aae073 100644 --- a/xmake/core/ui/panel.lua +++ b/xmake/core/ui/panel.lua @@ -26,7 +26,7 @@ local event = require("ui/event") local point = require("ui/point") local curses = require("ui/curses") local action = require("ui/action") -local dlist = require("base/dlist") +local list = require("base/list") -- define module local panel = panel or view() @@ -44,7 +44,7 @@ function panel:init(name, bounds) self:option_set("selectable", true) -- init child views - self._VIEWS = dlist.new() + self._VIEWS = list.new() -- init views cache self._VIEWS_CACHE = {} diff --git a/xmake/modules/private/async/jobpool.lua b/xmake/modules/private/async/jobpool.lua index 653be2328..342cc096f 100644 --- a/xmake/modules/private/async/jobpool.lua +++ b/xmake/modules/private/async/jobpool.lua @@ -20,7 +20,7 @@ -- imports import("core.base.object") -import("core.base.dlist") +import("core.base.list") import("core.base.hashset") -- define module @@ -235,5 +235,5 @@ end -- new a jobpool function new() - return jobpool {0, {name = "root"}, dlist.new(), {}} + return jobpool {0, {name = "root"}, list.new(), {}} end -- cgit v1.3.1