separate compiler and plugin tests
This commit is contained in:
@@ -0,0 +1,58 @@
|
||||
open class IEquality {
|
||||
fun equals(other : Any) : Boolean
|
||||
= (this as java.lang.Object).equals(other as java.lang.Object)
|
||||
}
|
||||
|
||||
open class IHashable : IEquality {
|
||||
val hashCode : Integer
|
||||
get() = (this as java.lang.Object).hashCode()
|
||||
|
||||
}
|
||||
|
||||
open class IMap<K, V> {
|
||||
fun get(key : K) : V
|
||||
fun set(key : K, value : V) : V
|
||||
fun remove(key : K) : V
|
||||
fun containsKey(key : K) : Boolean
|
||||
}
|
||||
|
||||
class HashableWrapper(val obj : Any) : IHashable
|
||||
// equals and hashCode implementations are inherited
|
||||
|
||||
[inline] fun Any.hashable() : HashableWrapper = HashableWrapper(this)
|
||||
|
||||
open class IHashingStrategy<K> {
|
||||
fun equals(a : K, b : K) : Boolean
|
||||
fun hashCode(a : K) : Integer
|
||||
}
|
||||
|
||||
class DefaultHashingStrategy<in K : IHashable> : IHashingStrategy<K> {
|
||||
override fun equals(a : K, b : K) : Boolean = a.equals(b)
|
||||
override fun hashCode(a : K) : Integer = a.hashCode
|
||||
}
|
||||
|
||||
class JavaObjectHashingStrategy<K> : IHashingStrategy<K> {
|
||||
override fun equals(a : K, b : K) : Boolean
|
||||
= a.hashable().equals(b)
|
||||
override fun hashCode(a : K) : Integer
|
||||
= a.hashable().hashCode
|
||||
}
|
||||
|
||||
class HashMap<K, V> : IMap<K, V> {
|
||||
private [inline] fun hashCode(a : K) = a.hashable().hashCode
|
||||
private [inline] fun equals(a : K, b : K) = a.hashable() == b
|
||||
|
||||
// everything else uses these equals() and hashCode()...
|
||||
|
||||
}
|
||||
|
||||
class StrategyHashMap<K, V>(hashingStrategy : IHashingStrategy<K>) : IMap<K, V> {
|
||||
|
||||
|
||||
// where !(K : IHashable)
|
||||
this() : this(JavaObjectHashingStrategy<K>()) {}
|
||||
|
||||
//this() where (K : IHashable) : this(DefaultHashingStrategy<K>()) {}
|
||||
//...
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user