aboutsummaryrefslogtreecommitdiffstats
path: root/src/main/com
diff options
context:
space:
mode:
authorjantuomi <jans.tuomi@gmail.com>2016-07-27 17:00:15 +0300
committerjantuomi <jans.tuomi@gmail.com>2016-07-27 17:00:15 +0300
commit080fcd8dc32e18bf395b73aa6a5f14fd9bcf1958 (patch)
tree6c3e36eb86ca770c3453d4216d60648e9f94d25c /src/main/com
parent2aebd5103b0d6cd0b6895ecfb4db9857efb956d6 (diff)
Implement contains function for checking if element is in a list.
Diffstat (limited to 'src/main/com')
-rw-r--r--src/main/com/jantuomi/tunkki/core/runtime/builtins/BuiltinManager.java1
-rw-r--r--src/main/com/jantuomi/tunkki/core/runtime/builtins/ContainsBuiltinFunction.java44
2 files changed, 45 insertions, 0 deletions
diff --git a/src/main/com/jantuomi/tunkki/core/runtime/builtins/BuiltinManager.java b/src/main/com/jantuomi/tunkki/core/runtime/builtins/BuiltinManager.java
index 2ceefff..94c4fce 100644
--- a/src/main/com/jantuomi/tunkki/core/runtime/builtins/BuiltinManager.java
+++ b/src/main/com/jantuomi/tunkki/core/runtime/builtins/BuiltinManager.java
@@ -24,6 +24,7 @@ public class BuiltinManager {
builtins.add(new AsIntBuiltinFunction());
builtins.add(new IncludeBuiltinFunction());
builtins.add(new ListBuiltinFunction());
+ builtins.add(new ContainsBuiltinFunction());
}
public List<Function> getBuiltins() {
diff --git a/src/main/com/jantuomi/tunkki/core/runtime/builtins/ContainsBuiltinFunction.java b/src/main/com/jantuomi/tunkki/core/runtime/builtins/ContainsBuiltinFunction.java
new file mode 100644
index 0000000..ec8d6c3
--- /dev/null
+++ b/src/main/com/jantuomi/tunkki/core/runtime/builtins/ContainsBuiltinFunction.java
@@ -0,0 +1,44 @@
+package com.jantuomi.tunkki.core.runtime.builtins;
+
+import com.jantuomi.tunkki.core.parser.datatype.BooleanDataContainer;
+import com.jantuomi.tunkki.core.parser.datatype.DataContainer;
+import com.jantuomi.tunkki.core.parser.datatype.ListDataContainer;
+import com.jantuomi.tunkki.exception.TunkkiError;
+
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * Created by jan on 27.7.2016.
+ */
+public class ContainsBuiltinFunction extends BuiltinFunction {
+ public ContainsBuiltinFunction() {
+ super(Arrays.asList("list", "element"));
+ }
+
+ @Override
+ public DataContainer evaluate(List<DataContainer> params) throws TunkkiError {
+ if (params.size() != 2) {
+ throw new TunkkiError(TunkkiError.ExceptionType.ArgumentError, -1, "Function 'contains' expects two arguments.");
+ }
+
+ if (params.get(0).getType() != DataContainer.Type.List) {
+ throw new TunkkiError(TunkkiError.ExceptionType.ArgumentError, -1, "Function 'contains' expects a list as its first argument.");
+ }
+
+ ListDataContainer list = (ListDataContainer) params.get(0);
+ DataContainer comp = params.get(1);
+
+ for (DataContainer elem : list.getData()) {
+ if (elem.equals(comp)) {
+ return new BooleanDataContainer(true);
+ }
+ }
+ return new BooleanDataContainer(false);
+ }
+
+ @Override
+ public String getName() {
+ return "contains";
+ }
+}