From acf4c1262b955c298e3cf792c8b3f3cead92fd09 Mon Sep 17 00:00:00 2001 From: Giles Bathgate Date: Sat, 12 Nov 2011 19:42:27 +0000 Subject: Added a len() function This returns the number of elements in a vector, and the length of a string. Added a basic test script that can be checked for echo output. diff --git a/src/func.cc b/src/func.cc index 4451267..1138173 100644 --- a/src/func.cc +++ b/src/func.cc @@ -290,6 +290,17 @@ Value builtin_exp(const Context *, const std::vector&, const std::v return Value(); } +Value builtin_length(const Context *, const std::vector&, const std::vector &args) +{ + if (args.size() == 1){ + if (args[0].type == Value::VECTOR) + return Value((double) args[0].vec.size()); + if (args[0].type == Value::STRING) + return Value((double) args[0].text.size()); + } + return Value(); +} + Value builtin_log(const Context *, const std::vector&, const std::vector &args) { if (args.size() == 2 && args[0].type == Value::NUMBER && args[1].type == Value::NUMBER) @@ -391,6 +402,7 @@ void register_builtin_functions() Builtins::init("pow", new BuiltinFunction(&builtin_pow)); Builtins::init("sqrt", new BuiltinFunction(&builtin_sqrt)); Builtins::init("exp", new BuiltinFunction(&builtin_exp)); + Builtins::init("len", new BuiltinFunction(&builtin_length)); Builtins::init("log", new BuiltinFunction(&builtin_log)); Builtins::init("ln", new BuiltinFunction(&builtin_ln)); Builtins::init("str", new BuiltinFunction(&builtin_str)); diff --git a/testdata/scad/features/len-tests.scad b/testdata/scad/features/len-tests.scad new file mode 100644 index 0000000..fba7ae1 --- /dev/null +++ b/testdata/scad/features/len-tests.scad @@ -0,0 +1,12 @@ +a=[1,2,3,4]; +b="abcd"; +c=[]; +d=""; +e=[[1,2,3,4],[1,2,3]]; +echo(len(a)); +echo(len(b)); +echo(len(c)); +echo(len(d)); +echo(len(e)); +echo(len(e[1])); +echo(len(e[2])); \ No newline at end of file diff --git a/testdata/scad/minimal/allfunctions.scad b/testdata/scad/minimal/allfunctions.scad index ef21a90..2aebe54 100644 --- a/testdata/scad/minimal/allfunctions.scad +++ b/testdata/scad/minimal/allfunctions.scad @@ -24,3 +24,4 @@ a = dxf_dim(); a = dxf_cross(); a = version(); a = version_num(); +a = len(); -- cgit v0.10.1