diff --git a/vlib/builtin/array.v b/vlib/builtin/array.v index 170524e32e..f6a02b5be5 100644 --- a/vlib/builtin/array.v +++ b/vlib/builtin/array.v @@ -152,6 +152,14 @@ pub fn (a mut array) clear() { a.len = 0 } +// trims the array length to "index" without modifying the allocated data. If "index" is greater +// than len nothing will be changed +pub fn (a mut array) trim(index int) { + if index < a.len { + a.len = index + } +} + // Private function. Used to implement array[] operator fn (a array) get(i int) voidptr { $if !no_bounds_checking? { diff --git a/vlib/builtin/array_test.v b/vlib/builtin/array_test.v index 7d45f83013..c15683e306 100644 --- a/vlib/builtin/array_test.v +++ b/vlib/builtin/array_test.v @@ -592,3 +592,20 @@ fn test_clear() { arr.clear() assert arr.len == 0 } + +fn test_trim() { + mut arr := [1,2,3,4,5,6,7,8,9] + assert arr.len == 9 + + arr.trim(9) + assert arr.len == 9 + assert arr.last() == 9 + + arr.trim(7) + assert arr.len == 7 + assert arr.last() == 7 + + arr.trim(2) + assert arr.len == 2 + assert arr.last() == 2 +}