diff --git a/dataforge-meta/src/commonMain/kotlin/hep/dataforge/meta/mapMeta.kt b/dataforge-meta/src/commonMain/kotlin/hep/dataforge/meta/mapMeta.kt index df3e97a5..921fe0c2 100644 --- a/dataforge-meta/src/commonMain/kotlin/hep/dataforge/meta/mapMeta.kt +++ b/dataforge-meta/src/commonMain/kotlin/hep/dataforge/meta/mapMeta.kt @@ -6,7 +6,6 @@ import hep.dataforge.values.Value /** * Convert meta to map of maps */ -@DFExperimental fun Meta.toMap(descriptor: NodeDescriptor? = null): Map { return items.entries.associate { (token, item) -> token.toString() to when (item) { @@ -19,7 +18,6 @@ fun Meta.toMap(descriptor: NodeDescriptor? = null): Map { /** * Convert map of maps to meta */ -@DFExperimental fun Map.toMeta(descriptor: NodeDescriptor? = null): Meta = Meta { entries.forEach { (key, value) -> @Suppress("UNCHECKED_CAST") diff --git a/dataforge-meta/src/commonMain/kotlin/hep/dataforge/meta/metaMatcher.kt b/dataforge-meta/src/commonMain/kotlin/hep/dataforge/meta/metaMatcher.kt index 03df113d..f2f747db 100644 --- a/dataforge-meta/src/commonMain/kotlin/hep/dataforge/meta/metaMatcher.kt +++ b/dataforge-meta/src/commonMain/kotlin/hep/dataforge/meta/metaMatcher.kt @@ -4,7 +4,8 @@ import hep.dataforge.names.Name import hep.dataforge.names.toName /** - * Get all items matching given name. + * Get all items matching given name. The index of the last element, if present is used as a [Regex], + * against which indexes of elements are matched. */ fun Meta.getIndexed(name: Name): Map> { val root = when (name.length) { diff --git a/dataforge-meta/src/commonTest/kotlin/hep/dataforge/meta/MetaTest.kt b/dataforge-meta/src/commonTest/kotlin/hep/dataforge/meta/MetaTest.kt index c55cd4ad..55cc461d 100644 --- a/dataforge-meta/src/commonTest/kotlin/hep/dataforge/meta/MetaTest.kt +++ b/dataforge-meta/src/commonTest/kotlin/hep/dataforge/meta/MetaTest.kt @@ -32,7 +32,7 @@ class MetaTest { } @Test - fun metaToMap(){ + fun metaToMap() { val meta = Meta { "a" put 22 "b" put { @@ -47,6 +47,19 @@ class MetaTest { val map = meta.toMap() val reconstructed = map.toMeta() - assertEquals(meta,reconstructed) + assertEquals(meta, reconstructed) + } + + @Test + fun indexed() { + val meta = Meta { + (0..20).forEach { + set("a[$it]", it) + } + } + val indexed = meta.getIndexed("a[1.]") + assertEquals(10, indexed.size) + assertEquals(null, indexed["8"]) + assertEquals(12, indexed["12"].int) } } \ No newline at end of file