Changed the logic of Value::isList
for serialization
This commit is contained in:
parent
2315fb963b
commit
1b46d00a91
@ -4,6 +4,8 @@
|
||||
### Added
|
||||
|
||||
### Changed
|
||||
- `ListValue` and `DoubleArrayValue` implement `Iterable`.
|
||||
- Changed the logic of `Value::isList` to check for type instead of size
|
||||
|
||||
### Deprecated
|
||||
|
||||
@ -12,6 +14,7 @@
|
||||
### Fixed
|
||||
|
||||
### Security
|
||||
|
||||
## [0.2.0]
|
||||
### Added
|
||||
|
||||
|
@ -2,7 +2,7 @@ plugins {
|
||||
id("ru.mipt.npm.project")
|
||||
}
|
||||
|
||||
val dataforgeVersion by extra("0.2.0")
|
||||
val dataforgeVersion by extra("0.2.1-dev-1")
|
||||
|
||||
val bintrayRepo by extra("dataforge")
|
||||
val githubProject by extra("dataforge-core")
|
||||
|
@ -813,7 +813,7 @@ public final class hep/dataforge/names/NameTokenKt {
|
||||
public static final fun withIndex (Lhep/dataforge/names/NameToken;Ljava/lang/String;)Lhep/dataforge/names/NameToken;
|
||||
}
|
||||
|
||||
public final class hep/dataforge/values/DoubleArrayValue : hep/dataforge/values/Value {
|
||||
public final class hep/dataforge/values/DoubleArrayValue : hep/dataforge/values/Value, java/lang/Iterable, kotlin/jvm/internal/markers/KMappedMarker {
|
||||
public fun <init> ([D)V
|
||||
public fun equals (Ljava/lang/Object;)Z
|
||||
public fun getList ()Ljava/util/List;
|
||||
@ -824,6 +824,7 @@ public final class hep/dataforge/values/DoubleArrayValue : hep/dataforge/values/
|
||||
public synthetic fun getValue ()Ljava/lang/Object;
|
||||
public fun getValue ()[D
|
||||
public fun hashCode ()I
|
||||
public fun iterator ()Ljava/util/Iterator;
|
||||
public fun toString ()Ljava/lang/String;
|
||||
}
|
||||
|
||||
@ -869,7 +870,7 @@ public final class hep/dataforge/values/LazyParsedValue : hep/dataforge/values/V
|
||||
public fun toString ()Ljava/lang/String;
|
||||
}
|
||||
|
||||
public final class hep/dataforge/values/ListValue : hep/dataforge/values/Value {
|
||||
public final class hep/dataforge/values/ListValue : hep/dataforge/values/Value, java/lang/Iterable, kotlin/jvm/internal/markers/KMappedMarker {
|
||||
public fun <init> (Ljava/util/List;)V
|
||||
public fun equals (Ljava/lang/Object;)Z
|
||||
public fun getList ()Ljava/util/List;
|
||||
@ -879,6 +880,7 @@ public final class hep/dataforge/values/ListValue : hep/dataforge/values/Value {
|
||||
public synthetic fun getValue ()Ljava/lang/Object;
|
||||
public fun getValue ()Ljava/util/List;
|
||||
public fun hashCode ()I
|
||||
public fun iterator ()Ljava/util/Iterator;
|
||||
public fun toString ()Ljava/lang/String;
|
||||
}
|
||||
|
||||
|
@ -105,7 +105,7 @@ public object Null : Value {
|
||||
* Singleton true value
|
||||
*/
|
||||
public object True : Value {
|
||||
override val value: Any? get() = true
|
||||
override val value: Any get() = true
|
||||
override val type: ValueType get() = ValueType.BOOLEAN
|
||||
override val number: Number get() = 1.0
|
||||
override val string: String get() = "true"
|
||||
@ -120,7 +120,7 @@ public object True : Value {
|
||||
* Singleton false value
|
||||
*/
|
||||
public object False : Value {
|
||||
override val value: Any? get() = false
|
||||
override val value: Any get() = false
|
||||
override val type: ValueType get() = ValueType.BOOLEAN
|
||||
override val number: Number get() = -1.0
|
||||
override val string: String get() = "false"
|
||||
@ -132,7 +132,7 @@ public object False : Value {
|
||||
}
|
||||
|
||||
public class NumberValue(override val number: Number) : Value {
|
||||
override val value: Any? get() = number
|
||||
override val value: Any get() = number
|
||||
override val type: ValueType get() = ValueType.NUMBER
|
||||
override val string: String get() = number.toString()
|
||||
|
||||
@ -155,7 +155,7 @@ public class NumberValue(override val number: Number) : Value {
|
||||
}
|
||||
|
||||
public class StringValue(override val string: String) : Value {
|
||||
override val value: Any? get() = string
|
||||
override val value: Any get() = string
|
||||
override val type: ValueType get() = ValueType.STRING
|
||||
override val number: Number get() = string.toDouble()
|
||||
|
||||
@ -182,7 +182,7 @@ public class EnumValue<E : Enum<*>>(override val value: E) : Value {
|
||||
override fun toString(): String = value.toString()
|
||||
}
|
||||
|
||||
public class ListValue(override val list: List<Value>) : Value {
|
||||
public class ListValue(override val list: List<Value>) : Value, Iterable<Value> {
|
||||
init {
|
||||
require(list.isNotEmpty()) { "Can't create list value from empty list" }
|
||||
}
|
||||
@ -194,6 +194,8 @@ public class ListValue(override val list: List<Value>) : Value {
|
||||
|
||||
override fun toString(): String = list.joinToString(prefix = "[", postfix = "]")
|
||||
|
||||
override fun iterator(): Iterator<Value> = list.iterator()
|
||||
|
||||
override fun equals(other: Any?): Boolean {
|
||||
if (this === other) return true
|
||||
if (other !is Value) return false
|
||||
|
@ -15,7 +15,7 @@ public class LazyParsedValue(override val string: String) : Value {
|
||||
|
||||
override fun equals(other: Any?): Boolean = other is Value && this.parsedValue == other
|
||||
|
||||
override fun hashCode(): Int = string.hashCode()
|
||||
override fun hashCode(): Int = string.hashCode()
|
||||
}
|
||||
|
||||
public fun String.lazyParseValue(): LazyParsedValue = LazyParsedValue(this)
|
||||
@ -23,7 +23,7 @@ public fun String.lazyParseValue(): LazyParsedValue = LazyParsedValue(this)
|
||||
/**
|
||||
* A performance optimized version of list value for doubles
|
||||
*/
|
||||
public class DoubleArrayValue(override val value: DoubleArray) : Value {
|
||||
public class DoubleArrayValue(override val value: DoubleArray) : Value, Iterable<Double> {
|
||||
override val type: ValueType get() = ValueType.NUMBER
|
||||
override val number: Double get() = value.first()
|
||||
override val string: String get() = value.first().toString()
|
||||
@ -43,7 +43,9 @@ public class DoubleArrayValue(override val value: DoubleArray) : Value {
|
||||
return value.contentHashCode()
|
||||
}
|
||||
|
||||
override fun toString(): String = list.joinToString (prefix = "[", postfix = "]")
|
||||
override fun toString(): String = list.joinToString(prefix = "[", postfix = "]")
|
||||
|
||||
override fun iterator(): Iterator<Double> = value.iterator()
|
||||
}
|
||||
|
||||
public fun DoubleArray.asValue(): Value = if(isEmpty()) Null else DoubleArrayValue(this)
|
||||
public fun DoubleArray.asValue(): Value = if (isEmpty()) Null else DoubleArrayValue(this)
|
||||
|
@ -9,9 +9,10 @@ import hep.dataforge.meta.MetaBuilder
|
||||
public fun Value.isNull(): Boolean = this == Null
|
||||
|
||||
/**
|
||||
* Check if value is list
|
||||
* Check if value is list. This method checks the type of the value, not the number of the elements.
|
||||
* So it will return `true` for empty lists and lists of one elements.
|
||||
*/
|
||||
public fun Value.isList(): Boolean = this.list.size > 1
|
||||
public fun Value.isList(): Boolean = this is Iterable<*>
|
||||
|
||||
public val Value.boolean: Boolean
|
||||
get() = this == True
|
||||
|
Loading…
Reference in New Issue
Block a user