Meta equality for all
This commit is contained in:
parent
1f0a317cd8
commit
72954a8370
@ -4,6 +4,7 @@ import hep.dataforge.descriptors.ItemDescriptor
|
|||||||
import hep.dataforge.descriptors.NodeDescriptor
|
import hep.dataforge.descriptors.NodeDescriptor
|
||||||
import hep.dataforge.descriptors.ValueDescriptor
|
import hep.dataforge.descriptors.ValueDescriptor
|
||||||
import hep.dataforge.meta.Meta
|
import hep.dataforge.meta.Meta
|
||||||
|
import hep.dataforge.meta.MetaBase
|
||||||
import hep.dataforge.meta.MetaItem
|
import hep.dataforge.meta.MetaItem
|
||||||
import hep.dataforge.names.NameToken
|
import hep.dataforge.names.NameToken
|
||||||
import hep.dataforge.names.toName
|
import hep.dataforge.names.toName
|
||||||
@ -79,7 +80,7 @@ fun Meta.toJson(descriptor: NodeDescriptor? = null): JsonObject {
|
|||||||
|
|
||||||
fun JsonObject.toMeta(descriptor: NodeDescriptor? = null) = JsonMeta(this, descriptor)
|
fun JsonObject.toMeta(descriptor: NodeDescriptor? = null) = JsonMeta(this, descriptor)
|
||||||
|
|
||||||
class JsonMeta(val json: JsonObject, val descriptor: NodeDescriptor? = null) : Meta {
|
class JsonMeta(val json: JsonObject, val descriptor: NodeDescriptor? = null) : MetaBase() {
|
||||||
|
|
||||||
private fun JsonPrimitive.toValue(descriptor: ValueDescriptor?): Value {
|
private fun JsonPrimitive.toValue(descriptor: ValueDescriptor?): Value {
|
||||||
return when (this) {
|
return when (this) {
|
||||||
|
@ -42,7 +42,7 @@ class MetaFormatTest {
|
|||||||
if (meta[it] != result[it]) error("${meta[it]} != ${result[it]}")
|
if (meta[it] != result[it]) error("${meta[it]} != ${result[it]}")
|
||||||
}
|
}
|
||||||
|
|
||||||
assertEquals(meta, result)
|
assertEquals<Meta>(meta, result)
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
@ -7,7 +7,7 @@ import hep.dataforge.names.NameToken
|
|||||||
*
|
*
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
class Laminate(layers: List<Meta>) : Meta {
|
class Laminate(layers: List<Meta>) : MetaBase() {
|
||||||
|
|
||||||
val layers: List<Meta> = layers.flatMap {
|
val layers: List<Meta> = layers.flatMap {
|
||||||
if (it is Laminate) {
|
if (it is Laminate) {
|
||||||
|
@ -15,10 +15,11 @@ import hep.dataforge.values.boolean
|
|||||||
* * a [NodeItem] (node)
|
* * a [NodeItem] (node)
|
||||||
*/
|
*/
|
||||||
sealed class MetaItem<out M : Meta> {
|
sealed class MetaItem<out M : Meta> {
|
||||||
data class ValueItem(val value: Value) : MetaItem<Nothing>(){
|
data class ValueItem(val value: Value) : MetaItem<Nothing>() {
|
||||||
override fun toString(): String = value.toString()
|
override fun toString(): String = value.toString()
|
||||||
}
|
}
|
||||||
data class NodeItem<M : Meta>(val node: M) : MetaItem<M>(){
|
|
||||||
|
data class NodeItem<M : Meta>(val node: M) : MetaItem<M>() {
|
||||||
override fun toString(): String = node.toString()
|
override fun toString(): String = node.toString()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -46,6 +47,12 @@ interface Meta : MetaRepr {
|
|||||||
|
|
||||||
override fun toMeta(): Meta = this
|
override fun toMeta(): Meta = this
|
||||||
|
|
||||||
|
override fun equals(other: Any?): Boolean
|
||||||
|
|
||||||
|
override fun hashCode(): Int
|
||||||
|
|
||||||
|
override fun toString(): String
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
const val TYPE = "meta"
|
const val TYPE = "meta"
|
||||||
/**
|
/**
|
||||||
@ -174,23 +181,26 @@ operator fun <M : MetaNode<M>> MetaNode<M>?.get(key: NameToken): MetaItem<M>? =
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Equals and hash code implementation for meta node
|
* Equals, hashcode and to string for any meta
|
||||||
*/
|
*/
|
||||||
abstract class AbstractMetaNode<M : MetaNode<M>> : MetaNode<M> {
|
abstract class MetaBase: Meta{
|
||||||
override fun equals(other: Any?): Boolean {
|
|
||||||
if (this === other) return true
|
|
||||||
if (other !is Meta) return false
|
|
||||||
|
|
||||||
return this.items == other.items//this.items.keys == other.items.keys && items.keys.all { this[it] == other[it] }
|
override fun equals(other: Any?): Boolean = if(other is Meta) {
|
||||||
|
items == other.items
|
||||||
|
} else {
|
||||||
|
false
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun hashCode(): Int {
|
override fun hashCode(): Int = items.hashCode()
|
||||||
return items.hashCode()
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun toString(): String = items.toString()
|
override fun toString(): String = items.toString()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Equals and hash code implementation for meta node
|
||||||
|
*/
|
||||||
|
abstract class AbstractMetaNode<M : MetaNode<M>> : MetaNode<M>, MetaBase()
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The meta implementation which is guaranteed to be immutable.
|
* The meta implementation which is guaranteed to be immutable.
|
||||||
*
|
*
|
||||||
@ -210,7 +220,7 @@ fun MetaItem<*>.seal(): MetaItem<SealedMeta> = when (this) {
|
|||||||
is NodeItem -> NodeItem(node.seal())
|
is NodeItem -> NodeItem(node.seal())
|
||||||
}
|
}
|
||||||
|
|
||||||
object EmptyMeta : Meta {
|
object EmptyMeta : MetaBase() {
|
||||||
override val items: Map<NameToken, MetaItem<*>> = emptyMap()
|
override val items: Map<NameToken, MetaItem<*>> = emptyMap()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -159,7 +159,7 @@ class StringValue(override val string: String) : Value {
|
|||||||
|
|
||||||
override fun hashCode(): Int = string.hashCode()
|
override fun hashCode(): Int = string.hashCode()
|
||||||
|
|
||||||
override fun toString(): String = value.toString()
|
override fun toString(): String = "\"${value.toString()}\""
|
||||||
}
|
}
|
||||||
|
|
||||||
class EnumValue<E : Enum<*>>(override val value: E) : Value {
|
class EnumValue<E : Enum<*>>(override val value: E) : Value {
|
||||||
@ -188,11 +188,14 @@ class ListValue(override val list: List<Value>) : Value {
|
|||||||
override val number: Number get() = list.first().number
|
override val number: Number get() = list.first().number
|
||||||
override val string: String get() = list.first().string
|
override val string: String get() = list.first().string
|
||||||
|
|
||||||
override fun toString(): String = list.joinToString (prefix = "[ ", postfix = " ]")
|
override fun toString(): String = list.joinToString (prefix = "[", postfix = "]")
|
||||||
|
|
||||||
override fun equals(other: Any?): Boolean {
|
override fun equals(other: Any?): Boolean {
|
||||||
if (this === other) return true
|
if (this === other) return true
|
||||||
if (other !is Value) return false
|
if (other !is Value) return false
|
||||||
|
if( other is DoubleArrayValue){
|
||||||
|
|
||||||
|
}
|
||||||
return list == other.list
|
return list == other.list
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -31,10 +31,9 @@ class DoubleArrayValue(override val value: DoubleArray) : Value {
|
|||||||
if (this === other) return true
|
if (this === other) return true
|
||||||
if (other !is Value) return false
|
if (other !is Value) return false
|
||||||
|
|
||||||
return if (other is DoubleArrayValue) {
|
return when (other) {
|
||||||
value.contentEquals(other.value)
|
is DoubleArrayValue -> value.contentEquals(other.value)
|
||||||
} else {
|
else -> list == other.list
|
||||||
list == other.list
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -42,7 +41,7 @@ class DoubleArrayValue(override val value: DoubleArray) : Value {
|
|||||||
return value.contentHashCode()
|
return value.contentHashCode()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun toString(): String = value.toString()
|
override fun toString(): String = list.joinToString (prefix = "[", postfix = "]")
|
||||||
}
|
}
|
||||||
|
|
||||||
fun DoubleArray.asValue(): DoubleArrayValue = DoubleArrayValue(this)
|
fun DoubleArray.asValue(): DoubleArrayValue = DoubleArrayValue(this)
|
||||||
|
@ -29,7 +29,7 @@ fun Meta.toDynamic(): dynamic {
|
|||||||
return res
|
return res
|
||||||
}
|
}
|
||||||
|
|
||||||
class DynamicMeta(val obj: dynamic) : Meta {
|
class DynamicMeta(val obj: dynamic) : MetaBase() {
|
||||||
private fun keys() = js("Object.keys(this.obj)") as Array<String>
|
private fun keys() = js("Object.keys(this.obj)") as Array<String>
|
||||||
|
|
||||||
private fun isArray(@Suppress("UNUSED_PARAMETER") obj: dynamic): Boolean =
|
private fun isArray(@Suppress("UNUSED_PARAMETER") obj: dynamic): Boolean =
|
||||||
|
Loading…
Reference in New Issue
Block a user