From 10e634e64b5fffaf19778d8fd3aa854118aa0d53 Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Wed, 3 Nov 2021 13:08:48 +0200 Subject: Add $size() function to get size of sequence (names, strings, etc) --- libbuild2/functions-path.cxx | 54 +++++++++++++++++++++++++------------------- 1 file changed, 31 insertions(+), 23 deletions(-) (limited to 'libbuild2/functions-path.cxx') diff --git a/libbuild2/functions-path.cxx b/libbuild2/functions-path.cxx index d6ff83f..72597ff 100644 --- a/libbuild2/functions-path.cxx +++ b/libbuild2/functions-path.cxx @@ -332,25 +332,30 @@ namespace build2 return ns; }; - // base + // leaf // - f["base"] += &path::base; + f["leaf"] += &path::leaf; - f["base"] += [](paths v) + f["leaf"] += [](path p, dir_path d) + { + return leaf (p, move (d)); + }; + + f["leaf"] += [](paths v, optional d) { for (path& p: v) - p = p.base (); + p = leaf (p, d); return v; }; - f["base"] += [](dir_paths v) + f["leaf"] += [](dir_paths v, optional d) { for (dir_path& p: v) - p = p.base (); + p = leaf (p, d); return v; }; - f[".base"] += [](names ns) + f[".leaf"] += [](names ns, optional d) { // For each path decide based on the presence of a trailing slash // whether it is a directory. Return as untyped list of (potentially @@ -359,37 +364,32 @@ namespace build2 for (name& n: ns) { if (n.directory ()) - n.dir = n.dir.base (); + n.dir = leaf (n.dir, d); else - n.value = convert (move (n)).base ().string (); + n.value = leaf (convert (move (n)), d).string (); } return ns; }; - // leaf + // base // - f["leaf"] += &path::leaf; - - f["leaf"] += [](path p, dir_path d) - { - return leaf (p, move (d)); - }; + f["base"] += &path::base; - f["leaf"] += [](paths v, optional d) + f["base"] += [](paths v) { for (path& p: v) - p = leaf (p, d); + p = p.base (); return v; }; - f["leaf"] += [](dir_paths v, optional d) + f["base"] += [](dir_paths v) { for (dir_path& p: v) - p = leaf (p, d); + p = p.base (); return v; }; - f[".leaf"] += [](names ns, optional d) + f[".base"] += [](names ns) { // For each path decide based on the presence of a trailing slash // whether it is a directory. Return as untyped list of (potentially @@ -398,9 +398,9 @@ namespace build2 for (name& n: ns) { if (n.directory ()) - n.dir = leaf (n.dir, d); + n.dir = n.dir.base (); else - n.value = leaf (convert (move (n)), d).string (); + n.value = convert (move (n)).base ().string (); } return ns; }; @@ -414,6 +414,14 @@ namespace build2 return extension (convert (move (ns))); }; + // $size() + // $size() + // + // Return the number of elements in the sequence. + // + f["size"] += [] (paths v) {return v.size ();}; + f["size"] += [] (dir_paths v) {return v.size ();}; + // $sort( [, ]) // $sort( [, ]) // -- cgit v1.1