diff options
| author | jantuomi <jans.tuomi@gmail.com> | 2016-07-27 16:40:32 +0300 |
|---|---|---|
| committer | jantuomi <jans.tuomi@gmail.com> | 2016-07-27 16:41:50 +0300 |
| commit | 2aebd5103b0d6cd0b6895ecfb4db9857efb956d6 (patch) | |
| tree | ddebb91f614fe964cc4bb05ea87b9710bc6ae289 | |
| parent | c929e354e644df719ff06434fa178c50671c432b (diff) | |
Add list builtin function for instantiating list variables. Implement list addition.
3 files changed, 42 insertions, 7 deletions
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<List<DataContainer>> { + + public ListDataContainer(List<DataContainer> elements) { + setData(elements); + } + @Override public Type getType() { return Type.List; } - private List<DataContainer> elements = new ArrayList<>(); - @Override public String toString() { - List<String> strings = elements.stream().map( dataContainer -> dataContainer.toString() ).collect(Collectors.toList()); - return String.join(", ", strings); + List<String> 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<DataContainer> 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<Function> 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<DataContainer> params) throws TunkkiError { + ListDataContainer data = new ListDataContainer(params); + return data; + } + + @Override + public String getName() { + return "list"; + } +} |
