JS stdlib: added LinkedHashMap abd LinkedHashSet.
This commit is contained in:
@@ -98,6 +98,9 @@ public open class HashMap<K, V>(capacity: Int = 0) : MutableMap<K, V> {
|
|||||||
public override fun entrySet(): MutableSet<MutableMap.MutableEntry<K, V>> = js.noImpl
|
public override fun entrySet(): MutableSet<MutableMap.MutableEntry<K, V>> = js.noImpl
|
||||||
}
|
}
|
||||||
|
|
||||||
|
library
|
||||||
|
public open class LinkedHashMap<K, V>(capacity: Int = 0) : HashMap<K, V>(capacity)
|
||||||
|
|
||||||
library
|
library
|
||||||
public class NoSuchElementException(message: String? = null) : Exception() {}
|
public class NoSuchElementException(message: String? = null) : Exception() {}
|
||||||
|
|
||||||
|
|||||||
@@ -590,6 +590,99 @@
|
|||||||
return this.map;
|
return this.map;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
function LinkedHashMap() {
|
||||||
|
Kotlin.ComplexHashMap.call(this);
|
||||||
|
this.orderedKeys = [];
|
||||||
|
|
||||||
|
this.super_put_wn2jw4$ = this.put_wn2jw4$;
|
||||||
|
this.put_wn2jw4$ = function(key, value) {
|
||||||
|
if (!this.containsKey_za3rmp$(key)) {
|
||||||
|
this.orderedKeys.push(key);
|
||||||
|
}
|
||||||
|
|
||||||
|
return this.super_put_wn2jw4$(key, value);
|
||||||
|
};
|
||||||
|
|
||||||
|
this.super_remove_za3rmp$ = this.remove_za3rmp$;
|
||||||
|
this.remove_za3rmp$ = function(key) {
|
||||||
|
var i = this.orderedKeys.indexOf(key);
|
||||||
|
if (i != -1) {
|
||||||
|
this.orderedKeys.splice(i, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
return this.super_remove_za3rmp$(key);
|
||||||
|
};
|
||||||
|
|
||||||
|
this.super_clear = this.clear;
|
||||||
|
this.clear = function() {
|
||||||
|
this.super_clear();
|
||||||
|
this.orderedKeys = [];
|
||||||
|
};
|
||||||
|
|
||||||
|
this.keySet = function() {
|
||||||
|
// TODO return special Set which unsupported adding
|
||||||
|
var set = new Kotlin.LinkedHashSet();
|
||||||
|
set.map = this;
|
||||||
|
return set;
|
||||||
|
};
|
||||||
|
|
||||||
|
this.values = function() {
|
||||||
|
var set = new Kotlin.LinkedHashSet();
|
||||||
|
|
||||||
|
for (var i = 0, c = this.orderedKeys, l = c.length; i < l; i++) {
|
||||||
|
set.add_za3rmp$(this.get_za3rmp$(c[i]));
|
||||||
|
}
|
||||||
|
|
||||||
|
return set;
|
||||||
|
};
|
||||||
|
|
||||||
|
this.entrySet = function() {
|
||||||
|
var set = new Kotlin.LinkedHashSet();
|
||||||
|
|
||||||
|
for (var i = 0, c = this.orderedKeys, l = c.length; i < l; i++) {
|
||||||
|
set.add_za3rmp$(new Entry(c[i], this.get_za3rmp$(c[i])));
|
||||||
|
}
|
||||||
|
|
||||||
|
return set;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
LinkedHashMap.prototype = Object.create(Kotlin.ComplexHashMap);
|
||||||
|
|
||||||
|
Kotlin.LinkedHashMap = LinkedHashMap;
|
||||||
|
|
||||||
|
|
||||||
|
Kotlin.LinkedHashSet = Kotlin.createClassNow(Kotlin.AbstractCollection,
|
||||||
|
/** @constructs */
|
||||||
|
function () {
|
||||||
|
this.map = new Kotlin.LinkedHashMap();
|
||||||
|
},
|
||||||
|
/** @lends {Kotlin.LinkedHashSet.prototype} */
|
||||||
|
{
|
||||||
|
size: function () {
|
||||||
|
return this.map.size()
|
||||||
|
},
|
||||||
|
contains_za3rmp$: function (element) {
|
||||||
|
return this.map.containsKey_za3rmp$(element);
|
||||||
|
},
|
||||||
|
iterator: function () {
|
||||||
|
return new SetIterator(this);
|
||||||
|
},
|
||||||
|
add_za3rmp$: function (element) {
|
||||||
|
return this.map.put_wn2jw4$(element, true) == null;
|
||||||
|
},
|
||||||
|
remove_za3rmp$: function (element) {
|
||||||
|
return this.map.remove_za3rmp$(element) != null;
|
||||||
|
},
|
||||||
|
clear: function () {
|
||||||
|
this.map.clear();
|
||||||
|
},
|
||||||
|
toArray: function () {
|
||||||
|
return this.map.orderedKeys.slice();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
}());
|
}());
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -16,6 +16,11 @@ class PrimitiveMapJsTest : MapJsTest() {
|
|||||||
override fun emptyMutableMap(): MutableMap<String, Int> = HashMap()
|
override fun emptyMutableMap(): MutableMap<String, Int> = HashMap()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class LinkedHashMapTest : MapJsTest() {
|
||||||
|
override fun <T : kotlin.Comparable<T>> Collection<T>.toNormalizedList(): List<T> = this.toList()
|
||||||
|
override fun emptyMutableMap(): MutableMap<String, Int> = LinkedHashMap()
|
||||||
|
}
|
||||||
|
|
||||||
abstract class MapJsTest {
|
abstract class MapJsTest {
|
||||||
//TODO: replace `array(...).toList()` to `listOf(...)`
|
//TODO: replace `array(...).toList()` to `listOf(...)`
|
||||||
val KEYS = array("zero", "one", "two", "three").toList()
|
val KEYS = array("zero", "one", "two", "three").toList()
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ package test.collections
|
|||||||
import kotlin.test.*
|
import kotlin.test.*
|
||||||
import org.junit.Test
|
import org.junit.Test
|
||||||
import java.util.HashSet
|
import java.util.HashSet
|
||||||
|
import java.util.LinkedHashSet
|
||||||
|
|
||||||
class ComplexSetJsTest : SetJsTest() {
|
class ComplexSetJsTest : SetJsTest() {
|
||||||
// hashSetOf returns ComlpexHashSet because it is Generic
|
// hashSetOf returns ComlpexHashSet because it is Generic
|
||||||
@@ -13,6 +14,10 @@ class PrimitiveSetJsTest : SetJsTest() {
|
|||||||
override fun createEmptyMutableSet(): MutableSet<String> = HashSet<String>()
|
override fun createEmptyMutableSet(): MutableSet<String> = HashSet<String>()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class LinkedHashSetTest : SetJsTest() {
|
||||||
|
override fun createEmptyMutableSet(): MutableSet<String> = LinkedHashSet<String>()
|
||||||
|
}
|
||||||
|
|
||||||
abstract class SetJsTest {
|
abstract class SetJsTest {
|
||||||
val data: Set<String> = createTestMutableSet()
|
val data: Set<String> = createTestMutableSet()
|
||||||
val empty: Set<String> = createEmptyMutableSet()
|
val empty: Set<String> = createEmptyMutableSet()
|
||||||
|
|||||||
Reference in New Issue
Block a user