summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarius Kintel <marius@kintel.net>2011-11-12 19:47:51 (GMT)
committerMarius Kintel <marius@kintel.net>2011-11-12 19:47:51 (GMT)
commit170c506ab789cafa4369d56f29a92f33329a9a3e (patch)
tree5914d93e1b70260d48f0f3aeb6cc58bc783e3add
parent8fd4c478350635cdf028352edd0ec46a6785593e (diff)
parentacf4c1262b955c298e3cf792c8b3f3cead92fd09 (diff)
Merge branch 'length-function'
-rw-r--r--src/func.cc12
-rw-r--r--testdata/scad/features/len-tests.scad12
-rw-r--r--testdata/scad/minimal/allfunctions.scad1
3 files changed, 25 insertions, 0 deletions
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<std::string>&, const std::v
return Value();
}
+Value builtin_length(const Context *, const std::vector<std::string>&, const std::vector<Value> &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<std::string>&, const std::vector<Value> &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();
contact: Jan Huwald // Impressum