From 88640e677fa0695783eac68014d7d8d5bc42d117 Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Mon, 19 Feb 2024 12:23:10 +0200 Subject: Add string_set buildfile value type This exposes the std::set type to buildfiles. New functions: $size() Subscript returns true if the value is present and false otherwise (so it is mapped to std::set::contains()). For example: set = [string_set] a b c if ($set[b]) ... Note that append (+=) and prepend (=+) have the same semantics (std::set::insert()). For example: set = [string_set] a b set += c b # a b c set =+ d b # a b c d Example of iteration: set = [string_set] a b c for k: $set ... --- libbuild2/functions-string.cxx | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'libbuild2/functions-string.cxx') diff --git a/libbuild2/functions-string.cxx b/libbuild2/functions-string.cxx index b332efa..367923f 100644 --- a/libbuild2/functions-string.cxx +++ b/libbuild2/functions-string.cxx @@ -119,14 +119,16 @@ namespace build2 }; // $size() + // $size() // $size() // $size() // - // First two forms: return the number of elements in the sequence. + // First three forms: return the number of elements in the sequence. // - // Third form: return the number of characters (bytes) in the string. + // Fourth form: return the number of characters (bytes) in the string. // f["size"] += [] (strings v) {return v.size ();}; + f["size"] += [] (set v) {return v.size ();}; f["size"] += [] (map v) {return v.size ();}; f["size"] += [] (string v) {return v.size ();}; -- cgit v1.1