From 73662814cab18e0eff51f2e8212a8310628c2fe8 Mon Sep 17 00:00:00 2001 From: aNNiMON Date: Fri, 8 Dec 2023 22:32:06 +0200 Subject: [PATCH] Add collections documentation --- docs/src/docgen-md.own | 1 + docs/src/modules/collections.yml | 26 +++++++++++++++++++ .../modules/collections/collections.java | 18 +++---------- 3 files changed, 31 insertions(+), 14 deletions(-) create mode 100644 docs/src/modules/collections.yml diff --git a/docs/src/docgen-md.own b/docs/src/docgen-md.own index aff6ccc..adcc827 100644 --- a/docs/src/docgen-md.own +++ b/docs/src/docgen-md.own @@ -7,6 +7,7 @@ OUTPUT_PATH_FMT = OUTPUT_DIR_FMT + "/%s.md" LANGS = ["en", "ru"] MODULES = [ "std", + "collections", "date", "downloader", "files", diff --git a/docs/src/modules/collections.yml b/docs/src/modules/collections.yml new file mode 100644 index 0000000..07f3766 --- /dev/null +++ b/docs/src/modules/collections.yml @@ -0,0 +1,26 @@ +name: collections +scope: both +desc: Contains functions for working with collections +desc_ru: Содержит функции для работы с коллекциями +since: 2.0.0 +functions: + - name: hashMap + args: "fromMap = {}" + desc: creates a new HashMap based on `fromMap` values + desc_ru: создаёт новый HashMap из значений `fromMap` + - name: linkedHashMap + args: "fromMap = {}" + desc: creates a new LinkedHashMap based on `fromMap` values + desc_ru: создаёт новый LinkedHashMap из значений `fromMap` + - name: concurrentHashMap + args: "fromMap = {}" + desc: creates a new ConcurrentHashMap based on `fromMap` values + desc_ru: создаёт новый ConcurrentHashMap из значений `fromMap` + - name: treeMap + args: "fromMap = {}, comparator = def(a, b) = 0" + desc: creates a new TreeMap based on `fromMap` values and `comparator` + desc_ru: создаёт новый TreeMap из значений `fromMap` и компаратора `comparator` + - name: concurrentSkipListMap + args: "fromMap = {}, comparator = def(a, b) = 0" + desc: creates a new ConcurrentSkipListMap based on `fromMap` values and `comparator` + desc_ru: создаёт новый ConcurrentSkipListMap из значений `fromMap` и компаратора `comparator` diff --git a/modules/main/src/main/java/com/annimon/ownlang/modules/collections/collections.java b/modules/main/src/main/java/com/annimon/ownlang/modules/collections/collections.java index b01fa02..b49ff8e 100644 --- a/modules/main/src/main/java/com/annimon/ownlang/modules/collections/collections.java +++ b/modules/main/src/main/java/com/annimon/ownlang/modules/collections/collections.java @@ -53,24 +53,14 @@ public class collections implements Module { case 0: // treeMap() map = mapSupplier.get(); break; - case 1: // treeMap(map) || treeMap(comparator) - if (args[0].type() == Types.MAP) { - map = mapSupplier.get(); - map.putAll(((MapValue) args[0]).getMap()); - } else if (args[0].type() == Types.FUNCTION) { - final Function comparator = ValueUtils.consumeFunction(args[0], 0); - map = comparatorToMapFunction.apply((o1, o2) -> comparator.execute(o1, o2).asInt()); - } else { - throw new TypeException("Map or comparator function expected in first argument"); - } + case 1: // treeMap(map) + map = mapSupplier.get(); + map.putAll(ValueUtils.consumeMap(args[0], 0).getMap()); break; case 2: // treeMap(map, comparator) - if (args[0].type() != Types.MAP) { - throw new TypeException("Map expected in first argument"); - } final Function comparator = ValueUtils.consumeFunction(args[1], 1); map = comparatorToMapFunction.apply((o1, o2) -> comparator.execute(o1, o2).asInt()); - map.putAll(((MapValue) args[0]).getMap()); + map.putAll(ValueUtils.consumeMap(args[0], 0).getMap()); break; default: throw new IllegalStateException();