# SPDX-FileCopyrightText: (C) 2023 Frederic Croix # SPDX-License-Identifier: GPL-2.0-or-later var all = func(obj, key=nil) { if (!size(obj)) { return 0; } var res = 1; if (key) { if (!isfunc(key)) { die("std.all got a non-callable 'key' argument"); } foreach (var o; obj) { res &= key(o); if (res == 0) { break; } } } else { foreach(var o; obj) { res &= o; if (res == 0) { break; } } } return res; }; var any = func(obj, key=nil) { var res = 0; if (key) { if (!isfunc(key)) { die("std.any got a non-callable 'key' argument"); } foreach (var o; obj) { res |= key(o); if (res == 1) { break; } } } else { foreach(var o; obj) { res |= o; if (res == 1) { break; } } } return res; }; var map = func(function, obj) { if (!isfunc(function)) { die("std.map got a non-callable 'function' argument"); } var res = []; foreach (var o; obj) { append(res, function(o)); } return res; }; var filter = func(function, obj) { var res = []; if (function) { if (!isfunc(function)) { die("std.filter got a non-callable 'function' argument"); } foreach (var o; obj) { if (function(o)) { append(res, o); } } } elsif (o) { foreach (var o; obj) { if (o) { append(res, o); } } } return res; };