From eeeb3c402cae83a71aa0423b60ac6150a16e5b48 Mon Sep 17 00:00:00 2001 From: Vladimir Prus Date: Fri, 19 Jul 2002 12:57:23 +0000 Subject: [PATCH] Improved 'vector'. * new/container.jam (vector.indices): New rule. * new/targets.jam: Use the new rule. [SVN r14528] --- src/build/targets.jam | 2 +- src/util/container.jam | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/build/targets.jam b/src/build/targets.jam index 0f9a85642..a0bf5d52c 100644 --- a/src/build/targets.jam +++ b/src/build/targets.jam @@ -175,7 +175,7 @@ rule main-target ( name : project ) else { # Find the alternative with the longest set of non-free requirements - local r = [ range 1 : [ $(alternatives).size ] ] [ $(alternatives).size ] ; + local r = [ $(alternatives).indices ] ; # First compute the length of requirements sets local req-length ; diff --git a/src/util/container.jam b/src/util/container.jam index 53bef938a..d31770510 100644 --- a/src/util/container.jam +++ b/src/util/container.jam @@ -44,6 +44,8 @@ rule vector ( values * # Initial contents of vector. ) { + import numbers : range ; + node.__init__ ; self.value = $(values) ; @@ -187,6 +189,16 @@ rule vector ( return true ; } } + + # Returns the list of all valid indices for this vector. + rule indices ( ) + { + if ! [ empty ] + { + local size = [ size ] ; + return [ range 1 : $(size) ] $(size) ; + } + } } class vector : node ; @@ -196,8 +208,10 @@ local rule __test__ ( ) local l = [ new vector ] ; assert.result 0 : $(l).size ; + assert.result : $(l).indices ; $(l).push-back b ; $(l).push-front a ; + assert.result 1 2 : $(l).indices ; assert.result a : $(l).front ; assert.result b : $(l).back ; $(l).insert 2 : d ;