Software / code / prosody
Comparison
util/array.lua @ 11787:3ae6fa901a8b
util.array: Add :slice() method + tests
Behaviour follows the same logic as string.sub (so yes, 1-indexed).
| author | Matthew Wild <mwild1@gmail.com> |
|---|---|
| date | Sun, 12 Sep 2021 10:50:20 +0100 |
| parent | 10895:5777968301e8 |
| child | 12403:42b2713ab818 |
| child | 13138:0b0cefce6e42 |
comparison
equal
deleted
inserted
replaced
| 11786:39164ea2ab9e | 11787:3ae6fa901a8b |
|---|---|
| 109 for i = write, start_length do | 109 for i = write, start_length do |
| 110 outa[i] = nil; | 110 outa[i] = nil; |
| 111 end | 111 end |
| 112 end | 112 end |
| 113 | 113 |
| 114 return outa; | |
| 115 end | |
| 116 | |
| 117 function array_base.slice(outa, ina, i, j) | |
| 118 if j == nil then | |
| 119 j = -1; | |
| 120 end | |
| 121 if j < 0 then | |
| 122 j = #ina + (j+1); | |
| 123 end | |
| 124 if i < 0 then | |
| 125 i = #ina + (i+1); | |
| 126 end | |
| 127 if i < 1 then | |
| 128 i = 1; | |
| 129 end | |
| 130 if j > #ina then | |
| 131 j = #ina; | |
| 132 end | |
| 133 if i > j then | |
| 134 for idx = 1, #outa do | |
| 135 outa[idx] = nil; | |
| 136 end | |
| 137 return outa; | |
| 138 end | |
| 139 | |
| 140 for idx = 1, 1+j-i do | |
| 141 outa[idx] = ina[i+(idx-1)]; | |
| 142 end | |
| 143 if ina == outa then | |
| 144 for idx = 2+j-i, #outa do | |
| 145 outa[idx] = nil; | |
| 146 end | |
| 147 end | |
| 114 return outa; | 148 return outa; |
| 115 end | 149 end |
| 116 | 150 |
| 117 function array_base.sort(outa, ina, ...) | 151 function array_base.sort(outa, ina, ...) |
| 118 if ina ~= outa then | 152 if ina ~= outa then |