From 2aebd5103b0d6cd0b6895ecfb4db9857efb956d6 Mon Sep 17 00:00:00 2001 From: jantuomi Date: Wed, 27 Jul 2016 16:40:32 +0300 Subject: Add list builtin function for instantiating list variables. Implement list addition. --- .../core/parser/datatype/ListDataContainer.java | 19 ++++++++------ .../core/runtime/builtins/BuiltinManager.java | 1 + .../core/runtime/builtins/ListBuiltinFunction.java | 29 ++++++++++++++++++++++ 3 files changed, 42 insertions(+), 7 deletions(-) create mode 100644 src/main/com/jantuomi/tunkki/core/runtime/builtins/ListBuiltinFunction.java (limited to 'src') diff --git a/src/main/com/jantuomi/tunkki/core/parser/datatype/ListDataContainer.java b/src/main/com/jantuomi/tunkki/core/parser/datatype/ListDataContainer.java index 5cd7e90..b8afb9f 100644 --- a/src/main/com/jantuomi/tunkki/core/parser/datatype/ListDataContainer.java +++ b/src/main/com/jantuomi/tunkki/core/parser/datatype/ListDataContainer.java @@ -9,26 +9,31 @@ import java.util.stream.Collectors; /** * Created by jan on 27.7.2016. */ -public class ListDataContainer extends DataContainer{ +public class ListDataContainer extends DataContainer> { + + public ListDataContainer(List elements) { + setData(elements); + } + @Override public Type getType() { return Type.List; } - private List elements = new ArrayList<>(); - @Override public String toString() { - List strings = elements.stream().map( dataContainer -> dataContainer.toString() ).collect(Collectors.toList()); - return String.join(", ", strings); + List strings = getData().stream().map( dataContainer -> dataContainer.toString() ).collect(Collectors.toList()); + return String.format("[%s]", String.join(", ", strings)); } @Override public DataContainer add(DataContainer other) throws TunkkiError { switch (other.getType()) { case List: - elements.addAll(((ListDataContainer) other).elements); - break; + List newList = new ArrayList<>(); + newList.addAll(getData()); + newList.addAll(((ListDataContainer) other).getData()); + return new ListDataContainer(newList); } return null; } 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 94d25a6..2ceefff 100644 --- a/src/main/com/jantuomi/tunkki/core/runtime/builtins/BuiltinManager.java +++ b/src/main/com/jantuomi/tunkki/core/runtime/builtins/BuiltinManager.java @@ -23,6 +23,7 @@ public class BuiltinManager { builtins.add(new ConcatBuiltinFunction()); builtins.add(new AsIntBuiltinFunction()); builtins.add(new IncludeBuiltinFunction()); + builtins.add(new ListBuiltinFunction()); } public List getBuiltins() { diff --git a/src/main/com/jantuomi/tunkki/core/runtime/builtins/ListBuiltinFunction.java b/src/main/com/jantuomi/tunkki/core/runtime/builtins/ListBuiltinFunction.java new file mode 100644 index 0000000..e09f809 --- /dev/null +++ b/src/main/com/jantuomi/tunkki/core/runtime/builtins/ListBuiltinFunction.java @@ -0,0 +1,29 @@ +package com.jantuomi.tunkki.core.runtime.builtins; + +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.ArrayList; +import java.util.Arrays; +import java.util.List; + +/** + * Created by jan on 27.7.2016. + */ +public class ListBuiltinFunction extends BuiltinFunction { + public ListBuiltinFunction() { + super(Arrays.asList("elements")); + } + + @Override + public DataContainer evaluate(List params) throws TunkkiError { + ListDataContainer data = new ListDataContainer(params); + return data; + } + + @Override + public String getName() { + return "list"; + } +} -- cgit v1.3