util.array: Per-array methods now always mutate the array, array.* return a mutated...
authorMatthew Wild <mwild1@gmail.com>
Mon, 5 Oct 2009 13:38:04 +0000 (14:38 +0100)
committerMatthew Wild <mwild1@gmail.com>
Mon, 5 Oct 2009 13:38:04 +0000 (14:38 +0100)
util/array.lua

index bbf26f3214ae4992beda62004503641df6ca04d4..ae3a0b5bdf178f247356e093eef15c512a56f64b 100644 (file)
@@ -33,22 +33,11 @@ function array_base.map(outa, ina, func)
 end
 
 function array_base.filter(outa, ina, func)
-       local inplace, start_length = ina == outa, #ina;
-       local write = 1;
-       for read=1,start_length do
-               local v = ina[read];
+       for k,v in ipairs(ina) do
                if func(v) then
-                       outa[write] = v;
-                       write = write + 1;
-               end
-       end
-       
-       if inplace and write < start_length then
-               for i=write,start_length do
-                       outa[i] = nil;
+                       outa:push(v);
                end
        end
-       
        return outa;
 end