diff options
| author | ruki <[email protected]> | 2024-10-06 23:09:48 +0800 |
|---|---|---|
| committer | ruki <[email protected]> | 2024-10-06 23:10:23 +0800 |
| commit | d329532d12907f2f27f7c336ab0498700931317a (patch) | |
| tree | 41e78734781742b345387d002991351de21ad4d7 /xmake/core | |
| parent | 6c973f55a3130fe62342e4ab06e992eac6ee3a80 (diff) | |
improve hashset
Diffstat (limited to 'xmake/core')
| -rw-r--r-- | xmake/core/base/hashset.lua | 59 |
1 files changed, 57 insertions, 2 deletions
diff --git a/xmake/core/base/hashset.lua b/xmake/core/base/hashset.lua index 2a0449ad4..e6668180b 100644 --- a/xmake/core/base/hashset.lua +++ b/xmake/core/base/hashset.lua @@ -108,7 +108,62 @@ function hashset_impl:to_array() return result end --- iterate keys of hashtable +-- iterate items +-- +-- @code +-- for item in instance:items() do +-- ... +-- end +-- @endcode +-- +function hashset_impl:items() + return function (t, item) + local k, _ = next(t._DATA, item) + if k == hashset._NIL then + return nil + else + return k + end + end, self, nil +end + +-- iterate order items +-- +-- @code +-- for item in instance:orderitems() do +-- ... +-- end +-- @endcode +-- +function hashset_impl:orderitems() + local orderkeys = table.orderkeys(self._DATA, function (a, b) + if a == hashset._NIL then + a = math.inf + end + if b == hashset._NIL then + b = math.inf + end + if type(a) == "table" then + a = tostring(a) + end + if type(b) == "table" then + b = tostring(b) + end + return a < b + end) + local i = 1 + return function (t, k) + k = orderkeys[i] + i = i + 1 + if k == hashset._NIL then + return nil + else + return k + end + end, self, nil +end + +-- iterate keys (deprecated, please use items()) -- -- @code -- for _, key in instance:keys() do @@ -127,7 +182,7 @@ function hashset_impl:keys() end, self, nil end --- order keys iterator +-- iterate order keys (deprecated, please use orderitems()) -- -- @code -- for _, key in instance:orderkeys() do |
