From 7a98fdbf07cc1e6644699ea468f4cb5f986641b3 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Alexis=20Laferri=C3=A8re?= Date: Mon, 22 Dec 2014 22:35:51 -0500 Subject: [PATCH] lib/standard: optimize `Array::add_all` MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit The number of instructions to run `bench_add_all` was at 42 mIr, and after optimization at 17 mIr. Signed-off-by: Alexis Laferrière --- lib/standard/collection/array.nit | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/lib/standard/collection/array.nit b/lib/standard/collection/array.nit index 4b73471..e70acd2 100644 --- a/lib/standard/collection/array.nit +++ b/lib/standard/collection/array.nit @@ -281,6 +281,32 @@ class Array[E] _items[l] = item end + # Slight optimization for arrays + redef fun add_all(items) + do + var l = _length + var nl = l + items.length + if _capacity < nl then + enlarge nl + end + + if items isa Array[E] then + var k = 0 + while l < nl do + _items[l] = items._items[k] + l += 1 + k += 1 + end + else + for item in items do + _items[l] = item + l += 1 + end + end + + _length = nl + end + redef fun enlarge(cap) do var c = _capacity -- 1.7.9.5