Merge pull request #61 from mipt-npm/dev

0.4.0-dev-2
This commit is contained in:
Alexander Nozik 2021-03-07 15:06:32 +03:00 committed by GitHub
commit e13e3ab6bf
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
195 changed files with 2435 additions and 2105 deletions

View File

@ -4,16 +4,33 @@ on: [ push ]
jobs: jobs:
build: build:
strategy:
runs-on: ubuntu-latest matrix:
os: [ macOS-latest, windows-latest ]
runs-on: ${{matrix.os}}
steps: steps:
- uses: actions/checkout@v2 - name: Checkout the repo
uses: actions/checkout@v2
- name: Set up JDK 11 - name: Set up JDK 11
uses: actions/setup-java@v1 uses: actions/setup-java@v1
with: with:
java-version: 11 java-version: 11
- name: Grant execute permission for gradlew - name: Add msys to path
run: chmod +x gradlew if: matrix.os == 'windows-latest'
- name: Build with Gradle run: SETX PATH "%PATH%;C:\msys64\mingw64\bin"
run: ./gradlew build - name: Cache gradle
uses: actions/cache@v2
with:
path: ~/.gradle/caches
key: ${{ runner.os }}-gradle-${{ hashFiles('*.gradle.kts') }}
restore-keys: |
${{ runner.os }}-gradle-
- name: Cache konan
uses: actions/cache@v2
with:
path: ~/.konan
key: ${{ runner.os }}-gradle-${{ hashFiles('*.gradle.kts') }}
restore-keys: |
${{ runner.os }}-gradle-
- name: Build
run: ./gradlew build --no-daemon --stacktrace

View File

@ -1,40 +1,57 @@
name: Bintray Publish name: Gradle publish
on: on:
workflow_dispatch:
release: release:
types: types:
- created - created
jobs: jobs:
build-on-windows: publish:
runs-on: windows-latest environment:
name: publish
strategy:
matrix:
os: [macOS-latest, windows-latest]
runs-on: ${{matrix.os}}
steps: steps:
- uses: actions/checkout@v2 - name: Checkout the repo
uses: actions/checkout@v2
- name: Set up JDK 11 - name: Set up JDK 11
uses: actions/setup-java@v1 uses: actions/setup-java@v1
with: with:
java-version: 11 java-version: 11
- name: Grant execute permission for gradlew - name: Add msys to path
run: chmod +x gradlew if: matrix.os == 'windows-latest'
- name: Gradle clean run: SETX PATH "%PATH%;C:\msys64\mingw64\bin"
run: ./gradlew clean - name: Cache gradle
- name: Gradle build uses: actions/cache@v2
run: ./gradlew build
- name: Run release task
run: ./gradlew release -PbintrayUser=${{ secrets.BINTRAY_USER }} -PbintrayApiKey=${{ secrets.BINTRAY_KEY }}
build-on-macos:
runs-on: macos-latest
steps:
- uses: actions/checkout@v2
- name: Set up JDK 11
uses: actions/setup-java@v1
with: with:
java-version: 11 path: ~/.gradle/caches
- name: Grant execute permission for gradlew key: ${{ runner.os }}-gradle-${{ hashFiles('*.gradle.kts') }}
run: chmod +x gradlew restore-keys: |
- name: Gradle clean ${{ runner.os }}-gradle-
run: ./gradlew clean - name: Cache konan
- name: Gradle build uses: actions/cache@v2
run: ./gradlew build with:
- name: Run release task path: ~/.konan
run: ./gradlew release -PbintrayUser=${{ secrets.BINTRAY_USER }} -PbintrayApiKey=${{ secrets.BINTRAY_KEY }} key: ${{ runner.os }}-gradle-${{ hashFiles('*.gradle.kts') }}
restore-keys: |
${{ runner.os }}-gradle-
- name: Publish Windows Artifacts
if: matrix.os == 'windows-latest'
run: >
./gradlew release --no-daemon
-Ppublishing.github.user=${{ secrets.PUBLISHING_GITHUB_USER }}
-Ppublishing.github.token=${{ secrets.PUBLISHING_GITHUB_TOKEN }}
-Ppublishing.space.user=${{ secrets.PUBLISHING_SPACE_USER }}
-Ppublishing.space.token=${{ secrets.PUBLISHING_SPACE_TOKEN }}
- name: Publish Mac Artifacts
if: matrix.os == 'macOS-latest'
run: >
./gradlew release --no-daemon
-Ppublication.platform=macosX64
-Ppublishing.github.user=${{ secrets.PUBLISHING_GITHUB_USER }}
-Ppublishing.github.token=${{ secrets.PUBLISHING_GITHUB_TOKEN }}
-Ppublishing.space.user=${{ secrets.PUBLISHING_SPACE_USER }}
-Ppublishing.space.token=${{ secrets.PUBLISHING_SPACE_TOKEN }}

View File

@ -2,12 +2,18 @@
## [Unreleased] ## [Unreleased]
### Added ### Added
- LogManager plugin
- dataforge-context API dependency on SLF4j
### Changed ### Changed
- Kotlin-logging moved from common to JVM and JS. Replaced by console for native.
- Package changed to `space.kscience`
### Deprecated ### Deprecated
### Removed ### Removed
- Common dependency on Kotlin-logging
- Kotlinx-io fork dependency. Replaced by Ktor-io.
### Fixed ### Fixed

View File

@ -3,8 +3,6 @@
![Gradle build](https://github.com/mipt-npm/dataforge-core/workflows/Gradle%20build/badge.svg) ![Gradle build](https://github.com/mipt-npm/dataforge-core/workflows/Gradle%20build/badge.svg)
[ ![Download](https://api.bintray.com/packages/mipt-npm/dataforge/dataforge-meta/images/download.svg) ](https://bintray.com/mipt-npm/dataforge/dataforge-meta/_latestVersion)
<hr/> <hr/>
* ### [dataforge-context](dataforge-context) * ### [dataforge-context](dataforge-context)
@ -49,7 +47,7 @@
> **Maturity**: EXPERIMENTAL > **Maturity**: EXPERIMENTAL
<hr/> <hr/>
* ### [dataforge-io-yaml](dataforge-io-yaml) * ### [dataforge-io-yaml](dataforge-io/dataforge-io-yaml)
> YAML meta converters and Front Matter envelope format > YAML meta converters and Front Matter envelope format
> >
> **Maturity**: PROTOTYPE > **Maturity**: PROTOTYPE

View File

@ -1,20 +1,18 @@
plugins { plugins {
id("ru.mipt.npm.project") id("ru.mipt.npm.gradle.project")
} }
val dataforgeVersion by extra("0.3.0")
allprojects { allprojects {
group = "hep.dataforge" group = "space.kscience"
version = dataforgeVersion version = "0.4.0-dev-2"
apply<org.jetbrains.dokka.gradle.DokkaPlugin>()
} }
subprojects { subprojects {
apply(plugin = "ru.mipt.npm.publish") apply(plugin = "maven-publish")
repositories {
maven("https://dl.bintray.com/mipt-npm/kscience")
maven("https://dl.bintray.com/mipt-npm/dev")
}
} }
readme { readme {
@ -22,7 +20,11 @@ readme {
} }
ksciencePublish { ksciencePublish {
bintrayRepo = "dataforge" github("dataforge-core")
githubProject = "dataforge-core" space("https://maven.pkg.jetbrains.space/mipt-npm/p/sci/maven")
spaceRepo = "https://maven.jetbrains.space/mipt-npm/p/df/maven" sonatype()
}
apiValidation {
nonPublicMarkers.add("space.kscience.dataforge.misc.DFExperimental")
} }

View File

@ -1,42 +1,42 @@
public abstract class hep/dataforge/context/AbstractPlugin : hep/dataforge/context/Plugin { public abstract class space/kscience/dataforge/context/AbstractPlugin : space/kscience/dataforge/context/Plugin {
public fun <init> ()V public fun <init> ()V
public fun <init> (Lhep/dataforge/meta/Meta;)V public fun <init> (Lspace/kscience/dataforge/meta/Meta;)V
public synthetic fun <init> (Lhep/dataforge/meta/Meta;ILkotlin/jvm/internal/DefaultConstructorMarker;)V public synthetic fun <init> (Lspace/kscience/dataforge/meta/Meta;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
public fun attach (Lhep/dataforge/context/Context;)V public fun attach (Lspace/kscience/dataforge/context/Context;)V
public fun content (Ljava/lang/String;)Ljava/util/Map; public fun content (Ljava/lang/String;)Ljava/util/Map;
public final fun dependsOn ()Ljava/util/Map; public final fun dependsOn ()Ljava/util/Map;
public fun detach ()V public fun detach ()V
public fun getContext ()Lhep/dataforge/context/Context; public fun getContext ()Lspace/kscience/dataforge/context/Context;
public fun getDefaultChainTarget ()Ljava/lang/String; public fun getDefaultChainTarget ()Ljava/lang/String;
public fun getDefaultTarget ()Ljava/lang/String; public fun getDefaultTarget ()Ljava/lang/String;
public fun getMeta ()Lhep/dataforge/meta/Meta; public fun getMeta ()Lspace/kscience/dataforge/meta/Meta;
public fun getName ()Lhep/dataforge/names/Name; public fun getName ()Lspace/kscience/dataforge/names/Name;
protected final fun require (Lhep/dataforge/context/PluginFactory;Lhep/dataforge/meta/Meta;)Lkotlin/properties/ReadOnlyProperty; protected final fun require (Lspace/kscience/dataforge/context/PluginFactory;Lspace/kscience/dataforge/meta/Meta;)Lkotlin/properties/ReadOnlyProperty;
public static synthetic fun require$default (Lhep/dataforge/context/AbstractPlugin;Lhep/dataforge/context/PluginFactory;Lhep/dataforge/meta/Meta;ILjava/lang/Object;)Lkotlin/properties/ReadOnlyProperty; public static synthetic fun require$default (Lspace/kscience/dataforge/context/AbstractPlugin;Lspace/kscience/dataforge/context/PluginFactory;Lspace/kscience/dataforge/meta/Meta;ILjava/lang/Object;)Lkotlin/properties/ReadOnlyProperty;
public fun toMeta ()Lhep/dataforge/meta/Meta; public fun toMeta ()Lspace/kscience/dataforge/meta/Meta;
} }
public final class hep/dataforge/context/AbstractPluginKt { public final class space/kscience/dataforge/context/AbstractPluginKt {
public static final fun toMap (Ljava/util/Collection;)Ljava/util/Map; public static final fun toMap (Ljava/util/Collection;)Ljava/util/Map;
} }
public final class hep/dataforge/context/ClassLoaderPlugin : hep/dataforge/context/AbstractPlugin { public final class space/kscience/dataforge/context/ClassLoaderPlugin : space/kscience/dataforge/context/AbstractPlugin {
public static final field Companion Lhep/dataforge/context/ClassLoaderPlugin$Companion; public static final field Companion Lspace/kscience/dataforge/context/ClassLoaderPlugin$Companion;
public fun <init> (Ljava/lang/ClassLoader;)V public fun <init> (Ljava/lang/ClassLoader;)V
public fun getTag ()Lhep/dataforge/context/PluginTag; public fun getTag ()Lspace/kscience/dataforge/context/PluginTag;
public final fun services (Lkotlin/reflect/KClass;)Lkotlin/sequences/Sequence; public final fun services (Lkotlin/reflect/KClass;)Lkotlin/sequences/Sequence;
} }
public final class hep/dataforge/context/ClassLoaderPlugin$Companion { public final class space/kscience/dataforge/context/ClassLoaderPlugin$Companion {
public final fun getDEFAULT ()Lhep/dataforge/context/ClassLoaderPlugin; public final fun getDEFAULT ()Lspace/kscience/dataforge/context/ClassLoaderPlugin;
} }
public final class hep/dataforge/context/ClassLoaderPluginKt { public final class space/kscience/dataforge/context/ClassLoaderPluginKt {
public static final fun getClassLoaderPlugin (Lhep/dataforge/context/Context;)Lhep/dataforge/context/ClassLoaderPlugin; public static final fun getClassLoaderPlugin (Lspace/kscience/dataforge/context/Context;)Lspace/kscience/dataforge/context/ClassLoaderPlugin;
} }
public class hep/dataforge/context/Context : hep/dataforge/meta/MetaRepr, hep/dataforge/misc/Named, hep/dataforge/provider/Provider, kotlinx/coroutines/CoroutineScope { public class space/kscience/dataforge/context/Context : kotlinx/coroutines/CoroutineScope, space/kscience/dataforge/meta/MetaRepr, space/kscience/dataforge/misc/Named, space/kscience/dataforge/provider/Provider {
public static final field Companion Lhep/dataforge/context/Context$Companion; public static final field Companion Lspace/kscience/dataforge/context/Context$Companion;
public static final field PROPERTY_TARGET Ljava/lang/String; public static final field PROPERTY_TARGET Ljava/lang/String;
public fun close ()V public fun close ()V
public fun content (Ljava/lang/String;)Ljava/util/Map; public fun content (Ljava/lang/String;)Ljava/util/Map;
@ -44,211 +44,245 @@ public class hep/dataforge/context/Context : hep/dataforge/meta/MetaRepr, hep/da
public fun getCoroutineContext ()Lkotlin/coroutines/CoroutineContext; public fun getCoroutineContext ()Lkotlin/coroutines/CoroutineContext;
public fun getDefaultChainTarget ()Ljava/lang/String; public fun getDefaultChainTarget ()Ljava/lang/String;
public fun getDefaultTarget ()Ljava/lang/String; public fun getDefaultTarget ()Ljava/lang/String;
public final fun getName ()Lhep/dataforge/names/Name; public final fun getName ()Lspace/kscience/dataforge/names/Name;
public final fun getParent ()Lhep/dataforge/context/Context; public final fun getParent ()Lspace/kscience/dataforge/context/Context;
public final fun getPlugins ()Lhep/dataforge/context/PluginManager; public final fun getPlugins ()Lspace/kscience/dataforge/context/PluginManager;
public fun toMeta ()Lhep/dataforge/meta/Meta; public fun toMeta ()Lspace/kscience/dataforge/meta/Meta;
} }
public final class hep/dataforge/context/Context$Companion { public final class space/kscience/dataforge/context/Context$Companion {
} }
public abstract interface class hep/dataforge/context/ContextAware { public abstract interface class space/kscience/dataforge/context/ContextAware {
public abstract fun getContext ()Lhep/dataforge/context/Context; public abstract fun getContext ()Lspace/kscience/dataforge/context/Context;
} }
public final class hep/dataforge/context/ContextBuilder { public final class space/kscience/dataforge/context/ContextBuilder {
public fun <init> ()V public fun <init> ()V
public fun <init> (Lhep/dataforge/context/Context;Ljava/lang/String;)V public fun <init> (Lspace/kscience/dataforge/context/Context;Ljava/lang/String;)V
public synthetic fun <init> (Lhep/dataforge/context/Context;Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V public synthetic fun <init> (Lspace/kscience/dataforge/context/Context;Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
public final fun build ()Lhep/dataforge/context/Context; public final fun build ()Lspace/kscience/dataforge/context/Context;
public final fun getName ()Ljava/lang/String; public final fun getName ()Ljava/lang/String;
public final fun plugin (Lhep/dataforge/context/PluginFactory;Lkotlin/jvm/functions/Function1;)V
public final fun plugin (Lhep/dataforge/context/PluginTag;Lkotlin/jvm/functions/Function1;)V
public final fun plugin (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lkotlin/jvm/functions/Function1;)V public final fun plugin (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lkotlin/jvm/functions/Function1;)V
public static synthetic fun plugin$default (Lhep/dataforge/context/ContextBuilder;Lhep/dataforge/context/PluginFactory;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)V public final fun plugin (Lspace/kscience/dataforge/context/PluginFactory;Lkotlin/jvm/functions/Function1;)V
public static synthetic fun plugin$default (Lhep/dataforge/context/ContextBuilder;Lhep/dataforge/context/PluginTag;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)V public final fun plugin (Lspace/kscience/dataforge/context/PluginTag;Lkotlin/jvm/functions/Function1;)V
public static synthetic fun plugin$default (Lhep/dataforge/context/ContextBuilder;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)V public static synthetic fun plugin$default (Lspace/kscience/dataforge/context/ContextBuilder;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)V
public static synthetic fun plugin$default (Lspace/kscience/dataforge/context/ContextBuilder;Lspace/kscience/dataforge/context/PluginFactory;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)V
public static synthetic fun plugin$default (Lspace/kscience/dataforge/context/ContextBuilder;Lspace/kscience/dataforge/context/PluginTag;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)V
public final fun properties (Lkotlin/jvm/functions/Function1;)V public final fun properties (Lkotlin/jvm/functions/Function1;)V
public final fun setName (Ljava/lang/String;)V public final fun setName (Ljava/lang/String;)V
} }
public final class hep/dataforge/context/ContextKt { public final class space/kscience/dataforge/context/ContextKt {
public static final fun Context (Ljava/lang/String;Lhep/dataforge/context/Context;Lkotlin/jvm/functions/Function1;)Lhep/dataforge/context/Context; public static final fun Context (Ljava/lang/String;Lspace/kscience/dataforge/context/Context;Lkotlin/jvm/functions/Function1;)Lspace/kscience/dataforge/context/Context;
public static synthetic fun Context$default (Ljava/lang/String;Lhep/dataforge/context/Context;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Lhep/dataforge/context/Context; public static synthetic fun Context$default (Ljava/lang/String;Lspace/kscience/dataforge/context/Context;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Lspace/kscience/dataforge/context/Context;
} }
public abstract interface class hep/dataforge/context/Factory { public abstract interface class space/kscience/dataforge/context/Factory {
public abstract fun invoke (Lhep/dataforge/meta/Meta;Lhep/dataforge/context/Context;)Ljava/lang/Object; public abstract fun invoke (Lspace/kscience/dataforge/meta/Meta;Lspace/kscience/dataforge/context/Context;)Ljava/lang/Object;
} }
public final class hep/dataforge/context/Factory$DefaultImpls { public final class space/kscience/dataforge/context/Factory$DefaultImpls {
public static synthetic fun invoke$default (Lhep/dataforge/context/Factory;Lhep/dataforge/meta/Meta;Lhep/dataforge/context/Context;ILjava/lang/Object;)Ljava/lang/Object; public static synthetic fun invoke$default (Lspace/kscience/dataforge/context/Factory;Lspace/kscience/dataforge/meta/Meta;Lspace/kscience/dataforge/context/Context;ILjava/lang/Object;)Ljava/lang/Object;
} }
public final class hep/dataforge/context/Global : hep/dataforge/context/Context { public final class space/kscience/dataforge/context/Global : space/kscience/dataforge/context/Context {
public static final field INSTANCE Lhep/dataforge/context/Global; public static final field INSTANCE Lspace/kscience/dataforge/context/Global;
public fun close ()V public fun close ()V
public final fun context (Ljava/lang/String;Lhep/dataforge/context/Context;Lkotlin/jvm/functions/Function1;)Lhep/dataforge/context/Context; public final fun context (Ljava/lang/String;Lspace/kscience/dataforge/context/Context;Lkotlin/jvm/functions/Function1;)Lspace/kscience/dataforge/context/Context;
public static synthetic fun context$default (Lhep/dataforge/context/Global;Ljava/lang/String;Lhep/dataforge/context/Context;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Lhep/dataforge/context/Context; public static synthetic fun context$default (Lspace/kscience/dataforge/context/Global;Ljava/lang/String;Lspace/kscience/dataforge/context/Context;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Lspace/kscience/dataforge/context/Context;
public final fun getContext (Ljava/lang/String;)Lhep/dataforge/context/Context; public final fun getContext (Ljava/lang/String;)Lspace/kscience/dataforge/context/Context;
public fun getCoroutineContext ()Lkotlin/coroutines/CoroutineContext; public fun getCoroutineContext ()Lkotlin/coroutines/CoroutineContext;
public final fun getLogger ()Lspace/kscience/dataforge/context/LogManager;
} }
public final class hep/dataforge/context/LoggingKt { public abstract interface class space/kscience/dataforge/context/LogManager : space/kscience/dataforge/context/Logable, space/kscience/dataforge/context/Plugin {
public static final fun getLogger (Lhep/dataforge/context/Context;)Lmu/KLogger; public static final field Companion Lspace/kscience/dataforge/context/LogManager$Companion;
public static final fun getLogger (Lhep/dataforge/context/ContextAware;)Lmu/KLogger; public static final field DEBUG Ljava/lang/String;
public static final field ERROR Ljava/lang/String;
public static final field INFO Ljava/lang/String;
public static final field TRACE Ljava/lang/String;
public static final field WARNING Ljava/lang/String;
} }
public abstract interface class hep/dataforge/context/Plugin : hep/dataforge/context/ContextAware, hep/dataforge/meta/MetaRepr, hep/dataforge/misc/Named, hep/dataforge/provider/Provider { public final class space/kscience/dataforge/context/LogManager$Companion {
public static final field Companion Lhep/dataforge/context/Plugin$Companion; public static final field DEBUG Ljava/lang/String;
public static final field ERROR Ljava/lang/String;
public static final field INFO Ljava/lang/String;
public static final field TRACE Ljava/lang/String;
public static final field WARNING Ljava/lang/String;
}
public final class space/kscience/dataforge/context/LogManager$DefaultImpls {
public static fun content (Lspace/kscience/dataforge/context/LogManager;Ljava/lang/String;)Ljava/util/Map;
public static fun getDefaultChainTarget (Lspace/kscience/dataforge/context/LogManager;)Ljava/lang/String;
public static fun getDefaultTarget (Lspace/kscience/dataforge/context/LogManager;)Ljava/lang/String;
public static fun getName (Lspace/kscience/dataforge/context/LogManager;)Lspace/kscience/dataforge/names/Name;
public static fun toMeta (Lspace/kscience/dataforge/context/LogManager;)Lspace/kscience/dataforge/meta/Meta;
}
public final class space/kscience/dataforge/context/LogManagerKt {
public static final fun debug (Lspace/kscience/dataforge/context/Logable;Lspace/kscience/dataforge/names/Name;Lkotlin/jvm/functions/Function0;)V
public static synthetic fun debug$default (Lspace/kscience/dataforge/context/Logable;Lspace/kscience/dataforge/names/Name;Lkotlin/jvm/functions/Function0;ILjava/lang/Object;)V
public static final fun error (Lspace/kscience/dataforge/context/Logable;Ljava/lang/Throwable;Lspace/kscience/dataforge/names/Name;Lkotlin/jvm/functions/Function0;)V
public static final fun error (Lspace/kscience/dataforge/context/Logable;Lspace/kscience/dataforge/names/Name;Lkotlin/jvm/functions/Function0;)V
public static synthetic fun error$default (Lspace/kscience/dataforge/context/Logable;Ljava/lang/Throwable;Lspace/kscience/dataforge/names/Name;Lkotlin/jvm/functions/Function0;ILjava/lang/Object;)V
public static synthetic fun error$default (Lspace/kscience/dataforge/context/Logable;Lspace/kscience/dataforge/names/Name;Lkotlin/jvm/functions/Function0;ILjava/lang/Object;)V
public static final fun getLogger (Lspace/kscience/dataforge/context/Context;)Lspace/kscience/dataforge/context/LogManager;
public static final fun getLogger (Lspace/kscience/dataforge/context/ContextAware;)Lspace/kscience/dataforge/context/Logable;
public static final fun info (Lspace/kscience/dataforge/context/Logable;Lspace/kscience/dataforge/names/Name;Lkotlin/jvm/functions/Function0;)V
public static synthetic fun info$default (Lspace/kscience/dataforge/context/Logable;Lspace/kscience/dataforge/names/Name;Lkotlin/jvm/functions/Function0;ILjava/lang/Object;)V
public static final fun trace (Lspace/kscience/dataforge/context/Logable;Lspace/kscience/dataforge/names/Name;Lkotlin/jvm/functions/Function0;)V
public static synthetic fun trace$default (Lspace/kscience/dataforge/context/Logable;Lspace/kscience/dataforge/names/Name;Lkotlin/jvm/functions/Function0;ILjava/lang/Object;)V
public static final fun warn (Lspace/kscience/dataforge/context/Logable;Lspace/kscience/dataforge/names/Name;Lkotlin/jvm/functions/Function0;)V
public static synthetic fun warn$default (Lspace/kscience/dataforge/context/Logable;Lspace/kscience/dataforge/names/Name;Lkotlin/jvm/functions/Function0;ILjava/lang/Object;)V
}
public abstract interface class space/kscience/dataforge/context/Logable {
public abstract fun log (Lspace/kscience/dataforge/names/Name;Ljava/lang/String;Lkotlin/jvm/functions/Function0;)V
}
public abstract interface class space/kscience/dataforge/context/Plugin : space/kscience/dataforge/context/ContextAware, space/kscience/dataforge/meta/MetaRepr, space/kscience/dataforge/misc/Named, space/kscience/dataforge/provider/Provider {
public static final field Companion Lspace/kscience/dataforge/context/Plugin$Companion;
public static final field TARGET Ljava/lang/String; public static final field TARGET Ljava/lang/String;
public abstract fun attach (Lhep/dataforge/context/Context;)V public abstract fun attach (Lspace/kscience/dataforge/context/Context;)V
public abstract fun dependsOn ()Ljava/util/Map; public abstract fun dependsOn ()Ljava/util/Map;
public abstract fun detach ()V public abstract fun detach ()V
public abstract fun getMeta ()Lhep/dataforge/meta/Meta; public abstract fun getMeta ()Lspace/kscience/dataforge/meta/Meta;
public abstract fun getName ()Lhep/dataforge/names/Name; public abstract fun getName ()Lspace/kscience/dataforge/names/Name;
public abstract fun getTag ()Lhep/dataforge/context/PluginTag; public abstract fun getTag ()Lspace/kscience/dataforge/context/PluginTag;
public abstract fun toMeta ()Lhep/dataforge/meta/Meta; public abstract fun toMeta ()Lspace/kscience/dataforge/meta/Meta;
} }
public final class hep/dataforge/context/Plugin$Companion { public final class space/kscience/dataforge/context/Plugin$Companion {
public static final field TARGET Ljava/lang/String; public static final field TARGET Ljava/lang/String;
} }
public final class hep/dataforge/context/Plugin$DefaultImpls { public final class space/kscience/dataforge/context/Plugin$DefaultImpls {
public static fun content (Lhep/dataforge/context/Plugin;Ljava/lang/String;)Ljava/util/Map; public static fun content (Lspace/kscience/dataforge/context/Plugin;Ljava/lang/String;)Ljava/util/Map;
public static fun getDefaultChainTarget (Lhep/dataforge/context/Plugin;)Ljava/lang/String; public static fun getDefaultChainTarget (Lspace/kscience/dataforge/context/Plugin;)Ljava/lang/String;
public static fun getDefaultTarget (Lhep/dataforge/context/Plugin;)Ljava/lang/String; public static fun getDefaultTarget (Lspace/kscience/dataforge/context/Plugin;)Ljava/lang/String;
public static fun getName (Lhep/dataforge/context/Plugin;)Lhep/dataforge/names/Name; public static fun getName (Lspace/kscience/dataforge/context/Plugin;)Lspace/kscience/dataforge/names/Name;
public static fun toMeta (Lhep/dataforge/context/Plugin;)Lhep/dataforge/meta/Meta; public static fun toMeta (Lspace/kscience/dataforge/context/Plugin;)Lspace/kscience/dataforge/meta/Meta;
} }
public abstract interface class hep/dataforge/context/PluginFactory : hep/dataforge/context/Factory { public abstract interface class space/kscience/dataforge/context/PluginFactory : space/kscience/dataforge/context/Factory {
public static final field Companion Lhep/dataforge/context/PluginFactory$Companion; public static final field Companion Lspace/kscience/dataforge/context/PluginFactory$Companion;
public static final field TYPE Ljava/lang/String; public static final field TYPE Ljava/lang/String;
public abstract fun getTag ()Lhep/dataforge/context/PluginTag; public abstract fun getTag ()Lspace/kscience/dataforge/context/PluginTag;
public abstract fun getType ()Lkotlin/reflect/KClass; public abstract fun getType ()Lkotlin/reflect/KClass;
} }
public final class hep/dataforge/context/PluginFactory$Companion { public final class space/kscience/dataforge/context/PluginFactory$Companion {
public static final field TYPE Ljava/lang/String; public static final field TYPE Ljava/lang/String;
} }
public final class hep/dataforge/context/PluginManager : hep/dataforge/context/ContextAware, java/lang/Iterable, kotlin/jvm/internal/markers/KMappedMarker { public final class space/kscience/dataforge/context/PluginManager : java/lang/Iterable, kotlin/jvm/internal/markers/KMappedMarker, space/kscience/dataforge/context/ContextAware {
public fun <init> (Lhep/dataforge/context/Context;)V public fun <init> (Lspace/kscience/dataforge/context/Context;)V
public final fun fetch (Lhep/dataforge/context/PluginFactory;Lhep/dataforge/meta/Meta;Z)Lhep/dataforge/context/Plugin; public final fun fetch (Lspace/kscience/dataforge/context/PluginFactory;Lspace/kscience/dataforge/meta/Meta;Z)Lspace/kscience/dataforge/context/Plugin;
public final fun fetch (Lhep/dataforge/context/PluginFactory;ZLkotlin/jvm/functions/Function1;)Lhep/dataforge/context/Plugin; public final fun fetch (Lspace/kscience/dataforge/context/PluginFactory;ZLkotlin/jvm/functions/Function1;)Lspace/kscience/dataforge/context/Plugin;
public static synthetic fun fetch$default (Lhep/dataforge/context/PluginManager;Lhep/dataforge/context/PluginFactory;Lhep/dataforge/meta/Meta;ZILjava/lang/Object;)Lhep/dataforge/context/Plugin; public static synthetic fun fetch$default (Lspace/kscience/dataforge/context/PluginManager;Lspace/kscience/dataforge/context/PluginFactory;Lspace/kscience/dataforge/meta/Meta;ZILjava/lang/Object;)Lspace/kscience/dataforge/context/Plugin;
public static synthetic fun fetch$default (Lhep/dataforge/context/PluginManager;Lhep/dataforge/context/PluginFactory;ZLkotlin/jvm/functions/Function1;ILjava/lang/Object;)Lhep/dataforge/context/Plugin; public static synthetic fun fetch$default (Lspace/kscience/dataforge/context/PluginManager;Lspace/kscience/dataforge/context/PluginFactory;ZLkotlin/jvm/functions/Function1;ILjava/lang/Object;)Lspace/kscience/dataforge/context/Plugin;
public final fun find (ZLkotlin/jvm/functions/Function1;)Lhep/dataforge/context/Plugin; public final fun find (ZLkotlin/jvm/functions/Function1;)Lspace/kscience/dataforge/context/Plugin;
public static synthetic fun find$default (Lhep/dataforge/context/PluginManager;ZLkotlin/jvm/functions/Function1;ILjava/lang/Object;)Lhep/dataforge/context/Plugin; public static synthetic fun find$default (Lspace/kscience/dataforge/context/PluginManager;ZLkotlin/jvm/functions/Function1;ILjava/lang/Object;)Lspace/kscience/dataforge/context/Plugin;
public final fun get (Lhep/dataforge/context/PluginTag;Z)Lhep/dataforge/context/Plugin; public final fun get (Lkotlin/reflect/KClass;Lspace/kscience/dataforge/context/PluginTag;Z)Ljava/lang/Object;
public final fun get (Lkotlin/reflect/KClass;Lhep/dataforge/context/PluginTag;Z)Ljava/lang/Object; public final fun get (Lspace/kscience/dataforge/context/PluginTag;Z)Lspace/kscience/dataforge/context/Plugin;
public static synthetic fun get$default (Lhep/dataforge/context/PluginManager;Lhep/dataforge/context/PluginTag;ZILjava/lang/Object;)Lhep/dataforge/context/Plugin; public static synthetic fun get$default (Lspace/kscience/dataforge/context/PluginManager;Lkotlin/reflect/KClass;Lspace/kscience/dataforge/context/PluginTag;ZILjava/lang/Object;)Ljava/lang/Object;
public static synthetic fun get$default (Lhep/dataforge/context/PluginManager;Lkotlin/reflect/KClass;Lhep/dataforge/context/PluginTag;ZILjava/lang/Object;)Ljava/lang/Object; public static synthetic fun get$default (Lspace/kscience/dataforge/context/PluginManager;Lspace/kscience/dataforge/context/PluginTag;ZILjava/lang/Object;)Lspace/kscience/dataforge/context/Plugin;
public fun getContext ()Lhep/dataforge/context/Context; public fun getContext ()Lspace/kscience/dataforge/context/Context;
public fun iterator ()Ljava/util/Iterator; public fun iterator ()Ljava/util/Iterator;
public final fun list (Z)Ljava/util/Collection; public final fun list (Z)Ljava/util/Collection;
public final fun load (Lhep/dataforge/context/Plugin;)Lhep/dataforge/context/Plugin; public final fun load (Lspace/kscience/dataforge/context/Plugin;)Lspace/kscience/dataforge/context/Plugin;
public final fun load (Lhep/dataforge/context/PluginFactory;Lhep/dataforge/meta/Meta;)Lhep/dataforge/context/Plugin; public final fun load (Lspace/kscience/dataforge/context/PluginFactory;Lkotlin/jvm/functions/Function1;)Lspace/kscience/dataforge/context/Plugin;
public final fun load (Lhep/dataforge/context/PluginFactory;Lkotlin/jvm/functions/Function1;)Lhep/dataforge/context/Plugin; public final fun load (Lspace/kscience/dataforge/context/PluginFactory;Lspace/kscience/dataforge/meta/Meta;)Lspace/kscience/dataforge/context/Plugin;
public static synthetic fun load$default (Lhep/dataforge/context/PluginManager;Lhep/dataforge/context/PluginFactory;Lhep/dataforge/meta/Meta;ILjava/lang/Object;)Lhep/dataforge/context/Plugin; public static synthetic fun load$default (Lspace/kscience/dataforge/context/PluginManager;Lspace/kscience/dataforge/context/PluginFactory;Lspace/kscience/dataforge/meta/Meta;ILjava/lang/Object;)Lspace/kscience/dataforge/context/Plugin;
public final fun remove (Lhep/dataforge/context/Plugin;)V public final fun remove (Lspace/kscience/dataforge/context/Plugin;)V
} }
public final class hep/dataforge/context/PluginTag : hep/dataforge/meta/MetaRepr { public final class space/kscience/dataforge/context/PluginTag : space/kscience/dataforge/meta/MetaRepr {
public static final field Companion Lhep/dataforge/context/PluginTag$Companion; public static final field Companion Lspace/kscience/dataforge/context/PluginTag$Companion;
public static final field DATAFORGE_GROUP Ljava/lang/String; public static final field DATAFORGE_GROUP Ljava/lang/String;
public fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V public fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
public synthetic fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V public synthetic fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
public final fun component1 ()Ljava/lang/String; public final fun component1 ()Ljava/lang/String;
public final fun component2 ()Ljava/lang/String; public final fun component2 ()Ljava/lang/String;
public final fun component3 ()Ljava/lang/String; public final fun component3 ()Ljava/lang/String;
public final fun copy (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Lhep/dataforge/context/PluginTag; public final fun copy (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Lspace/kscience/dataforge/context/PluginTag;
public static synthetic fun copy$default (Lhep/dataforge/context/PluginTag;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILjava/lang/Object;)Lhep/dataforge/context/PluginTag; public static synthetic fun copy$default (Lspace/kscience/dataforge/context/PluginTag;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILjava/lang/Object;)Lspace/kscience/dataforge/context/PluginTag;
public fun equals (Ljava/lang/Object;)Z public fun equals (Ljava/lang/Object;)Z
public final fun getGroup ()Ljava/lang/String; public final fun getGroup ()Ljava/lang/String;
public final fun getName ()Ljava/lang/String; public final fun getName ()Ljava/lang/String;
public final fun getVersion ()Ljava/lang/String; public final fun getVersion ()Ljava/lang/String;
public fun hashCode ()I public fun hashCode ()I
public final fun matches (Lhep/dataforge/context/PluginTag;)Z public final fun matches (Lspace/kscience/dataforge/context/PluginTag;)Z
public fun toMeta ()Lhep/dataforge/meta/Meta; public fun toMeta ()Lspace/kscience/dataforge/meta/Meta;
public fun toString ()Ljava/lang/String; public fun toString ()Ljava/lang/String;
} }
public final class hep/dataforge/context/PluginTag$Companion { public final class space/kscience/dataforge/context/PluginTag$Companion {
public final fun fromString (Ljava/lang/String;)Lhep/dataforge/context/PluginTag; public final fun fromString (Ljava/lang/String;)Lspace/kscience/dataforge/context/PluginTag;
} }
public final class hep/dataforge/context/ResolveKt { public final class space/kscience/dataforge/context/ResolveKt {
public static final fun gather (Lhep/dataforge/context/Context;Ljava/lang/String;Lkotlin/reflect/KClass;Z)Ljava/util/Map; public static final fun gather (Lspace/kscience/dataforge/context/Context;Ljava/lang/String;Lkotlin/reflect/KClass;Z)Ljava/util/Map;
public static synthetic fun gather$default (Lhep/dataforge/context/Context;Ljava/lang/String;Lkotlin/reflect/KClass;ZILjava/lang/Object;)Ljava/util/Map; public static synthetic fun gather$default (Lspace/kscience/dataforge/context/Context;Ljava/lang/String;Lkotlin/reflect/KClass;ZILjava/lang/Object;)Ljava/util/Map;
public static final fun gatherInSequence (Lhep/dataforge/context/Context;Ljava/lang/String;Lkotlin/reflect/KClass;Z)Lkotlin/sequences/Sequence; public static synthetic fun gatherInSequence$default (Lspace/kscience/dataforge/context/Context;Ljava/lang/String;Lkotlin/reflect/KClass;ZILjava/lang/Object;)Lkotlin/sequences/Sequence;
public static synthetic fun gatherInSequence$default (Lhep/dataforge/context/Context;Ljava/lang/String;Lkotlin/reflect/KClass;ZILjava/lang/Object;)Lkotlin/sequences/Sequence;
public static final fun getValues (Lkotlin/sequences/Sequence;)Lkotlin/sequences/Sequence; public static final fun getValues (Lkotlin/sequences/Sequence;)Lkotlin/sequences/Sequence;
public static final fun resolve (Lhep/dataforge/context/Context;Ljava/lang/String;Lhep/dataforge/names/Name;Lkotlin/reflect/KClass;)Ljava/lang/Object; public static final fun resolve (Lspace/kscience/dataforge/context/Context;Ljava/lang/String;Lspace/kscience/dataforge/names/Name;Lkotlin/reflect/KClass;)Ljava/lang/Object;
} }
public abstract interface annotation class hep/dataforge/descriptors/Attribute : java/lang/annotation/Annotation { public final class space/kscience/dataforge/context/SlfLogManager : space/kscience/dataforge/context/AbstractPlugin, space/kscience/dataforge/context/LogManager {
public static final field Companion Lspace/kscience/dataforge/context/SlfLogManager$Companion;
public fun <init> ()V
public fun getTag ()Lspace/kscience/dataforge/context/PluginTag;
public fun log (Lspace/kscience/dataforge/names/Name;Ljava/lang/String;Lkotlin/jvm/functions/Function0;)V
}
public final class space/kscience/dataforge/context/SlfLogManager$Companion : space/kscience/dataforge/context/PluginFactory {
public fun getTag ()Lspace/kscience/dataforge/context/PluginTag;
public fun getType ()Lkotlin/reflect/KClass;
public synthetic fun invoke (Lspace/kscience/dataforge/meta/Meta;Lspace/kscience/dataforge/context/Context;)Ljava/lang/Object;
public fun invoke (Lspace/kscience/dataforge/meta/Meta;Lspace/kscience/dataforge/context/Context;)Lspace/kscience/dataforge/context/SlfLogManager;
}
public abstract interface annotation class space/kscience/dataforge/descriptors/Attribute : java/lang/annotation/Annotation {
public abstract fun key ()Ljava/lang/String; public abstract fun key ()Ljava/lang/String;
public abstract fun value ()Ljava/lang/String; public abstract fun value ()Ljava/lang/String;
} }
public abstract interface annotation class hep/dataforge/descriptors/Attributes : java/lang/annotation/Annotation { public abstract interface annotation class space/kscience/dataforge/descriptors/Attributes : java/lang/annotation/Annotation {
public abstract fun attrs ()[Lhep/dataforge/descriptors/Attribute; public abstract fun attrs ()[Lspace/kscience/dataforge/descriptors/Attribute;
} }
public abstract interface annotation class hep/dataforge/descriptors/ItemDef : java/lang/annotation/Annotation { public abstract interface annotation class space/kscience/dataforge/descriptors/ItemDef : java/lang/annotation/Annotation {
public abstract fun info ()Ljava/lang/String; public abstract fun info ()Ljava/lang/String;
public abstract fun multiple ()Z public abstract fun multiple ()Z
public abstract fun required ()Z public abstract fun required ()Z
} }
public abstract interface annotation class hep/dataforge/descriptors/ValueDef : java/lang/annotation/Annotation { public abstract interface annotation class space/kscience/dataforge/descriptors/ValueDef : java/lang/annotation/Annotation {
public abstract fun allowed ()[Ljava/lang/String; public abstract fun allowed ()[Ljava/lang/String;
public abstract fun def ()Ljava/lang/String; public abstract fun def ()Ljava/lang/String;
public abstract fun enumeration ()Ljava/lang/Class; public abstract fun enumeration ()Ljava/lang/Class;
public abstract fun type ()[Lhep/dataforge/values/ValueType; public abstract fun type ()[Lspace/kscience/dataforge/values/ValueType;
} }
public final class hep/dataforge/properties/ConfigProperty : hep/dataforge/properties/Property { public final class space/kscience/dataforge/properties/Property$DefaultImpls {
public fun <init> (Lhep/dataforge/meta/Config;Lhep/dataforge/names/Name;Lhep/dataforge/meta/transformations/MetaConverter;)V public static synthetic fun onChange$default (Lspace/kscience/dataforge/properties/Property;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)V
public final fun getConfig ()Lhep/dataforge/meta/Config; public static synthetic fun removeChangeListener$default (Lspace/kscience/dataforge/properties/Property;Ljava/lang/Object;ILjava/lang/Object;)V
public final fun getConverter ()Lhep/dataforge/meta/transformations/MetaConverter;
public final fun getName ()Lhep/dataforge/names/Name;
public fun getValue ()Ljava/lang/Object;
public fun onChange (Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)V
public fun removeChangeListener (Ljava/lang/Object;)V
public fun setValue (Ljava/lang/Object;)V
} }
public abstract interface class hep/dataforge/properties/Property { public final class space/kscience/dataforge/properties/PropertyKt {
public abstract fun getValue ()Ljava/lang/Object;
public abstract fun onChange (Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)V
public abstract fun removeChangeListener (Ljava/lang/Object;)V
public abstract fun setValue (Ljava/lang/Object;)V
} }
public final class hep/dataforge/properties/Property$DefaultImpls { public final class space/kscience/dataforge/provider/DfTypeKt {
public static synthetic fun onChange$default (Lhep/dataforge/properties/Property;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)V
public static synthetic fun removeChangeListener$default (Lhep/dataforge/properties/Property;Ljava/lang/Object;ILjava/lang/Object;)V
}
public final class hep/dataforge/properties/PropertyKt {
public static final fun bind (Lhep/dataforge/properties/Property;Lhep/dataforge/properties/Property;)V
public static final fun mirror (Lhep/dataforge/properties/Property;Lhep/dataforge/properties/Property;Lkotlinx/coroutines/CoroutineScope;)V
public static final fun toFlow (Lhep/dataforge/properties/Property;)Lkotlinx/coroutines/flow/StateFlow;
}
public final class hep/dataforge/provider/DfTypeKt {
public static final fun getDfType (Lkotlin/reflect/KClass;)Ljava/lang/String; public static final fun getDfType (Lkotlin/reflect/KClass;)Ljava/lang/String;
} }
public final class hep/dataforge/provider/Path : java/lang/Iterable, kotlin/jvm/internal/markers/KMappedMarker { public final class space/kscience/dataforge/provider/Path : java/lang/Iterable, kotlin/jvm/internal/markers/KMappedMarker {
public static final field Companion Lhep/dataforge/provider/Path$Companion; public static final field Companion Lspace/kscience/dataforge/provider/Path$Companion;
public static final field PATH_SEGMENT_SEPARATOR Ljava/lang/String; public static final field PATH_SEGMENT_SEPARATOR Ljava/lang/String;
public static final synthetic fun box-impl (Ljava/util/List;)Lhep/dataforge/provider/Path; public static final synthetic fun box-impl (Ljava/util/List;)Lspace/kscience/dataforge/provider/Path;
public static fun constructor-impl (Ljava/util/List;)Ljava/util/List; public static fun constructor-impl (Ljava/util/List;)Ljava/util/List;
public fun equals (Ljava/lang/Object;)Z public fun equals (Ljava/lang/Object;)Z
public static fun equals-impl (Ljava/util/List;Ljava/lang/Object;)Z public static fun equals-impl (Ljava/util/List;Ljava/lang/Object;)Z
@ -263,57 +297,57 @@ public final class hep/dataforge/provider/Path : java/lang/Iterable, kotlin/jvm/
public final synthetic fun unbox-impl ()Ljava/util/List; public final synthetic fun unbox-impl ()Ljava/util/List;
} }
public final class hep/dataforge/provider/Path$Companion { public final class space/kscience/dataforge/provider/Path$Companion {
public final fun parse-AnEnhig (Ljava/lang/String;)Ljava/util/List; public final fun parse-X5wN5Vs (Ljava/lang/String;)Ljava/util/List;
} }
public final class hep/dataforge/provider/PathKt { public final class space/kscience/dataforge/provider/PathKt {
public static final fun Path ([Lhep/dataforge/names/Name;)Ljava/util/List;
public static final fun Path ([Lkotlin/Pair;)Ljava/util/List; public static final fun Path ([Lkotlin/Pair;)Ljava/util/List;
public static final fun asPath (Lhep/dataforge/names/Name;Ljava/lang/String;)Ljava/util/List; public static final fun Path ([Lspace/kscience/dataforge/names/Name;)Ljava/util/List;
public static final fun asPath (Lhep/dataforge/provider/PathToken;)Ljava/util/List; public static final fun asPath (Lspace/kscience/dataforge/names/Name;Ljava/lang/String;)Ljava/util/List;
public static synthetic fun asPath$default (Lhep/dataforge/names/Name;Ljava/lang/String;ILjava/lang/Object;)Ljava/util/List; public static final fun asPath (Lspace/kscience/dataforge/provider/PathToken;)Ljava/util/List;
public static final fun getHead-Ipm_iiw (Ljava/util/List;)Lhep/dataforge/provider/PathToken; public static synthetic fun asPath$default (Lspace/kscience/dataforge/names/Name;Ljava/lang/String;ILjava/lang/Object;)Ljava/util/List;
public static final fun getLength-Ipm_iiw (Ljava/util/List;)I public static final fun getHead-LGjlSZY (Ljava/util/List;)Lspace/kscience/dataforge/provider/PathToken;
public static final fun getTail-Ipm_iiw (Ljava/util/List;)Ljava/util/List; public static final fun getLength-LGjlSZY (Ljava/util/List;)I
public static final fun plus-BlTXZnM (Ljava/util/List;Ljava/util/List;)Ljava/util/List; public static final fun getTail-LGjlSZY (Ljava/util/List;)Ljava/util/List;
public static final fun plus-sn2Gq0g (Ljava/util/List;Ljava/util/List;)Ljava/util/List;
} }
public final class hep/dataforge/provider/PathToken { public final class space/kscience/dataforge/provider/PathToken {
public static final field Companion Lhep/dataforge/provider/PathToken$Companion; public static final field Companion Lspace/kscience/dataforge/provider/PathToken$Companion;
public static final field TARGET_SEPARATOR Ljava/lang/String; public static final field TARGET_SEPARATOR Ljava/lang/String;
public fun <init> (Lhep/dataforge/names/Name;Ljava/lang/String;)V public fun <init> (Lspace/kscience/dataforge/names/Name;Ljava/lang/String;)V
public synthetic fun <init> (Lhep/dataforge/names/Name;Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V public synthetic fun <init> (Lspace/kscience/dataforge/names/Name;Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
public final fun component1 ()Lhep/dataforge/names/Name; public final fun component1 ()Lspace/kscience/dataforge/names/Name;
public final fun component2 ()Ljava/lang/String; public final fun component2 ()Ljava/lang/String;
public final fun copy (Lhep/dataforge/names/Name;Ljava/lang/String;)Lhep/dataforge/provider/PathToken; public final fun copy (Lspace/kscience/dataforge/names/Name;Ljava/lang/String;)Lspace/kscience/dataforge/provider/PathToken;
public static synthetic fun copy$default (Lhep/dataforge/provider/PathToken;Lhep/dataforge/names/Name;Ljava/lang/String;ILjava/lang/Object;)Lhep/dataforge/provider/PathToken; public static synthetic fun copy$default (Lspace/kscience/dataforge/provider/PathToken;Lspace/kscience/dataforge/names/Name;Ljava/lang/String;ILjava/lang/Object;)Lspace/kscience/dataforge/provider/PathToken;
public fun equals (Ljava/lang/Object;)Z public fun equals (Ljava/lang/Object;)Z
public final fun getName ()Lhep/dataforge/names/Name; public final fun getName ()Lspace/kscience/dataforge/names/Name;
public final fun getTarget ()Ljava/lang/String; public final fun getTarget ()Ljava/lang/String;
public fun hashCode ()I public fun hashCode ()I
public fun toString ()Ljava/lang/String; public fun toString ()Ljava/lang/String;
} }
public final class hep/dataforge/provider/PathToken$Companion { public final class space/kscience/dataforge/provider/PathToken$Companion {
public final fun parse (Ljava/lang/String;)Lhep/dataforge/provider/PathToken; public final fun parse (Ljava/lang/String;)Lspace/kscience/dataforge/provider/PathToken;
} }
public abstract interface class hep/dataforge/provider/Provider { public abstract interface class space/kscience/dataforge/provider/Provider {
public abstract fun content (Ljava/lang/String;)Ljava/util/Map; public abstract fun content (Ljava/lang/String;)Ljava/util/Map;
public abstract fun getDefaultChainTarget ()Ljava/lang/String; public abstract fun getDefaultChainTarget ()Ljava/lang/String;
public abstract fun getDefaultTarget ()Ljava/lang/String; public abstract fun getDefaultTarget ()Ljava/lang/String;
} }
public final class hep/dataforge/provider/Provider$DefaultImpls { public final class space/kscience/dataforge/provider/Provider$DefaultImpls {
public static fun content (Lhep/dataforge/provider/Provider;Ljava/lang/String;)Ljava/util/Map; public static fun content (Lspace/kscience/dataforge/provider/Provider;Ljava/lang/String;)Ljava/util/Map;
public static fun getDefaultChainTarget (Lhep/dataforge/provider/Provider;)Ljava/lang/String; public static fun getDefaultChainTarget (Lspace/kscience/dataforge/provider/Provider;)Ljava/lang/String;
public static fun getDefaultTarget (Lhep/dataforge/provider/Provider;)Ljava/lang/String; public static fun getDefaultTarget (Lspace/kscience/dataforge/provider/Provider;)Ljava/lang/String;
} }
public final class hep/dataforge/provider/ProviderKt { public final class space/kscience/dataforge/provider/ProviderKt {
public static final fun provide-mzxrFLw (Lhep/dataforge/provider/Provider;Ljava/util/List;Ljava/lang/String;)Ljava/lang/Object; public static final fun provide-CSkoCSg (Lspace/kscience/dataforge/provider/Provider;Ljava/util/List;Ljava/lang/String;)Ljava/lang/Object;
public static synthetic fun provide-mzxrFLw$default (Lhep/dataforge/provider/Provider;Ljava/util/List;Ljava/lang/String;ILjava/lang/Object;)Ljava/lang/Object; public static synthetic fun provide-CSkoCSg$default (Lspace/kscience/dataforge/provider/Provider;Ljava/util/List;Ljava/lang/String;ILjava/lang/Object;)Ljava/lang/Object;
public static final fun top (Lhep/dataforge/provider/Provider;Ljava/lang/String;Lkotlin/reflect/KClass;)Ljava/util/Map; public static final fun top (Lspace/kscience/dataforge/provider/Provider;Ljava/lang/String;Lkotlin/reflect/KClass;)Ljava/util/Map;
} }

View File

@ -1,6 +1,6 @@
plugins { plugins {
id("ru.mipt.npm.mpp") id("ru.mipt.npm.gradle.mpp")
id("ru.mipt.npm.native") id("ru.mipt.npm.gradle.native")
} }
description = "Context and provider definitions" description = "Context and provider definitions"
@ -11,20 +11,20 @@ kscience {
kotlin { kotlin {
sourceSets { sourceSets {
val commonMain by getting { val commonMain by getting{
dependencies { dependencies {
api(project(":dataforge-meta")) api(project(":dataforge-meta"))
api("io.github.microutils:kotlin-logging:1.9.0-dev-npm-2")
} }
} }
val jvmMain by getting { jvmMain {
dependencies { dependencies {
api(kotlin("reflect")) api(kotlin("reflect"))
api("ch.qos.logback:logback-classic:1.2.3") api("org.slf4j:slf4j-api:1.7.30")
} }
} }
val jsMain by getting { jsMain {
dependencies { dependencies {
} }
} }
} }

View File

@ -1,22 +0,0 @@
package hep.dataforge.context
import hep.dataforge.misc.Named
import hep.dataforge.provider.Path
import mu.KLogger
import mu.KotlinLogging
/**
* The logger specific to this context
*/
public val Context.logger: KLogger get() = KotlinLogging.logger(name.toString())
/**
* The logger
*/
public val ContextAware.logger: KLogger
get() = if (this is Named) {
KotlinLogging.logger(Path(context.name, this.name).toString())
} else {
context.logger
}

View File

@ -1,8 +1,8 @@
package hep.dataforge.context package space.kscience.dataforge.context
import hep.dataforge.meta.Meta import space.kscience.dataforge.meta.Meta
import hep.dataforge.misc.Named import space.kscience.dataforge.misc.Named
import hep.dataforge.names.Name import space.kscience.dataforge.names.Name
import kotlin.properties.ReadOnlyProperty import kotlin.properties.ReadOnlyProperty
import kotlin.reflect.KClass import kotlin.reflect.KClass
import kotlin.reflect.KProperty import kotlin.reflect.KProperty

View File

@ -1,15 +1,15 @@
package hep.dataforge.context package space.kscience.dataforge.context
import hep.dataforge.meta.Laminate
import hep.dataforge.meta.Meta
import hep.dataforge.meta.MetaRepr
import hep.dataforge.meta.itemSequence
import hep.dataforge.misc.Named
import hep.dataforge.names.Name
import hep.dataforge.provider.Provider
import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Job import kotlinx.coroutines.Job
import kotlinx.coroutines.SupervisorJob import kotlinx.coroutines.SupervisorJob
import space.kscience.dataforge.meta.Laminate
import space.kscience.dataforge.meta.Meta
import space.kscience.dataforge.meta.MetaRepr
import space.kscience.dataforge.meta.itemSequence
import space.kscience.dataforge.misc.Named
import space.kscience.dataforge.names.Name
import space.kscience.dataforge.provider.Provider
import kotlin.coroutines.CoroutineContext import kotlin.coroutines.CoroutineContext
/** /**

View File

@ -1,15 +1,13 @@
package hep.dataforge.context package space.kscience.dataforge.context
import hep.dataforge.meta.Meta import space.kscience.dataforge.meta.Meta
import hep.dataforge.meta.MetaBuilder import space.kscience.dataforge.meta.MetaBuilder
import hep.dataforge.meta.seal import space.kscience.dataforge.meta.seal
import hep.dataforge.misc.DFBuilder import space.kscience.dataforge.misc.DFBuilder
import hep.dataforge.misc.DFExperimental import space.kscience.dataforge.misc.DFExperimental
import hep.dataforge.names.toName import space.kscience.dataforge.names.toName
import kotlin.collections.HashMap
import kotlin.collections.component1 import kotlin.collections.component1
import kotlin.collections.component2 import kotlin.collections.component2
import kotlin.collections.forEach
import kotlin.collections.set import kotlin.collections.set
/** /**

View File

@ -1,6 +1,6 @@
package hep.dataforge.context package space.kscience.dataforge.context
import hep.dataforge.meta.Meta import space.kscience.dataforge.meta.Meta
public interface Factory<out T : Any> { public interface Factory<out T : Any> {
public operator fun invoke(meta: Meta = Meta.EMPTY, context: Context = Global): T public operator fun invoke(meta: Meta = Meta.EMPTY, context: Context = Global): T

View File

@ -1,12 +1,14 @@
package hep.dataforge.context package space.kscience.dataforge.context
import hep.dataforge.meta.Meta
import hep.dataforge.names.asName
import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.SupervisorJob import kotlinx.coroutines.SupervisorJob
import space.kscience.dataforge.meta.Meta
import space.kscience.dataforge.names.asName
import kotlin.coroutines.CoroutineContext import kotlin.coroutines.CoroutineContext
import kotlin.native.concurrent.ThreadLocal import kotlin.native.concurrent.ThreadLocal
internal expect val globalLoggerFactory: PluginFactory<out LogManager>
/** /**
* A global root context. Closing [Global] terminates the framework. * A global root context. Closing [Global] terminates the framework.
*/ */
@ -15,6 +17,11 @@ public object Global : Context("GLOBAL".asName(), null, Meta.EMPTY) {
override val coroutineContext: CoroutineContext = GlobalScope.coroutineContext + SupervisorJob() override val coroutineContext: CoroutineContext = GlobalScope.coroutineContext + SupervisorJob()
/**
* The default logging manager
*/
public val logger: LogManager by lazy { globalLoggerFactory.invoke(context = this).apply { attach(this@Global) } }
/** /**
* Closing all contexts * Closing all contexts
* *

View File

@ -0,0 +1,64 @@
package space.kscience.dataforge.context
import space.kscience.dataforge.misc.Named
import space.kscience.dataforge.names.Name
import space.kscience.dataforge.names.plus
public interface Logable {
public fun log(name: Name, tag: String, body: () -> String)
}
public interface LogManager : Plugin, Logable {
public companion object {
public const val TRACE: String = "TRACE"
public const val INFO: String = "INFO"
public const val DEBUG: String = "DEBUG"
public const val WARNING: String = "WARNING"
public const val ERROR: String = "ERROR"
}
}
public fun Logable.trace(name: Name = Name.EMPTY, body: () -> String): Unit = log(name, LogManager.TRACE, body)
public fun Logable.info(name: Name = Name.EMPTY, body: () -> String): Unit = log(name, LogManager.INFO, body)
public fun Logable.debug(name: Name = Name.EMPTY, body: () -> String): Unit = log(name, LogManager.DEBUG, body)
public fun Logable.warn(name: Name = Name.EMPTY, body: () -> String): Unit = log(name, LogManager.WARNING, body)
public fun Logable.error(name: Name = Name.EMPTY, body: () -> String): Unit = log(name, LogManager.ERROR, body)
internal val (() -> String).safe: String
get() = try {
invoke()
} catch (t: Throwable) {
"Error while evaluating log string: ${t.message}"
}
public fun Logable.error(throwable: Throwable?, name: Name = Name.EMPTY, body: () -> String): Unit =
log(name, LogManager.ERROR) {
buildString {
appendLine(body())
throwable?.let { appendLine(throwable.stackTraceToString()) }
}
}
/**
* Context log manager inherited from parent
*/
public val Context.logger: LogManager
get() = plugins.find(inherit = true) { it is LogManager } as? LogManager ?: Global.logger
/**
* The named proxy logger for a context member
*/
public val ContextAware.logger: Logable
get() = if (this is Named) {
object : Logable {
val contextLog = context.logger
override fun log(name: Name, tag: String, body: () -> String) {
contextLog.log(this@logger.name + name, tag, body)
}
}
} else {
context.logger
}

View File

@ -1,13 +1,13 @@
package hep.dataforge.context package space.kscience.dataforge.context
import hep.dataforge.context.Plugin.Companion.TARGET import space.kscience.dataforge.context.Plugin.Companion.TARGET
import hep.dataforge.meta.Meta import space.kscience.dataforge.meta.Meta
import hep.dataforge.meta.MetaRepr import space.kscience.dataforge.meta.MetaRepr
import hep.dataforge.misc.Named import space.kscience.dataforge.misc.Named
import hep.dataforge.misc.Type import space.kscience.dataforge.misc.Type
import hep.dataforge.names.Name import space.kscience.dataforge.names.Name
import hep.dataforge.names.toName import space.kscience.dataforge.names.toName
import hep.dataforge.provider.Provider import space.kscience.dataforge.provider.Provider
/** /**
* The interface to define a Context plugin. A plugin stores all runtime features of a context. * The interface to define a Context plugin. A plugin stores all runtime features of a context.

View File

@ -1,6 +1,6 @@
package hep.dataforge.context package space.kscience.dataforge.context
import hep.dataforge.misc.Type import space.kscience.dataforge.misc.Type
import kotlin.reflect.KClass import kotlin.reflect.KClass
@Type(PluginFactory.TYPE) @Type(PluginFactory.TYPE)

View File

@ -1,7 +1,7 @@
package hep.dataforge.context package space.kscience.dataforge.context
import hep.dataforge.meta.Meta import space.kscience.dataforge.meta.Meta
import hep.dataforge.meta.MetaBuilder import space.kscience.dataforge.meta.MetaBuilder
import kotlin.reflect.KClass import kotlin.reflect.KClass
@ -93,7 +93,7 @@ public class PluginManager(override val context: Context) : ContextAware, Iterab
fetch(factory, meta, true) fetch(factory, meta, true)
} }
logger.info { "Loading plugin ${plugin.name} into ${context.name}" } Global.logger.info { "Loading plugin ${plugin.name} into ${context.name}" }
plugin.attach(context) plugin.attach(context)
plugins.add(plugin) plugins.add(plugin)
return plugin return plugin
@ -114,7 +114,7 @@ public class PluginManager(override val context: Context) : ContextAware, Iterab
*/ */
public fun remove(plugin: Plugin) { public fun remove(plugin: Plugin) {
if (plugins.contains(plugin)) { if (plugins.contains(plugin)) {
logger.info { "Removing plugin ${plugin.name} from ${context.name}" } Global.logger.info { "Removing plugin ${plugin.name} from ${context.name}" }
plugin.detach() plugin.detach()
plugins.remove(plugin) plugins.remove(plugin)
} }

View File

@ -1,7 +1,7 @@
package hep.dataforge.context package space.kscience.dataforge.context
import hep.dataforge.meta.Meta import space.kscience.dataforge.meta.Meta
import hep.dataforge.meta.MetaRepr import space.kscience.dataforge.meta.MetaRepr
/** /**
* The tag which contains information about name, group and version of some * The tag which contains information about name, group and version of some
@ -43,7 +43,7 @@ public data class PluginTag(
public companion object { public companion object {
public const val DATAFORGE_GROUP: String = "hep.dataforge" public const val DATAFORGE_GROUP: String = "dataforge"
/** /**
* Build new PluginTag from standard string representation * Build new PluginTag from standard string representation

View File

@ -1,10 +1,10 @@
package hep.dataforge.context package space.kscience.dataforge.context
import hep.dataforge.misc.DFExperimental import space.kscience.dataforge.misc.DFExperimental
import hep.dataforge.names.Name import space.kscience.dataforge.names.Name
import hep.dataforge.names.plus import space.kscience.dataforge.names.plus
import hep.dataforge.provider.Provider import space.kscience.dataforge.provider.Provider
import hep.dataforge.provider.top import space.kscience.dataforge.provider.top
import kotlin.reflect.KClass import kotlin.reflect.KClass
import kotlin.reflect.cast import kotlin.reflect.cast

View File

@ -1,13 +1,13 @@
package hep.dataforge.properties package space.kscience.dataforge.properties
import hep.dataforge.meta.Config import space.kscience.dataforge.meta.Config
import hep.dataforge.meta.get import space.kscience.dataforge.meta.get
import hep.dataforge.meta.set import space.kscience.dataforge.meta.set
import hep.dataforge.meta.transformations.MetaConverter import space.kscience.dataforge.meta.transformations.MetaConverter
import hep.dataforge.meta.transformations.nullableItemToObject import space.kscience.dataforge.meta.transformations.nullableItemToObject
import hep.dataforge.meta.transformations.nullableObjectToMetaItem import space.kscience.dataforge.meta.transformations.nullableObjectToMetaItem
import hep.dataforge.misc.DFExperimental import space.kscience.dataforge.misc.DFExperimental
import hep.dataforge.names.Name import space.kscience.dataforge.names.Name
@DFExperimental @DFExperimental
public class ConfigProperty<T : Any>( public class ConfigProperty<T : Any>(

View File

@ -1,10 +1,10 @@
package hep.dataforge.properties package space.kscience.dataforge.properties
import hep.dataforge.misc.DFExperimental
import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.StateFlow
import space.kscience.dataforge.misc.DFExperimental
@DFExperimental @DFExperimental
public interface Property<T> { public interface Property<T> {

View File

@ -13,10 +13,10 @@
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
package hep.dataforge.provider package space.kscience.dataforge.provider
import hep.dataforge.names.Name import space.kscience.dataforge.names.Name
import hep.dataforge.names.toName import space.kscience.dataforge.names.toName
/** /**
* Path interface. * Path interface.

View File

@ -13,9 +13,9 @@
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
package hep.dataforge.provider package space.kscience.dataforge.provider
import hep.dataforge.names.Name import space.kscience.dataforge.names.Name
import kotlin.reflect.KClass import kotlin.reflect.KClass
import kotlin.reflect.safeCast import kotlin.reflect.safeCast

View File

@ -1,8 +1,8 @@
package hep.dataforge.context package space.kscience.dataforge.context
import hep.dataforge.names.Name import space.kscience.dataforge.names.Name
import hep.dataforge.names.appendLeft import space.kscience.dataforge.names.appendLeft
import hep.dataforge.names.toName import space.kscience.dataforge.names.toName
import kotlin.test.Test import kotlin.test.Test
import kotlin.test.assertEquals import kotlin.test.assertEquals

View File

@ -0,0 +1,29 @@
package space.kscience.dataforge.context
import space.kscience.dataforge.meta.Meta
import space.kscience.dataforge.names.Name
import kotlin.reflect.KClass
public class ConsoleLogManager : AbstractPlugin(), LogManager {
override fun log(name: Name, tag: String, body: () -> String) {
val message: String = body.safe
when (tag) {
LogManager.INFO -> console.info("[${context.name}] $name: $message")
LogManager.WARNING -> console.warn("[${context.name}] $name: $message")
LogManager.ERROR -> console.error("[${context.name}] $name: $message")
else -> console.log("[${context.name}] $name: $message")
}
}
override val tag: PluginTag get() = Companion.tag
public companion object : PluginFactory<ConsoleLogManager> {
override fun invoke(meta: Meta, context: Context): ConsoleLogManager = ConsoleLogManager()
override val tag: PluginTag = PluginTag(group = PluginTag.DATAFORGE_GROUP, name = "log.jsConsole")
override val type: KClass<out ConsoleLogManager> = ConsoleLogManager::class
}
}
internal actual val globalLoggerFactory: PluginFactory<out LogManager> = ConsoleLogManager

View File

@ -1,7 +1,7 @@
package hep.dataforge.properties package space.kscience.dataforge.properties
import hep.dataforge.misc.DFExperimental
import org.w3c.dom.HTMLInputElement import org.w3c.dom.HTMLInputElement
import space.kscience.dataforge.misc.DFExperimental
@DFExperimental @DFExperimental
public fun HTMLInputElement.bindValue(property: Property<String>) { public fun HTMLInputElement.bindValue(property: Property<String>) {

View File

@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
package hep.dataforge.context package space.kscience.dataforge.context
import java.util.* import java.util.*
import kotlin.reflect.KClass import kotlin.reflect.KClass

View File

@ -0,0 +1,32 @@
package space.kscience.dataforge.context
import org.slf4j.LoggerFactory
import space.kscience.dataforge.meta.Meta
import space.kscience.dataforge.names.Name
import kotlin.reflect.KClass
public class SlfLogManager : AbstractPlugin(), LogManager {
override fun log(name: Name, tag: String, body: () -> String) {
val logger = LoggerFactory.getLogger("[${context.name}] $name") //KotlinLogging.logger("[${context.name}] $name")
val message = body.safe
when (tag) {
LogManager.DEBUG -> logger.debug(message)
LogManager.INFO -> logger.info(message)
LogManager.WARNING -> logger.warn(message)
LogManager.ERROR -> logger.error(message)
else -> logger.trace(message)
}
}
override val tag: PluginTag get() = Companion.tag
public companion object : PluginFactory<SlfLogManager> {
override fun invoke(meta: Meta, context: Context): SlfLogManager = SlfLogManager()
override val tag: PluginTag = PluginTag(group = PluginTag.DATAFORGE_GROUP, name = "log.kotlinLogging")
override val type: KClass<out SlfLogManager> = SlfLogManager::class
}
}
internal actual val globalLoggerFactory: PluginFactory<out LogManager> = SlfLogManager

View File

@ -14,9 +14,9 @@
* limitations under the License. * limitations under the License.
*/ */
package hep.dataforge.descriptors package space.kscience.dataforge.descriptors
import hep.dataforge.values.ValueType import space.kscience.dataforge.values.ValueType
import kotlin.reflect.KClass import kotlin.reflect.KClass
@MustBeDocumented @MustBeDocumented

View File

@ -1,4 +1,4 @@
package hep.dataforge.descriptors package space.kscience.dataforge.descriptors
//inline fun <reified T : Scheme> T.buildDescriptor(): NodeDescriptor = NodeDescriptor { //inline fun <reified T : Scheme> T.buildDescriptor(): NodeDescriptor = NodeDescriptor {

View File

@ -1,10 +1,10 @@
package hep.dataforge.provider package space.kscience.dataforge.provider
import hep.dataforge.context.Context import space.kscience.dataforge.context.Context
import hep.dataforge.context.gather import space.kscience.dataforge.context.gather
import hep.dataforge.misc.DFExperimental import space.kscience.dataforge.misc.DFExperimental
import hep.dataforge.misc.Type import space.kscience.dataforge.misc.Type
import hep.dataforge.names.Name import space.kscience.dataforge.names.Name
import kotlin.reflect.KClass import kotlin.reflect.KClass
import kotlin.reflect.full.findAnnotation import kotlin.reflect.full.findAnnotation

View File

@ -0,0 +1,25 @@
package space.kscience.dataforge.context
import space.kscience.dataforge.meta.Meta
import space.kscience.dataforge.names.Name
import kotlin.reflect.KClass
public class NativeLogManager : AbstractPlugin(), LogManager {
override fun log(name: Name, tag: String, body: () -> String) {
val message: String = body.safe
println("[${context.name}] $name: $message")
}
override val tag: PluginTag get() = Companion.tag
public companion object : PluginFactory<NativeLogManager> {
override fun invoke(meta: Meta, context: Context): NativeLogManager = NativeLogManager()
override val tag: PluginTag = PluginTag(group = PluginTag.DATAFORGE_GROUP, name = "log.native")
override val type: KClass<out NativeLogManager> = NativeLogManager::class
}
}
internal actual val globalLoggerFactory: PluginFactory<out LogManager> = NativeLogManager

View File

@ -1,6 +1,6 @@
plugins { plugins {
id("ru.mipt.npm.mpp") id("ru.mipt.npm.gradle.mpp")
id("ru.mipt.npm.native") id("ru.mipt.npm.gradle.native")
} }
kscience{ kscience{

View File

@ -1,9 +1,9 @@
package hep.dataforge.actions package space.kscience.dataforge.actions
import hep.dataforge.data.DataSet
import hep.dataforge.meta.Meta
import hep.dataforge.misc.DFExperimental
import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineScope
import space.kscience.dataforge.data.DataSet
import space.kscience.dataforge.meta.Meta
import space.kscience.dataforge.misc.DFExperimental
/** /**
* A simple data transformation on a data node. Actions should avoid doing actual dependency evaluation in [execute]. * A simple data transformation on a data node. Actions should avoid doing actual dependency evaluation in [execute].

View File

@ -1,18 +1,18 @@
package hep.dataforge.actions package space.kscience.dataforge.actions
import hep.dataforge.data.*
import hep.dataforge.meta.Meta
import hep.dataforge.meta.MetaBuilder
import hep.dataforge.meta.seal
import hep.dataforge.meta.toMutableMeta
import hep.dataforge.misc.DFBuilder
import hep.dataforge.misc.DFExperimental
import hep.dataforge.misc.DFInternal
import hep.dataforge.names.Name
import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.flow.collect import kotlinx.coroutines.flow.collect
import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.map
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import space.kscience.dataforge.data.*
import space.kscience.dataforge.meta.Meta
import space.kscience.dataforge.meta.MetaBuilder
import space.kscience.dataforge.meta.seal
import space.kscience.dataforge.meta.toMutableMeta
import space.kscience.dataforge.misc.DFBuilder
import space.kscience.dataforge.misc.DFExperimental
import space.kscience.dataforge.misc.DFInternal
import space.kscience.dataforge.names.Name
import kotlin.reflect.KType import kotlin.reflect.KType
import kotlin.reflect.typeOf import kotlin.reflect.typeOf

View File

@ -1,17 +1,17 @@
package hep.dataforge.actions package space.kscience.dataforge.actions
import hep.dataforge.data.*
import hep.dataforge.meta.Meta
import hep.dataforge.meta.MetaBuilder
import hep.dataforge.misc.DFBuilder
import hep.dataforge.misc.DFExperimental
import hep.dataforge.misc.DFInternal
import hep.dataforge.names.Name
import hep.dataforge.names.toName
import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.flow import kotlinx.coroutines.flow.flow
import kotlinx.coroutines.flow.fold import kotlinx.coroutines.flow.fold
import space.kscience.dataforge.data.*
import space.kscience.dataforge.meta.Meta
import space.kscience.dataforge.meta.MetaBuilder
import space.kscience.dataforge.misc.DFBuilder
import space.kscience.dataforge.misc.DFExperimental
import space.kscience.dataforge.misc.DFInternal
import space.kscience.dataforge.names.Name
import space.kscience.dataforge.names.toName
import kotlin.reflect.KType import kotlin.reflect.KType
import kotlin.reflect.typeOf import kotlin.reflect.typeOf

View File

@ -1,18 +1,18 @@
package hep.dataforge.actions package space.kscience.dataforge.actions
import hep.dataforge.data.*
import hep.dataforge.meta.Laminate
import hep.dataforge.meta.Meta
import hep.dataforge.meta.MetaBuilder
import hep.dataforge.meta.toMutableMeta
import hep.dataforge.misc.DFExperimental
import hep.dataforge.misc.DFInternal
import hep.dataforge.names.Name
import hep.dataforge.names.toName
import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.FlowPreview import kotlinx.coroutines.FlowPreview
import kotlinx.coroutines.flow.* import kotlinx.coroutines.flow.*
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import space.kscience.dataforge.data.*
import space.kscience.dataforge.meta.Laminate
import space.kscience.dataforge.meta.Meta
import space.kscience.dataforge.meta.MetaBuilder
import space.kscience.dataforge.meta.toMutableMeta
import space.kscience.dataforge.misc.DFExperimental
import space.kscience.dataforge.misc.DFInternal
import space.kscience.dataforge.names.Name
import space.kscience.dataforge.names.toName
import kotlin.collections.set import kotlin.collections.set
import kotlin.reflect.KType import kotlin.reflect.KType
import kotlin.reflect.typeOf import kotlin.reflect.typeOf

View File

@ -1,13 +1,13 @@
package hep.dataforge.data package space.kscience.dataforge.data
import hep.dataforge.meta.*
import hep.dataforge.names.*
import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Job import kotlinx.coroutines.Job
import kotlinx.coroutines.flow.* import kotlinx.coroutines.flow.*
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import kotlinx.coroutines.sync.Mutex import kotlinx.coroutines.sync.Mutex
import kotlinx.coroutines.sync.withLock import kotlinx.coroutines.sync.withLock
import space.kscience.dataforge.meta.*
import space.kscience.dataforge.names.*
import kotlin.reflect.KType import kotlin.reflect.KType
import kotlin.reflect.typeOf import kotlin.reflect.typeOf

View File

@ -1,13 +1,13 @@
package hep.dataforge.data package space.kscience.dataforge.data
import hep.dataforge.actions.Action
import hep.dataforge.meta.Meta
import hep.dataforge.names.Name
import hep.dataforge.names.startsWith
import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.coroutineScope import kotlinx.coroutines.coroutineScope
import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.collect import kotlinx.coroutines.flow.collect
import space.kscience.dataforge.actions.Action
import space.kscience.dataforge.meta.Meta
import space.kscience.dataforge.names.Name
import space.kscience.dataforge.names.startsWith
import kotlin.reflect.KType import kotlin.reflect.KType
/** /**

View File

@ -1,12 +1,11 @@
package hep.dataforge.data package space.kscience.dataforge.data
import hep.dataforge.misc.DFExperimental
import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Job import kotlinx.coroutines.Job
import space.kscience.dataforge.misc.DFExperimental
import kotlin.coroutines.CoroutineContext import kotlin.coroutines.CoroutineContext
/** /**
* A monitor of goal state that could be accessed only form inside the goal * A monitor of goal state that could be accessed only form inside the goal
*/ */

View File

@ -1,11 +1,11 @@
package hep.dataforge.data package space.kscience.dataforge.data
import hep.dataforge.meta.Meta
import hep.dataforge.meta.MetaRepr
import hep.dataforge.meta.isEmpty
import hep.dataforge.misc.DFInternal
import hep.dataforge.misc.Type
import kotlinx.coroutines.* import kotlinx.coroutines.*
import space.kscience.dataforge.meta.Meta
import space.kscience.dataforge.meta.MetaRepr
import space.kscience.dataforge.meta.isEmpty
import space.kscience.dataforge.misc.DFInternal
import space.kscience.dataforge.misc.Type
import kotlin.coroutines.CoroutineContext import kotlin.coroutines.CoroutineContext
import kotlin.coroutines.EmptyCoroutineContext import kotlin.coroutines.EmptyCoroutineContext
import kotlin.reflect.KType import kotlin.reflect.KType

View File

@ -1,11 +1,11 @@
package hep.dataforge.data package space.kscience.dataforge.data
import hep.dataforge.data.Data.Companion.TYPE_OF_NOTHING
import hep.dataforge.meta.Meta
import hep.dataforge.meta.set
import hep.dataforge.names.*
import kotlinx.coroutines.* import kotlinx.coroutines.*
import kotlinx.coroutines.flow.* import kotlinx.coroutines.flow.*
import space.kscience.dataforge.data.Data.Companion.TYPE_OF_NOTHING
import space.kscience.dataforge.meta.Meta
import space.kscience.dataforge.meta.set
import space.kscience.dataforge.names.*
import kotlin.reflect.KType import kotlin.reflect.KType
public interface DataSet<out T : Any> { public interface DataSet<out T : Any> {

View File

@ -1,14 +1,14 @@
package hep.dataforge.data package space.kscience.dataforge.data
import hep.dataforge.meta.Meta
import hep.dataforge.meta.MetaBuilder
import hep.dataforge.misc.DFExperimental
import hep.dataforge.names.Name
import hep.dataforge.names.plus
import hep.dataforge.names.toName
import kotlinx.coroutines.coroutineScope import kotlinx.coroutines.coroutineScope
import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.collect import kotlinx.coroutines.flow.collect
import space.kscience.dataforge.meta.Meta
import space.kscience.dataforge.meta.MetaBuilder
import space.kscience.dataforge.misc.DFExperimental
import space.kscience.dataforge.names.Name
import space.kscience.dataforge.names.plus
import space.kscience.dataforge.names.toName
import kotlin.reflect.KType import kotlin.reflect.KType
public interface DataSetBuilder<in T : Any> { public interface DataSetBuilder<in T : Any> {

View File

@ -1,11 +1,11 @@
package hep.dataforge.data package space.kscience.dataforge.data
import hep.dataforge.misc.Type
import hep.dataforge.names.*
import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.emitAll import kotlinx.coroutines.flow.emitAll
import kotlinx.coroutines.flow.flow import kotlinx.coroutines.flow.flow
import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.map
import space.kscience.dataforge.misc.Type
import space.kscience.dataforge.names.*
import kotlin.collections.component1 import kotlin.collections.component1
import kotlin.collections.component2 import kotlin.collections.component2
import kotlin.reflect.KType import kotlin.reflect.KType

View File

@ -1,7 +1,7 @@
package hep.dataforge.data package space.kscience.dataforge.data
import hep.dataforge.misc.DFExperimental
import kotlinx.coroutines.* import kotlinx.coroutines.*
import space.kscience.dataforge.misc.DFExperimental
import kotlin.coroutines.CoroutineContext import kotlin.coroutines.CoroutineContext
import kotlin.coroutines.EmptyCoroutineContext import kotlin.coroutines.EmptyCoroutineContext

View File

@ -1,4 +1,4 @@
package hep.dataforge.data package space.kscience.dataforge.data
import kotlin.coroutines.CoroutineContext import kotlin.coroutines.CoroutineContext

View File

@ -1,4 +1,4 @@
package hep.dataforge.data package space.kscience.dataforge.data
import kotlin.coroutines.CoroutineContext import kotlin.coroutines.CoroutineContext

View File

@ -13,13 +13,13 @@
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
package hep.dataforge.data package space.kscience.dataforge.data
import hep.dataforge.meta.get
import hep.dataforge.meta.string
import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.flow.collect import kotlinx.coroutines.flow.collect
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import space.kscience.dataforge.meta.get
import space.kscience.dataforge.meta.string
public interface GroupRule { public interface GroupRule {
public suspend fun <T : Any> gather(set: DataSet<T>): Map<String, DataSet<T>> public suspend fun <T : Any> gather(set: DataSet<T>): Map<String, DataSet<T>>
@ -52,7 +52,7 @@ public interface GroupRule {
scope.launch { scope.launch {
set.updates.collect { name -> set.updates.collect { name ->
val data = set.getData(name) val data = set.getData(name)
val tagValue = data?.meta[key]?.string ?: defaultTagValue val tagValue = data?.meta[key].string ?: defaultTagValue
map.getOrPut(tagValue) { ActiveDataTree(set.dataType) }.emit(name, data) map.getOrPut(tagValue) { ActiveDataTree(set.dataType) }.emit(name, data)
} }
} }

View File

@ -1,8 +1,8 @@
package hep.dataforge.data package space.kscience.dataforge.data
import hep.dataforge.meta.isEmpty import space.kscience.dataforge.meta.isEmpty
import hep.dataforge.misc.Named import space.kscience.dataforge.misc.Named
import hep.dataforge.names.Name import space.kscience.dataforge.names.Name
public interface NamedData<out T : Any> : Named, Data<T> { public interface NamedData<out T : Any> : Named, Data<T> {
override val name: Name override val name: Name

View File

@ -1,8 +1,9 @@
package hep.dataforge.data package space.kscience.dataforge.data
import hep.dataforge.names.*
import kotlinx.coroutines.coroutineScope import kotlinx.coroutines.coroutineScope
import kotlinx.coroutines.flow.collect import kotlinx.coroutines.flow.collect
import space.kscience.dataforge.misc.DFExperimental
import space.kscience.dataforge.names.*
import kotlin.reflect.KType import kotlin.reflect.KType
import kotlin.reflect.typeOf import kotlin.reflect.typeOf
@ -71,6 +72,7 @@ public suspend inline fun <reified T : Any> DataTree(
noinline block: suspend DataSetBuilder<T>.() -> Unit, noinline block: suspend DataSetBuilder<T>.() -> Unit,
): DataTree<T> = DataTree(typeOf<T>(), block) ): DataTree<T> = DataTree(typeOf<T>(), block)
@OptIn(DFExperimental::class)
public suspend fun <T : Any> DataSet<T>.seal(): DataTree<T> = DataTree(dataType){ public suspend fun <T : Any> DataSet<T>.seal(): DataTree<T> = DataTree(dataType){
populate(this@seal) populate(this@seal)
} }

View File

@ -1,11 +1,11 @@
package hep.dataforge.data package space.kscience.dataforge.data
import hep.dataforge.misc.DFExperimental
import hep.dataforge.names.*
import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.filter import kotlinx.coroutines.flow.filter
import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.map
import kotlinx.coroutines.flow.mapNotNull import kotlinx.coroutines.flow.mapNotNull
import space.kscience.dataforge.misc.DFExperimental
import space.kscience.dataforge.names.*
import kotlin.reflect.KType import kotlin.reflect.KType

View File

@ -1,7 +1,7 @@
package hep.dataforge.data package space.kscience.dataforge.data
import hep.dataforge.meta.Meta import space.kscience.dataforge.meta.Meta
import hep.dataforge.meta.MetaBuilder import space.kscience.dataforge.meta.MetaBuilder
/** /**

View File

@ -1,11 +1,11 @@
package hep.dataforge.data package space.kscience.dataforge.data
import hep.dataforge.meta.Meta
import hep.dataforge.meta.MetaBuilder
import hep.dataforge.meta.seal
import hep.dataforge.meta.toMutableMeta
import hep.dataforge.misc.DFInternal
import kotlinx.coroutines.flow.* import kotlinx.coroutines.flow.*
import space.kscience.dataforge.meta.Meta
import space.kscience.dataforge.meta.MetaBuilder
import space.kscience.dataforge.meta.seal
import space.kscience.dataforge.meta.toMutableMeta
import space.kscience.dataforge.misc.DFInternal
import kotlin.contracts.InvocationKind import kotlin.contracts.InvocationKind
import kotlin.contracts.contract import kotlin.contracts.contract
import kotlin.coroutines.CoroutineContext import kotlin.coroutines.CoroutineContext

View File

@ -1,12 +1,12 @@
package hep.dataforge.data package space.kscience.dataforge.data
import hep.dataforge.misc.DFExperimental
import hep.dataforge.names.Name
import hep.dataforge.names.matches
import hep.dataforge.names.toName
import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.filter import kotlinx.coroutines.flow.filter
import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.map
import space.kscience.dataforge.misc.DFExperimental
import space.kscience.dataforge.names.Name
import space.kscience.dataforge.names.matches
import space.kscience.dataforge.names.toName
import kotlin.reflect.KType import kotlin.reflect.KType
import kotlin.reflect.full.isSubtypeOf import kotlin.reflect.full.isSubtypeOf
import kotlin.reflect.typeOf import kotlin.reflect.typeOf

View File

@ -1,9 +1,9 @@
package hep.dataforge.data package space.kscience.dataforge.data
import hep.dataforge.actions.Action
import hep.dataforge.actions.map
import kotlinx.coroutines.runBlocking import kotlinx.coroutines.runBlocking
import org.junit.jupiter.api.Test import org.junit.jupiter.api.Test
import space.kscience.dataforge.actions.Action
import space.kscience.dataforge.actions.map
import kotlin.test.assertEquals import kotlin.test.assertEquals
@Suppress("EXPERIMENTAL_API_USAGE") @Suppress("EXPERIMENTAL_API_USAGE")

View File

@ -1,8 +1,9 @@
package hep.dataforge.data package space.kscience.dataforge.data
import hep.dataforge.names.toName
import kotlinx.coroutines.* import kotlinx.coroutines.*
import kotlinx.coroutines.flow.collect import kotlinx.coroutines.flow.collect
import space.kscience.dataforge.misc.DFExperimental
import space.kscience.dataforge.names.toName
import kotlin.test.Test import kotlin.test.Test
import kotlin.test.assertEquals import kotlin.test.assertEquals
@ -26,6 +27,7 @@ internal class DataTreeBuilderTest {
} }
} }
@OptIn(DFExperimental::class)
@Test @Test
fun testDataUpdate() = runBlocking { fun testDataUpdate() = runBlocking {
val updateData: DataTree<Any> = DataTree { val updateData: DataTree<Any> = DataTree {

View File

@ -1,6 +1,6 @@
plugins { plugins {
id("ru.mipt.npm.mpp") id("ru.mipt.npm.gradle.mpp")
id("ru.mipt.npm.native") id("ru.mipt.npm.gradle.native")
} }
description = "IO module" description = "IO module"
@ -11,14 +11,14 @@ kscience {
} }
} }
val ioVersion by rootProject.extra("0.2.0-npm-dev-11") //val ioVersion by rootProject.extra("0.2.0-npm-dev-11")
kotlin { kotlin {
sourceSets { sourceSets {
commonMain { commonMain {
dependencies { dependencies {
api(project(":dataforge-context")) api(project(":dataforge-context"))
api("org.jetbrains.kotlinx:kotlinx-io:$ioVersion") api("io.ktor:ktor-io:${ru.mipt.npm.gradle.KScienceVersions.ktorVersion}")
} }
} }
} }

View File

@ -1,6 +1,6 @@
plugins { plugins {
id("ru.mipt.npm.mpp") id("ru.mipt.npm.gradle.mpp")
// id("ru.mipt.npm.native") // id("ru.mipt.npm.gradle.native")
} }
description = "YAML meta IO" description = "YAML meta IO"

View File

@ -1,124 +0,0 @@
package hep.dataforge.io.yaml
import hep.dataforge.context.Context
import hep.dataforge.io.*
import hep.dataforge.io.IOFormat.Companion.META_KEY
import hep.dataforge.io.IOFormat.Companion.NAME_KEY
import hep.dataforge.meta.Meta
import hep.dataforge.misc.DFExperimental
import kotlinx.io.*
import kotlinx.io.text.readUtf8Line
import kotlinx.io.text.writeUtf8String
@DFExperimental
public class FrontMatterEnvelopeFormat(
private val io: IOPlugin,
private val meta: Meta = Meta.EMPTY,
) : EnvelopeFormat {
override fun readPartial(input: Input): PartialEnvelope {
var line: String
var offset = 0u
do {
line = input.readUtf8Line() //?: error("Input does not contain front matter separator")
offset += line.encodeToByteArray().size.toUInt()
} while (!line.startsWith(SEPARATOR))
val readMetaFormat =
metaTypeRegex.matchEntire(line)?.groupValues?.first()
?.let { io.resolveMetaFormat(it) } ?: YamlMetaFormat
//TODO replace by preview
val meta = Binary {
do {
line = input.readUtf8Line()
writeUtf8String(line + "\r\n")
offset += line.encodeToByteArray().size.toUInt()
} while (!line.startsWith(SEPARATOR))
}.read {
readMetaFormat.readMeta(input)
}
return PartialEnvelope(meta, offset, null)
}
override fun readObject(input: Input): Envelope {
var line: String
do {
line = input.readUtf8Line() //?: error("Input does not contain front matter separator")
} while (!line.startsWith(SEPARATOR))
val readMetaFormat =
metaTypeRegex.matchEntire(line)?.groupValues?.first()
?.let { io.resolveMetaFormat(it) } ?: YamlMetaFormat
val meta = Binary {
do {
writeUtf8String(input.readUtf8Line() + "\r\n")
} while (!line.startsWith(SEPARATOR))
}.read {
readMetaFormat.readMeta(input)
}
val bytes = input.readByteArray()
val data = bytes.asBinary()
return SimpleEnvelope(meta, data)
}
override fun writeEnvelope(
output: Output,
envelope: Envelope,
metaFormatFactory: MetaFormatFactory,
formatMeta: Meta,
) {
val metaFormat = metaFormatFactory(formatMeta, this@FrontMatterEnvelopeFormat.io.context)
output.writeRawString("${hep.dataforge.io.yaml.FrontMatterEnvelopeFormat.Companion.SEPARATOR}\r\n")
metaFormat.run { this.writeObject(output, envelope.meta) }
output.writeRawString("${hep.dataforge.io.yaml.FrontMatterEnvelopeFormat.Companion.SEPARATOR}\r\n")
//Printing data
envelope.data?.let { data ->
output.writeBinary(data)
}
}
override fun toMeta(): Meta = Meta {
NAME_KEY put name.toString()
META_KEY put meta
}
public companion object : EnvelopeFormatFactory {
public const val SEPARATOR: String = "---"
private val metaTypeRegex = "---(\\w*)\\s*".toRegex()
override fun invoke(meta: Meta, context: Context): EnvelopeFormat {
return FrontMatterEnvelopeFormat(context.io, meta)
}
override fun peekFormat(io: IOPlugin, input: Input): EnvelopeFormat? {
return input.preview {
val line = readUtf8Line()
return@preview if (line.startsWith("---")) {
invoke()
} else {
null
}
}
}
private val default by lazy { invoke() }
override fun readPartial(input: Input): PartialEnvelope =
default.readPartial(input)
override fun writeEnvelope(
output: Output,
envelope: Envelope,
metaFormatFactory: MetaFormatFactory,
formatMeta: Meta,
): Unit = default.writeEnvelope(output, envelope, metaFormatFactory, formatMeta)
override fun readObject(input: Input): Envelope = default.readObject(input)
}
}

View File

@ -0,0 +1,123 @@
package space.kscience.dataforge.io.yaml
import io.ktor.utils.io.core.Input
import io.ktor.utils.io.core.Output
import io.ktor.utils.io.core.readBytes
import io.ktor.utils.io.core.readUTF8Line
import space.kscience.dataforge.context.Context
import space.kscience.dataforge.io.*
import space.kscience.dataforge.io.IOFormat.Companion.META_KEY
import space.kscience.dataforge.io.IOFormat.Companion.NAME_KEY
import space.kscience.dataforge.meta.Meta
import space.kscience.dataforge.misc.DFExperimental
@DFExperimental
public class FrontMatterEnvelopeFormat(
private val io: IOPlugin,
private val meta: Meta = Meta.EMPTY,
) : EnvelopeFormat {
override fun readPartial(input: Input): PartialEnvelope {
var line: String
var offset = 0u
do {
line = input.readUTF8Line() ?: error("Input does not contain front matter separator")
offset += line.encodeToByteArray().size.toUInt()
} while (!line.startsWith(space.kscience.dataforge.io.yaml.FrontMatterEnvelopeFormat.Companion.SEPARATOR))
val readMetaFormat =
space.kscience.dataforge.io.yaml.FrontMatterEnvelopeFormat.Companion.metaTypeRegex.matchEntire(line)?.groupValues?.first()
?.let { io.resolveMetaFormat(it) } ?: space.kscience.dataforge.io.yaml.YamlMetaFormat
//TODO replace by preview
val meta = Binary {
do {
line = input.readSafeUtf8Line()
writeUtf8String(line + "\r\n")
offset += line.encodeToByteArray().size.toUInt()
} while (!line.startsWith(space.kscience.dataforge.io.yaml.FrontMatterEnvelopeFormat.Companion.SEPARATOR))
}.read {
readMetaFormat.readMeta(input)
}
return PartialEnvelope(meta, offset, null)
}
override fun readObject(input: Input): Envelope {
var line: String
do {
line = input.readSafeUtf8Line() //?: error("Input does not contain front matter separator")
} while (!line.startsWith(space.kscience.dataforge.io.yaml.FrontMatterEnvelopeFormat.Companion.SEPARATOR))
val readMetaFormat =
space.kscience.dataforge.io.yaml.FrontMatterEnvelopeFormat.Companion.metaTypeRegex.matchEntire(line)?.groupValues?.first()
?.let { io.resolveMetaFormat(it) } ?: space.kscience.dataforge.io.yaml.YamlMetaFormat
val meta = Binary {
do {
writeUtf8String(input.readSafeUtf8Line() + "\r\n")
} while (!line.startsWith(space.kscience.dataforge.io.yaml.FrontMatterEnvelopeFormat.Companion.SEPARATOR))
}.read {
readMetaFormat.readMeta(input)
}
val bytes = input.readBytes()
val data = bytes.asBinary()
return SimpleEnvelope(meta, data)
}
override fun writeEnvelope(
output: Output,
envelope: Envelope,
metaFormatFactory: MetaFormatFactory,
formatMeta: Meta,
) {
val metaFormat = metaFormatFactory(formatMeta, this@FrontMatterEnvelopeFormat.io.context)
output.writeRawString("${space.kscience.dataforge.io.yaml.FrontMatterEnvelopeFormat.Companion.SEPARATOR}\r\n")
metaFormat.run { this.writeObject(output, envelope.meta) }
output.writeRawString("${space.kscience.dataforge.io.yaml.FrontMatterEnvelopeFormat.Companion.SEPARATOR}\r\n")
//Printing data
envelope.data?.let { data ->
output.writeBinary(data)
}
}
override fun toMeta(): Meta = Meta {
NAME_KEY put name.toString()
META_KEY put meta
}
public companion object : EnvelopeFormatFactory {
public const val SEPARATOR: String = "---"
private val metaTypeRegex = "---(\\w*)\\s*".toRegex()
override fun invoke(meta: Meta, context: Context): EnvelopeFormat {
return space.kscience.dataforge.io.yaml.FrontMatterEnvelopeFormat(context.io, meta)
}
override fun peekFormat(io: IOPlugin, binary: Binary): EnvelopeFormat? = binary.read {
val line = readSafeUtf8Line()
return@read if (line.startsWith("---")) {
space.kscience.dataforge.io.yaml.FrontMatterEnvelopeFormat.Companion.invoke()
} else {
null
}
}
private val default by lazy { space.kscience.dataforge.io.yaml.FrontMatterEnvelopeFormat.Companion.invoke() }
override fun readPartial(input: Input): PartialEnvelope =
space.kscience.dataforge.io.yaml.FrontMatterEnvelopeFormat.Companion.default.readPartial(input)
override fun writeEnvelope(
output: Output,
envelope: Envelope,
metaFormatFactory: MetaFormatFactory,
formatMeta: Meta,
): Unit = space.kscience.dataforge.io.yaml.FrontMatterEnvelopeFormat.Companion.default.writeEnvelope(output, envelope, metaFormatFactory, formatMeta)
override fun readObject(input: Input): Envelope = space.kscience.dataforge.io.yaml.FrontMatterEnvelopeFormat.Companion.default.readObject(input)
}
}

View File

@ -1,24 +1,24 @@
package hep.dataforge.io.yaml package space.kscience.dataforge.io.yaml
import hep.dataforge.context.Context import io.ktor.utils.io.core.Input
import hep.dataforge.io.IOFormat.Companion.META_KEY import io.ktor.utils.io.core.Output
import hep.dataforge.io.IOFormat.Companion.NAME_KEY
import hep.dataforge.io.MetaFormat
import hep.dataforge.io.MetaFormatFactory
import hep.dataforge.meta.*
import hep.dataforge.meta.descriptors.ItemDescriptor
import hep.dataforge.meta.descriptors.NodeDescriptor
import hep.dataforge.misc.DFExperimental
import hep.dataforge.names.NameToken
import hep.dataforge.names.withIndex
import hep.dataforge.values.ListValue
import hep.dataforge.values.Null
import hep.dataforge.values.parseValue
import kotlinx.io.Input
import kotlinx.io.Output
import kotlinx.io.text.readUtf8String
import kotlinx.io.text.writeUtf8String
import net.mamoe.yamlkt.* import net.mamoe.yamlkt.*
import space.kscience.dataforge.context.Context
import space.kscience.dataforge.io.IOFormat.Companion.META_KEY
import space.kscience.dataforge.io.IOFormat.Companion.NAME_KEY
import space.kscience.dataforge.io.MetaFormat
import space.kscience.dataforge.io.MetaFormatFactory
import space.kscience.dataforge.io.readUtf8String
import space.kscience.dataforge.io.writeUtf8String
import space.kscience.dataforge.meta.*
import space.kscience.dataforge.meta.descriptors.ItemDescriptor
import space.kscience.dataforge.meta.descriptors.NodeDescriptor
import space.kscience.dataforge.misc.DFExperimental
import space.kscience.dataforge.names.NameToken
import space.kscience.dataforge.names.withIndex
import space.kscience.dataforge.values.ListValue
import space.kscience.dataforge.values.Null
import space.kscience.dataforge.values.parseValue
public fun Meta.toYaml(): YamlMap { public fun Meta.toYaml(): YamlMap {
val map: Map<String, Any?> = items.entries.associate { (key, item) -> val map: Map<String, Any?> = items.entries.associate { (key, item) ->
@ -100,7 +100,7 @@ public class YamlMetaFormat(private val meta: Meta) : MetaFormat {
} }
override fun toMeta(): Meta = Meta { override fun toMeta(): Meta = Meta {
NAME_KEY put FrontMatterEnvelopeFormat.name.toString() NAME_KEY put space.kscience.dataforge.io.yaml.FrontMatterEnvelopeFormat.name.toString()
META_KEY put meta META_KEY put meta
} }

View File

@ -1,11 +1,11 @@
package hep.dataforge.io.yaml package space.kscience.dataforge.io.yaml
import hep.dataforge.io.parse import space.kscience.dataforge.io.parse
import hep.dataforge.io.toString import space.kscience.dataforge.io.toString
import hep.dataforge.meta.Meta import space.kscience.dataforge.meta.Meta
import hep.dataforge.meta.get import space.kscience.dataforge.meta.get
import hep.dataforge.meta.seal import space.kscience.dataforge.meta.seal
import hep.dataforge.misc.DFExperimental import space.kscience.dataforge.misc.DFExperimental
import kotlin.test.Test import kotlin.test.Test
import kotlin.test.assertEquals import kotlin.test.assertEquals

View File

@ -0,0 +1,74 @@
package space.kscience.dataforge.io
import io.ktor.utils.io.core.*
import kotlin.math.min
/**
* [Binary] represents a fixed-size multi-read byte block, which is not attached to the Input which was used to create it.
* The binary could be associated with a resource, but it should guarantee that when someone is trying to read the binary,
* this resource is re-acquired.
*/
public interface Binary {
public val size: Int
/**
* Read maximum of [atMost] bytes as input from the binary, starting at [offset]. The generated input is always closed
* when leaving scope, so it could not be leaked outside of scope of [block].
*/
public fun <R> read(offset: Int = 0, atMost: Int = size - offset, block: Input.() -> R): R
public companion object {
public val EMPTY: Binary = ByteArrayBinary(ByteArray(0))
}
}
internal class ByteArrayBinary(
internal val array: ByteArray,
internal val start: Int = 0,
override val size: Int = array.size - start,
) : Binary {
override fun <R> read(offset: Int, atMost: Int, block: Input.() -> R): R {
require(offset >= 0) { "Offset must be positive" }
require(offset < array.size) { "Offset $offset is larger than array size" }
val input = ByteReadPacket(
array,
offset + start,
min(atMost, size - offset)
)
return input.use(block)
}
}
public fun ByteArray.asBinary(): Binary = ByteArrayBinary(this)
/**
* Produce a [buildByteArray] representing an exact copy of this [Binary]
*/
public fun Binary.toByteArray(): ByteArray = if (this is ByteArrayBinary) {
array.copyOf() // TODO do we need to ensure data safety here?
} else {
read {
readBytes()
}
}
public fun Input.readBinary(size: Int): Binary {
val array = readBytes(size)
return ByteArrayBinary(array)
}
/**
* Direct write of binary to the output. Returns the number of bytes written
*/
public fun Output.writeBinary(binary: Binary): Int {
return if (binary is ByteArrayBinary) {
writeFully(binary.array, binary.start, binary.start + binary.size)
binary.size
} else {
binary.read {
copyTo(this@writeBinary).toInt()
}
}
}

View File

@ -1,12 +1,10 @@
package hep.dataforge.io package space.kscience.dataforge.io
import hep.dataforge.context.Context import io.ktor.utils.io.core.*
import hep.dataforge.meta.* import space.kscience.dataforge.context.Context
import hep.dataforge.meta.descriptors.NodeDescriptor import space.kscience.dataforge.meta.*
import hep.dataforge.values.* import space.kscience.dataforge.meta.descriptors.NodeDescriptor
import kotlinx.io.* import space.kscience.dataforge.values.*
import kotlinx.io.text.readUtf8String
import kotlinx.io.text.writeUtf8String
/** /**
* A DataForge-specific simplified binary format for meta * A DataForge-specific simplified binary format for meta
@ -26,7 +24,7 @@ public object BinaryMetaFormat : MetaFormat, MetaFormatFactory {
private fun Output.writeString(str: String) { private fun Output.writeString(str: String) {
writeInt(str.length) writeInt(str.length)
writeUtf8String(str) writeFully(str.encodeToByteArray())
} }
public fun Output.writeValue(value: Value): Unit = when (value.type) { public fun Output.writeValue(value: Value): Unit = when (value.type) {
@ -76,9 +74,9 @@ public object BinaryMetaFormat : MetaFormat, MetaFormatFactory {
} }
override fun writeMeta( override fun writeMeta(
output: kotlinx.io.Output, output: Output,
meta: hep.dataforge.meta.Meta, meta: Meta,
descriptor: hep.dataforge.meta.descriptors.NodeDescriptor?, descriptor: space.kscience.dataforge.meta.descriptors.NodeDescriptor?,
) { ) {
output.writeChar('M') output.writeChar('M')
output.writeInt(meta.items.size) output.writeInt(meta.items.size)
@ -97,7 +95,8 @@ public object BinaryMetaFormat : MetaFormat, MetaFormatFactory {
private fun Input.readString(): String { private fun Input.readString(): String {
val length = readInt() val length = readInt()
return readUtf8String(length) val array = readBytes(length)
return array.decodeToString()
} }
@Suppress("UNCHECKED_CAST") @Suppress("UNCHECKED_CAST")

View File

@ -1,6 +1,6 @@
package hep.dataforge.io package space.kscience.dataforge.io
import hep.dataforge.misc.DFExperimental import space.kscience.dataforge.misc.DFExperimental
/** /**
* A fire-and-forget consumer of messages * A fire-and-forget consumer of messages

View File

@ -1,13 +1,12 @@
package hep.dataforge.io package space.kscience.dataforge.io
import hep.dataforge.meta.Laminate import space.kscience.dataforge.meta.Laminate
import hep.dataforge.meta.Meta import space.kscience.dataforge.meta.Meta
import hep.dataforge.meta.get import space.kscience.dataforge.meta.get
import hep.dataforge.meta.string import space.kscience.dataforge.meta.string
import hep.dataforge.names.Name import space.kscience.dataforge.names.Name
import hep.dataforge.names.asName import space.kscience.dataforge.names.asName
import hep.dataforge.names.plus import space.kscience.dataforge.names.plus
import kotlinx.io.Binary
public interface Envelope { public interface Envelope {
public val meta: Meta public val meta: Meta

View File

@ -1,7 +1,7 @@
package hep.dataforge.io package space.kscience.dataforge.io
import hep.dataforge.meta.* import io.ktor.utils.io.core.Output
import kotlinx.io.* import space.kscience.dataforge.meta.*
public class EnvelopeBuilder : Envelope { public class EnvelopeBuilder : Envelope {
private val metaBuilder = MetaBuilder() private val metaBuilder = MetaBuilder()
@ -33,11 +33,8 @@ public class EnvelopeBuilder : Envelope {
/** /**
* Construct a data binary from given builder * Construct a data binary from given builder
*/ */
@OptIn(ExperimentalIoApi::class)
public fun data(block: Output.() -> Unit) { public fun data(block: Output.() -> Unit) {
val arrayBuilder = ByteArrayOutput() data = buildByteArray { block() }.asBinary()
arrayBuilder.block()
data = arrayBuilder.toByteArray().asBinary()
} }
public fun seal(): Envelope = SimpleEnvelope(metaBuilder.seal(), data) public fun seal(): Envelope = SimpleEnvelope(metaBuilder.seal(), data)

View File

@ -1,13 +1,13 @@
package hep.dataforge.io package space.kscience.dataforge.io
import hep.dataforge.context.Context import io.ktor.utils.io.core.Input
import hep.dataforge.io.EnvelopeFormatFactory.Companion.ENVELOPE_FORMAT_TYPE import io.ktor.utils.io.core.Output
import hep.dataforge.meta.Meta import space.kscience.dataforge.context.Context
import hep.dataforge.misc.Type import space.kscience.dataforge.io.EnvelopeFormatFactory.Companion.ENVELOPE_FORMAT_TYPE
import hep.dataforge.names.Name import space.kscience.dataforge.meta.Meta
import hep.dataforge.names.asName import space.kscience.dataforge.misc.Type
import kotlinx.io.Input import space.kscience.dataforge.names.Name
import kotlinx.io.Output import space.kscience.dataforge.names.asName
import kotlin.reflect.KType import kotlin.reflect.KType
import kotlin.reflect.typeOf import kotlin.reflect.typeOf
@ -48,7 +48,7 @@ public interface EnvelopeFormatFactory : IOFormatFactory<Envelope>, EnvelopeForm
* Try to infer specific format from input and return null if the attempt is failed. * Try to infer specific format from input and return null if the attempt is failed.
* This method does **not** return Input into initial state. * This method does **not** return Input into initial state.
*/ */
public fun peekFormat(io: IOPlugin, input: Input): EnvelopeFormat? public fun peekFormat(io: IOPlugin, binary: Binary): EnvelopeFormat?
public companion object { public companion object {
public const val ENVELOPE_FORMAT_TYPE: String = "io.format.envelope" public const val ENVELOPE_FORMAT_TYPE: String = "io.format.envelope"

View File

@ -1,18 +1,16 @@
package hep.dataforge.io package space.kscience.dataforge.io
import hep.dataforge.io.Envelope.Companion.ENVELOPE_NODE_KEY import space.kscience.dataforge.io.Envelope.Companion.ENVELOPE_NODE_KEY
import hep.dataforge.io.PartDescriptor.Companion.DEFAULT_MULTIPART_DATA_SEPARATOR import space.kscience.dataforge.io.PartDescriptor.Companion.DEFAULT_MULTIPART_DATA_SEPARATOR
import hep.dataforge.io.PartDescriptor.Companion.MULTIPART_DATA_TYPE import space.kscience.dataforge.io.PartDescriptor.Companion.MULTIPART_DATA_TYPE
import hep.dataforge.io.PartDescriptor.Companion.MULTIPART_KEY import space.kscience.dataforge.io.PartDescriptor.Companion.MULTIPART_KEY
import hep.dataforge.io.PartDescriptor.Companion.PARTS_KEY import space.kscience.dataforge.io.PartDescriptor.Companion.PARTS_KEY
import hep.dataforge.io.PartDescriptor.Companion.PART_FORMAT_KEY import space.kscience.dataforge.io.PartDescriptor.Companion.PART_FORMAT_KEY
import hep.dataforge.io.PartDescriptor.Companion.SEPARATOR_KEY import space.kscience.dataforge.io.PartDescriptor.Companion.SEPARATOR_KEY
import hep.dataforge.meta.* import space.kscience.dataforge.meta.*
import hep.dataforge.names.asName import space.kscience.dataforge.names.asName
import hep.dataforge.names.plus import space.kscience.dataforge.names.plus
import hep.dataforge.names.toName import space.kscience.dataforge.names.toName
import kotlinx.io.Binary
import kotlinx.io.writeBinary
private class PartDescriptor : Scheme() { private class PartDescriptor : Scheme() {
var offset by int(0) var offset by int(0)

View File

@ -1,20 +1,18 @@
package hep.dataforge.io package space.kscience.dataforge.io
import hep.dataforge.context.Context import io.ktor.utils.io.core.*
import hep.dataforge.context.Factory import space.kscience.dataforge.context.Context
import hep.dataforge.io.IOFormat.Companion.NAME_KEY import space.kscience.dataforge.context.Factory
import hep.dataforge.io.IOFormatFactory.Companion.IO_FORMAT_TYPE import space.kscience.dataforge.io.IOFormat.Companion.NAME_KEY
import hep.dataforge.meta.Meta import space.kscience.dataforge.io.IOFormatFactory.Companion.IO_FORMAT_TYPE
import hep.dataforge.meta.MetaItemValue import space.kscience.dataforge.meta.Meta
import hep.dataforge.meta.MetaRepr import space.kscience.dataforge.meta.MetaItemValue
import hep.dataforge.misc.Named import space.kscience.dataforge.meta.MetaRepr
import hep.dataforge.misc.Type import space.kscience.dataforge.misc.Named
import hep.dataforge.names.Name import space.kscience.dataforge.misc.Type
import hep.dataforge.names.asName import space.kscience.dataforge.names.Name
import hep.dataforge.values.Value import space.kscience.dataforge.names.asName
import kotlinx.io.* import space.kscience.dataforge.values.Value
import kotlinx.io.buffer.Buffer
import kotlinx.io.pool.ObjectPool
import kotlin.reflect.KType import kotlin.reflect.KType
import kotlin.reflect.typeOf import kotlin.reflect.typeOf
@ -35,6 +33,10 @@ public interface IOFormat<T : Any> : MetaRepr {
public fun <T : Any> Input.readWith(format: IOFormat<T>): T = format.readObject(this@readWith) public fun <T : Any> Input.readWith(format: IOFormat<T>): T = format.readObject(this@readWith)
public fun <T: Any> IOFormat<T>.readObject(binary: Binary): T = binary.read {
readObject(this)
}
/** /**
* Read given binary as object using given format * Read given binary as object using given format
*/ */
@ -73,15 +75,15 @@ public inline fun <reified T : Any> IOFormat.Companion.listOf(
} }
public fun ObjectPool<Buffer>.fill(block: Buffer.() -> Unit): Buffer { //public fun ObjectPool<Buffer>.fill(block: Buffer.() -> Unit): Buffer {
val buffer = borrow() // val buffer = borrow()
return try { // return try {
buffer.apply(block) // buffer.apply(block)
} catch (ex: Exception) { // } catch (ex: Exception) {
//recycle(buffer) // //recycle(buffer)
throw ex // throw ex
} // }
} //}
@Type(IO_FORMAT_TYPE) @Type(IO_FORMAT_TYPE)
public interface IOFormatFactory<T : Any> : Factory<IOFormat<T>>, Named, MetaRepr { public interface IOFormatFactory<T : Any> : Factory<IOFormat<T>>, Named, MetaRepr {

View File

@ -1,14 +1,14 @@
package hep.dataforge.io package space.kscience.dataforge.io
import hep.dataforge.context.* import space.kscience.dataforge.context.*
import hep.dataforge.io.EnvelopeFormatFactory.Companion.ENVELOPE_FORMAT_TYPE import space.kscience.dataforge.io.EnvelopeFormatFactory.Companion.ENVELOPE_FORMAT_TYPE
import hep.dataforge.io.IOFormat.Companion.META_KEY import space.kscience.dataforge.io.IOFormat.Companion.META_KEY
import hep.dataforge.io.IOFormat.Companion.NAME_KEY import space.kscience.dataforge.io.IOFormat.Companion.NAME_KEY
import hep.dataforge.io.IOFormatFactory.Companion.IO_FORMAT_TYPE import space.kscience.dataforge.io.IOFormatFactory.Companion.IO_FORMAT_TYPE
import hep.dataforge.io.MetaFormatFactory.Companion.META_FORMAT_TYPE import space.kscience.dataforge.io.MetaFormatFactory.Companion.META_FORMAT_TYPE
import hep.dataforge.meta.* import space.kscience.dataforge.meta.*
import hep.dataforge.names.Name import space.kscience.dataforge.names.Name
import hep.dataforge.names.toName import space.kscience.dataforge.names.toName
import kotlin.reflect.KClass import kotlin.reflect.KClass
public class IOPlugin(meta: Meta) : AbstractPlugin(meta) { public class IOPlugin(meta: Meta) : AbstractPlugin(meta) {

View File

@ -1,21 +1,19 @@
@file:Suppress("UNUSED_PARAMETER") @file:Suppress("UNUSED_PARAMETER")
package hep.dataforge.io package space.kscience.dataforge.io
import hep.dataforge.context.Context import io.ktor.utils.io.core.Input
import hep.dataforge.io.IOFormat.Companion.NAME_KEY import io.ktor.utils.io.core.Output
import hep.dataforge.meta.Meta
import hep.dataforge.meta.descriptors.NodeDescriptor
import hep.dataforge.meta.node
import hep.dataforge.meta.toJson
import hep.dataforge.meta.toMetaItem
import kotlinx.io.Input
import kotlinx.io.Output
import kotlinx.io.text.readUtf8String
import kotlinx.io.text.writeUtf8String
import kotlinx.serialization.json.Json import kotlinx.serialization.json.Json
import kotlinx.serialization.json.JsonObject import kotlinx.serialization.json.JsonObject
import space.kscience.dataforge.context.Context
import space.kscience.dataforge.io.IOFormat.Companion.NAME_KEY
import space.kscience.dataforge.meta.Meta
import space.kscience.dataforge.meta.descriptors.NodeDescriptor
import space.kscience.dataforge.meta.node
import space.kscience.dataforge.meta.toJson
import space.kscience.dataforge.meta.toMetaItem
import kotlin.reflect.KType import kotlin.reflect.KType
import kotlin.reflect.typeOf import kotlin.reflect.typeOf

View File

@ -1,17 +1,17 @@
package hep.dataforge.io package space.kscience.dataforge.io
import hep.dataforge.context.Context import io.ktor.utils.io.core.ByteReadPacket
import hep.dataforge.io.MetaFormatFactory.Companion.META_FORMAT_TYPE import io.ktor.utils.io.core.Input
import hep.dataforge.meta.Meta import io.ktor.utils.io.core.Output
import hep.dataforge.meta.descriptors.NodeDescriptor import io.ktor.utils.io.core.use
import hep.dataforge.misc.Type import space.kscience.dataforge.context.Context
import hep.dataforge.names.Name import space.kscience.dataforge.io.MetaFormatFactory.Companion.META_FORMAT_TYPE
import hep.dataforge.names.asName import space.kscience.dataforge.meta.Meta
import hep.dataforge.names.plus import space.kscience.dataforge.meta.descriptors.NodeDescriptor
import kotlinx.io.ByteArrayInput import space.kscience.dataforge.misc.Type
import kotlinx.io.Input import space.kscience.dataforge.names.Name
import kotlinx.io.Output import space.kscience.dataforge.names.asName
import kotlinx.io.use import space.kscience.dataforge.names.plus
import kotlin.reflect.KType import kotlin.reflect.KType
import kotlin.reflect.typeOf import kotlin.reflect.typeOf
@ -54,13 +54,15 @@ public interface MetaFormatFactory : IOFormatFactory<Meta>, MetaFormat {
} }
public fun Meta.toString(format: MetaFormat): String = buildByteArray { public fun Meta.toString(format: MetaFormat): String = buildByteArray {
format.run { writeObject(this@buildByteArray, this@toString) } format.run {
writeObject(this@buildByteArray, this@toString)
}
}.decodeToString() }.decodeToString()
public fun Meta.toString(formatFactory: MetaFormatFactory): String = toString(formatFactory()) public fun Meta.toString(formatFactory: MetaFormatFactory): String = toString(formatFactory())
public fun MetaFormat.parse(str: String): Meta { public fun MetaFormat.parse(str: String): Meta {
return ByteArrayInput(str.encodeToByteArray()).use { readObject(it) } return ByteReadPacket(str.encodeToByteArray()).use { readObject(it) }
} }
public fun MetaFormatFactory.parse(str: String, formatMeta: Meta): Meta = invoke(formatMeta).parse(str) public fun MetaFormatFactory.parse(str: String, formatMeta: Meta): Meta = invoke(formatMeta).parse(str)

View File

@ -1,4 +1,4 @@
package hep.dataforge.io package space.kscience.dataforge.io
/** /**
* An object that could respond to external messages asynchronously * An object that could respond to external messages asynchronously

View File

@ -1,16 +1,16 @@
package hep.dataforge.io package space.kscience.dataforge.io
import hep.dataforge.context.Context import io.ktor.utils.io.core.*
import hep.dataforge.io.IOFormat.Companion.META_KEY import space.kscience.dataforge.context.Context
import hep.dataforge.io.IOFormat.Companion.NAME_KEY import space.kscience.dataforge.io.IOFormat.Companion.META_KEY
import hep.dataforge.meta.Meta import space.kscience.dataforge.io.IOFormat.Companion.NAME_KEY
import hep.dataforge.meta.enum import space.kscience.dataforge.meta.Meta
import hep.dataforge.meta.get import space.kscience.dataforge.meta.enum
import hep.dataforge.meta.string import space.kscience.dataforge.meta.get
import hep.dataforge.names.Name import space.kscience.dataforge.meta.string
import hep.dataforge.names.plus import space.kscience.dataforge.names.Name
import hep.dataforge.names.toName import space.kscience.dataforge.names.plus
import kotlinx.io.* import space.kscience.dataforge.names.toName
/** /**
* A streaming-friendly envelope format with a short binary tag. * A streaming-friendly envelope format with a short binary tag.
@ -57,7 +57,6 @@ public class TaggedEnvelopeFormat(
envelope.data?.let { envelope.data?.let {
output.writeBinary(it) output.writeBinary(it)
} }
output.flush()
} }
/** /**
@ -72,7 +71,9 @@ public class TaggedEnvelopeFormat(
val metaFormat = io.resolveMetaFormat(tag.metaFormatKey) val metaFormat = io.resolveMetaFormat(tag.metaFormatKey)
?: error("Meta format with key ${tag.metaFormatKey} not found") ?: error("Meta format with key ${tag.metaFormatKey} not found")
val meta: Meta = metaFormat.readObject(input.limit(tag.metaSize.toInt())) val metaBinary = input.readBinary(tag.metaSize.toInt())
val meta: Meta = metaFormat.readObject(metaBinary)
val data = input.readBinary(tag.dataSize.toInt()) val data = input.readBinary(tag.dataSize.toInt())
@ -85,7 +86,9 @@ public class TaggedEnvelopeFormat(
val metaFormat = io.resolveMetaFormat(tag.metaFormatKey) val metaFormat = io.resolveMetaFormat(tag.metaFormatKey)
?: error("Meta format with key ${tag.metaFormatKey} not found") ?: error("Meta format with key ${tag.metaFormatKey} not found")
val meta: Meta = metaFormat.readObject(input.limit(tag.metaSize.toInt())) val metaBinary = input.readBinary(tag.metaSize.toInt())
val meta: Meta = metaFormat.readObject(metaBinary)
return PartialEnvelope(meta, version.tagSize + tag.metaSize, tag.dataSize) return PartialEnvelope(meta, version.tagSize + tag.metaSize, tag.dataSize)
@ -143,11 +146,11 @@ public class TaggedEnvelopeFormat(
return Tag(metaFormatKey, metaLength, dataLength) return Tag(metaFormatKey, metaLength, dataLength)
} }
override fun peekFormat(io: IOPlugin, input: Input): EnvelopeFormat? { override fun peekFormat(io: IOPlugin, binary: Binary): EnvelopeFormat? {
return try { return try {
input.preview { binary.read{
val header = readRawString(6) val header = readRawString(6)
return@preview when (header.substring(2..5)) { return@read when (header.substring(2..5)) {
VERSION.DF02.name -> TaggedEnvelopeFormat(io, VERSION.DF02) VERSION.DF02.name -> TaggedEnvelopeFormat(io, VERSION.DF02)
VERSION.DF03.name -> TaggedEnvelopeFormat(io, VERSION.DF03) VERSION.DF03.name -> TaggedEnvelopeFormat(io, VERSION.DF03)
else -> null else -> null

View File

@ -1,17 +1,15 @@
package hep.dataforge.io package space.kscience.dataforge.io
import hep.dataforge.context.Context import io.ktor.utils.io.core.*
import hep.dataforge.io.IOFormat.Companion.META_KEY import space.kscience.dataforge.context.Context
import hep.dataforge.io.IOFormat.Companion.NAME_KEY import space.kscience.dataforge.io.IOFormat.Companion.META_KEY
import hep.dataforge.meta.Meta import space.kscience.dataforge.io.IOFormat.Companion.NAME_KEY
import hep.dataforge.meta.get import space.kscience.dataforge.meta.Meta
import hep.dataforge.meta.isEmpty import space.kscience.dataforge.meta.get
import hep.dataforge.meta.string import space.kscience.dataforge.meta.isEmpty
import hep.dataforge.names.Name import space.kscience.dataforge.meta.string
import hep.dataforge.names.asName import space.kscience.dataforge.names.Name
import kotlinx.io.* import space.kscience.dataforge.names.asName
import kotlinx.io.text.readUtf8Line
import kotlinx.io.text.writeUtf8String
import kotlin.collections.set import kotlin.collections.set
/** /**
@ -27,7 +25,7 @@ public class TaglessEnvelopeFormat(
private val dataStart = meta[DATA_START_PROPERTY].string ?: DEFAULT_DATA_START private val dataStart = meta[DATA_START_PROPERTY].string ?: DEFAULT_DATA_START
private fun Output.writeProperty(key: String, value: Any) { private fun Output.writeProperty(key: String, value: Any) {
writeUtf8String("#? $key: $value;\r\n") writeFully("#? $key: $value;\r\n".encodeToByteArray())
} }
override fun writeEnvelope( override fun writeEnvelope(
@ -69,7 +67,7 @@ public class TaglessEnvelopeFormat(
override fun readObject(input: Input): Envelope { override fun readObject(input: Input): Envelope {
var line: String var line: String
do { do {
line = input.readUtf8Line() // ?: error("Input does not contain tagless envelope header") line = input.readSafeUtf8Line() // ?: error("Input does not contain tagless envelope header")
} while (!line.startsWith(TAGLESS_ENVELOPE_HEADER)) } while (!line.startsWith(TAGLESS_ENVELOPE_HEADER))
val properties = HashMap<String, String>() val properties = HashMap<String, String>()
@ -82,8 +80,8 @@ public class TaglessEnvelopeFormat(
properties[key] = value properties[key] = value
} }
//If can't read line, return envelope without data //If can't read line, return envelope without data
if (input.exhausted()) return SimpleEnvelope(Meta.EMPTY, null) if (input.endOfInput) return SimpleEnvelope(Meta.EMPTY, null)
line = input.readUtf8Line() line = input.readSafeUtf8Line()
} }
var meta: Meta = Meta.EMPTY var meta: Meta = Meta.EMPTY
@ -92,7 +90,7 @@ public class TaglessEnvelopeFormat(
val metaFormat = properties[META_TYPE_PROPERTY]?.let { io.resolveMetaFormat(it) } ?: JsonMetaFormat val metaFormat = properties[META_TYPE_PROPERTY]?.let { io.resolveMetaFormat(it) } ?: JsonMetaFormat
val metaSize = properties[META_LENGTH_PROPERTY]?.toInt() val metaSize = properties[META_LENGTH_PROPERTY]?.toInt()
meta = if (metaSize != null) { meta = if (metaSize != null) {
metaFormat.readObject(input.limit(metaSize)) metaFormat.readObject(input.readBinary(metaSize))
} else { } else {
metaFormat.readObject(input) metaFormat.readObject(input)
} }
@ -100,14 +98,14 @@ public class TaglessEnvelopeFormat(
do { do {
try { try {
line = input.readUtf8Line() line = input.readSafeUtf8Line()
} catch (ex: EOFException) { } catch (ex: EOFException) {
//returning an Envelope without data if end of input is reached //returning an Envelope without data if end of input is reached
return SimpleEnvelope(meta, null) return SimpleEnvelope(meta, null)
} }
} while (!line.startsWith(dataStart)) } while (!line.startsWith(dataStart))
val data: Binary? = if (properties.containsKey(DATA_LENGTH_PROPERTY)) { val data: Binary = if (properties.containsKey(DATA_LENGTH_PROPERTY)) {
input.readBinary(properties[DATA_LENGTH_PROPERTY]!!.toInt()) input.readBinary(properties[DATA_LENGTH_PROPERTY]!!.toInt())
// val bytes = ByteArray(properties[DATA_LENGTH_PROPERTY]!!.toInt()) // val bytes = ByteArray(properties[DATA_LENGTH_PROPERTY]!!.toInt())
// readByteArray(bytes) // readByteArray(bytes)
@ -125,7 +123,7 @@ public class TaglessEnvelopeFormat(
var offset = 0u var offset = 0u
var line: String var line: String
do { do {
line = input.readUtf8Line()// ?: error("Input does not contain tagless envelope header") line = input.readSafeUtf8Line()// ?: error("Input does not contain tagless envelope header")
offset += line.encodeToByteArray().size.toUInt() offset += line.encodeToByteArray().size.toUInt()
} while (!line.startsWith(TAGLESS_ENVELOPE_HEADER)) } while (!line.startsWith(TAGLESS_ENVELOPE_HEADER))
val properties = HashMap<String, String>() val properties = HashMap<String, String>()
@ -139,7 +137,7 @@ public class TaglessEnvelopeFormat(
properties[key] = value properties[key] = value
} }
try { try {
line = input.readUtf8Line() line = input.readSafeUtf8Line()
offset += line.encodeToByteArray().size.toUInt() offset += line.encodeToByteArray().size.toUInt()
} catch (ex: EOFException) { } catch (ex: EOFException) {
return PartialEnvelope(Meta.EMPTY, offset.toUInt(), 0.toULong()) return PartialEnvelope(Meta.EMPTY, offset.toUInt(), 0.toULong())
@ -153,14 +151,14 @@ public class TaglessEnvelopeFormat(
val metaSize = properties[META_LENGTH_PROPERTY]?.toInt() val metaSize = properties[META_LENGTH_PROPERTY]?.toInt()
meta = if (metaSize != null) { meta = if (metaSize != null) {
offset += metaSize.toUInt() offset += metaSize.toUInt()
metaFormat.readObject(input.limit(metaSize)) metaFormat.readObject(input.readBinary(metaSize))
} else { } else {
error("Can't partially read an envelope with undefined meta size") error("Can't partially read an envelope with undefined meta size")
} }
} }
do { do {
line = input.readUtf8Line() //?: return PartialEnvelope(Meta.EMPTY, offset.toUInt(), 0.toULong()) line = input.readSafeUtf8Line() //?: return PartialEnvelope(Meta.EMPTY, offset.toUInt(), 0.toULong())
offset += line.encodeToByteArray().size.toUInt() offset += line.encodeToByteArray().size.toUInt()
//returning an Envelope without data if end of input is reached //returning an Envelope without data if end of input is reached
} while (!line.startsWith(dataStart)) } while (!line.startsWith(dataStart))
@ -220,11 +218,11 @@ public class TaglessEnvelopeFormat(
override fun readObject(input: Input): Envelope = default.readObject(input) override fun readObject(input: Input): Envelope = default.readObject(input)
override fun peekFormat(io: IOPlugin, input: Input): EnvelopeFormat? { override fun peekFormat(io: IOPlugin, binary: Binary): EnvelopeFormat? {
return try { return try {
input.preview { binary.read {
val string = readRawString(TAGLESS_ENVELOPE_HEADER.length) val string = readRawString(TAGLESS_ENVELOPE_HEADER.length)
return@preview if (string == TAGLESS_ENVELOPE_HEADER) { return@read if (string == TAGLESS_ENVELOPE_HEADER) {
TaglessEnvelopeFormat(io) TaglessEnvelopeFormat(io)
} else { } else {
null null

View File

@ -1,21 +1,33 @@
package hep.dataforge.io package space.kscience.dataforge.io
import kotlinx.io.* import io.ktor.utils.io.charsets.Charsets
import io.ktor.utils.io.charsets.decodeExactBytes
import io.ktor.utils.io.core.*
import kotlin.math.min import kotlin.math.min
public fun Output.writeRawString(str: String) { public fun Output.writeRawString(str: String) {
str.forEach { writeByte(it.toByte()) } writeFully(str.toByteArray(Charsets.ISO_8859_1))
} }
public fun Output.writeUtf8String(str: String) {
writeFully(str.encodeToByteArray())
}
@OptIn(ExperimentalIoApi::class)
public fun Input.readRawString(size: Int): String { public fun Input.readRawString(size: Int): String {
val array = CharArray(size) { readByte().toChar() } return Charsets.ISO_8859_1.newDecoder().decodeExactBytes(this, size)
return array.concatToString()
} }
public inline fun buildByteArray(expectedSize: Int = 16, block: Output.() -> Unit): ByteArray = public fun Input.readUtf8String(): String = readBytes().decodeToString()
ByteArrayOutput(expectedSize).apply(block).toByteArray()
public fun Input.readSafeUtf8Line(): String = readUTF8Line() ?: error("Line not found")
public inline fun buildByteArray(expectedSize: Int = 16, block: Output.() -> Unit): ByteArray {
val builder = BytePacketBuilder(expectedSize)
builder.block()
return builder.build().readBytes()
}
@Suppress("FunctionName")
public inline fun Binary(expectedSize: Int = 16, block: Output.() -> Unit): Binary = public inline fun Binary(expectedSize: Int = 16, block: Output.() -> Unit): Binary =
buildByteArray(expectedSize, block).asBinary() buildByteArray(expectedSize, block).asBinary()

View File

@ -1,7 +0,0 @@
package hep.dataforge.io
import kotlinx.io.ByteArrayInput
import kotlinx.io.use
fun <T : Any> IOFormat<T>.writeToByteArray(obj: T): ByteArray = buildByteArray { writeObject(this, obj) }
fun <T : Any> IOFormat<T>.readFromByteArray(array: ByteArray): T = ByteArrayInput(array).use { readObject(it) }

View File

@ -1,8 +1,6 @@
package hep.dataforge.io package space.kscience.dataforge.io
import kotlinx.io.asBinary import io.ktor.utils.io.core.readInt
import kotlinx.io.readByte
import kotlinx.io.readInt
import kotlin.test.Test import kotlin.test.Test
import kotlin.test.assertEquals import kotlin.test.assertEquals

View File

@ -1,7 +1,7 @@
package hep.dataforge.io package space.kscience.dataforge.io
import kotlinx.io.readDouble import io.ktor.utils.io.core.readDouble
import kotlinx.io.writeDouble import io.ktor.utils.io.core.writeDouble
import kotlin.test.Test import kotlin.test.Test
import kotlin.test.assertEquals import kotlin.test.assertEquals

View File

@ -0,0 +1,17 @@
package space.kscience.dataforge.io
import io.ktor.utils.io.core.ByteReadPacket
import io.ktor.utils.io.core.readBytes
import kotlin.test.Test
import kotlin.test.assertEquals
class IOTest {
@Test
fun readBytes() {
val bytes = ByteArray(8) { it.toByte() }
val input = ByteReadPacket(bytes)
@Suppress("UNUSED_VARIABLE") val first = input.readBytes(4)
val second = input.readBytes(4)
assertEquals(4.toByte(), second[0])
}
}

View File

@ -1,11 +1,10 @@
package hep.dataforge.io package space.kscience.dataforge.io
import hep.dataforge.meta.*
import hep.dataforge.meta.JsonMeta.Companion.JSON_ARRAY_KEY
import hep.dataforge.values.ListValue
import hep.dataforge.values.number
import kotlinx.io.asBinary
import kotlinx.serialization.json.* import kotlinx.serialization.json.*
import space.kscience.dataforge.meta.*
import space.kscience.dataforge.meta.JsonMeta.Companion.JSON_ARRAY_KEY
import space.kscience.dataforge.values.ListValue
import space.kscience.dataforge.values.number
import kotlin.test.Test import kotlin.test.Test
import kotlin.test.assertEquals import kotlin.test.assertEquals

View File

@ -1,13 +1,13 @@
package hep.dataforge.io package space.kscience.dataforge.io
import hep.dataforge.meta.Meta
import hep.dataforge.meta.MetaSerializer
import hep.dataforge.meta.TypedMetaItem
import hep.dataforge.names.Name
import hep.dataforge.names.toName
import kotlinx.serialization.ExperimentalSerializationApi import kotlinx.serialization.ExperimentalSerializationApi
import kotlinx.serialization.cbor.Cbor import kotlinx.serialization.cbor.Cbor
import kotlinx.serialization.json.Json import kotlinx.serialization.json.Json
import space.kscience.dataforge.meta.Meta
import space.kscience.dataforge.meta.MetaSerializer
import space.kscience.dataforge.meta.TypedMetaItem
import space.kscience.dataforge.names.Name
import space.kscience.dataforge.names.toName
import kotlin.test.Test import kotlin.test.Test
import kotlin.test.assertEquals import kotlin.test.assertEquals

View File

@ -1,10 +1,9 @@
package hep.dataforge.io package space.kscience.dataforge.io
import hep.dataforge.context.Global import space.kscience.dataforge.context.Global
import hep.dataforge.meta.get import space.kscience.dataforge.meta.get
import hep.dataforge.meta.int import space.kscience.dataforge.meta.int
import hep.dataforge.misc.DFExperimental import space.kscience.dataforge.misc.DFExperimental
import kotlinx.io.text.writeUtf8String
import kotlin.test.Test import kotlin.test.Test
import kotlin.test.assertEquals import kotlin.test.assertEquals
import kotlin.test.assertTrue import kotlin.test.assertTrue

View File

@ -0,0 +1,12 @@
package space.kscience.dataforge.io
import io.ktor.utils.io.core.ByteReadPacket
import io.ktor.utils.io.core.use
fun <T : Any> IOFormat<T>.writeToByteArray(obj: T): ByteArray = buildByteArray {
writeObject(this, obj)
}
fun <T : Any> IOFormat<T>.readFromByteArray(array: ByteArray): T = ByteReadPacket(array).use {
readObject(it)
}

View File

@ -1,45 +0,0 @@
package hep.dataforge.io
import kotlinx.io.*
import kotlinx.io.buffer.Buffer
import kotlinx.io.buffer.set
import java.io.InputStream
import java.io.OutputStream
private class BlockingStreamInput(val source: InputStream) : Input() {
override fun closeSource() {
source.close()
}
override fun fill(buffer: Buffer, startIndex: Int, endIndex: Int): Int {
while (source.available() == 0) {
//block until input is available
}
// Zero-copy attempt
if (buffer.buffer.hasArray()) {
val result = source.read(buffer.buffer.array(), startIndex, endIndex - startIndex)
return result.coerceAtLeast(0) // -1 when IS is closed
}
for (i in startIndex until endIndex) {
val byte = source.read()
if (byte == -1) return (i - startIndex)
buffer[i] = byte.toByte()
}
return endIndex - startIndex
}
}
public fun <R> InputStream.read(size: Int, block: Input.() -> R): R {
val buffer = ByteArray(size)
read(buffer)
return buffer.asBinary().read(block = block)
}
public fun <R> InputStream.read(block: Input.() -> R): R = asInput().block()
public fun <R> InputStream.readBlocking(block: Input.() -> R): R = BlockingStreamInput(this).block()
public inline fun OutputStream.write(block: Output.() -> Unit) {
asOutput().block()
}

View File

@ -1,17 +1,42 @@
package hep.dataforge.io package space.kscience.dataforge.io
import hep.dataforge.meta.Meta import io.ktor.utils.io.core.*
import hep.dataforge.meta.descriptors.NodeDescriptor import io.ktor.utils.io.streams.asOutput
import hep.dataforge.meta.isEmpty import space.kscience.dataforge.meta.Meta
import hep.dataforge.misc.DFExperimental import space.kscience.dataforge.meta.descriptors.NodeDescriptor
import kotlinx.io.* import space.kscience.dataforge.meta.isEmpty
import space.kscience.dataforge.misc.DFExperimental
import java.nio.file.Files import java.nio.file.Files
import java.nio.file.Path import java.nio.file.Path
import java.nio.file.StandardOpenOption import java.nio.file.StandardOpenOption
import kotlin.io.path.ExperimentalPathApi
import kotlin.io.path.inputStream
import kotlin.math.min
import kotlin.reflect.full.isSupertypeOf import kotlin.reflect.full.isSupertypeOf
import kotlin.reflect.typeOf import kotlin.reflect.typeOf
import kotlin.streams.asSequence import kotlin.streams.asSequence
internal class PathBinary(
private val path: Path,
private val fileOffset: Int = 0,
override val size: Int = Files.size(path).toInt() - fileOffset,
) : Binary {
@OptIn(ExperimentalPathApi::class)
override fun <R> read(offset: Int, atMost: Int, block: Input.() -> R): R {
val actualOffset = offset + fileOffset
val actualSize = min(atMost, size - offset)
val array = path.inputStream().use {
it.skip(actualOffset.toLong())
it.readNBytes(actualSize)
}
return ByteReadPacket(array).block()
}
}
public fun Path.asBinary(): Binary = PathBinary(this)
public fun <R> Path.read(block: Input.() -> R): R = asBinary().read(block = block) public fun <R> Path.read(block: Input.() -> R): R = asBinary().read(block = block)
/** /**
@ -46,11 +71,13 @@ public fun Path.rewrite(block: Output.() -> Unit): Unit {
public fun Path.readEnvelope(format: EnvelopeFormat): Envelope { public fun Path.readEnvelope(format: EnvelopeFormat): Envelope {
val partialEnvelope: PartialEnvelope = asBinary().read { val partialEnvelope: PartialEnvelope = asBinary().read {
format.run { readPartial(this@read) } format.run {
readPartial(this@read)
}
} }
val offset: Int = partialEnvelope.dataOffset.toInt() val offset: Int = partialEnvelope.dataOffset.toInt()
val size: Int = partialEnvelope.dataSize?.toInt() ?: (Files.size(this).toInt() - offset) val size: Int = partialEnvelope.dataSize?.toInt() ?: (Files.size(this).toInt() - offset)
val binary = FileBinary(this, offset, size) val binary = PathBinary(this, offset, size)
return SimpleEnvelope(partialEnvelope.meta, binary) return SimpleEnvelope(partialEnvelope.meta, binary)
} }
@ -60,7 +87,7 @@ public fun Path.readEnvelope(format: EnvelopeFormat): Envelope {
@Suppress("UNCHECKED_CAST") @Suppress("UNCHECKED_CAST")
@DFExperimental @DFExperimental
public inline fun <reified T : Any> IOPlugin.resolveIOFormat(): IOFormat<T>? { public inline fun <reified T : Any> IOPlugin.resolveIOFormat(): IOFormat<T>? {
return ioFormatFactories.find { it.type.isSupertypeOf(typeOf<T>())} as IOFormat<T>? return ioFormatFactories.find { it.type.isSupertypeOf(typeOf<T>()) } as IOFormat<T>?
} }
/** /**
@ -119,9 +146,7 @@ public fun IOPlugin.writeMetaFile(
public fun IOPlugin.peekFileEnvelopeFormat(path: Path): EnvelopeFormat? { public fun IOPlugin.peekFileEnvelopeFormat(path: Path): EnvelopeFormat? {
val binary = path.asBinary() val binary = path.asBinary()
val formats = envelopeFormatFactories.mapNotNull { factory -> val formats = envelopeFormatFactories.mapNotNull { factory ->
binary.read { factory.peekFormat(this@peekFileEnvelopeFormat, binary)
factory.peekFormat(this@peekFileEnvelopeFormat, this@read)
}
} }
return when (formats.size) { return when (formats.size) {
@ -231,7 +256,7 @@ public fun IOPlugin.writeEnvelopeDirectory(
dataFile.write { dataFile.write {
envelope.data?.read { envelope.data?.read {
val copied = copyTo(this@write) val copied = copyTo(this@write)
if (copied != envelope.data?.size) { if (copied != envelope.data?.size?.toLong()) {
error("The number of copied bytes does not equal data size") error("The number of copied bytes does not equal data size")
} }
} }

View File

@ -0,0 +1,40 @@
package space.kscience.dataforge.io
//
//private class BlockingStreamInput(val source: InputStream) : AbstractInput() {
// override fun closeSource() {
// source.close()
// }
//
// override fun fill(destination: Memory, offset: Int, length: Int): Int {
// while (source.available() == 0) {
// //block until input is available
// }
// // Zero-copy attempt
// if (buffer.buffer.hasArray()) {
// val result = source.read(buffer.buffer.array(), startIndex, endIndex - startIndex)
// return result.coerceAtLeast(0) // -1 when IS is closed
// }
//
// for (i in startIndex until endIndex) {
// val byte = source.read()
// if (byte == -1) return (i - startIndex)
// buffer[i] = byte.toByte()
// }
// return endIndex - startIndex
// }
//}
//
//public fun <R> InputStream.read(size: Int, block: Input.() -> R): R {
// val buffer = ByteArray(size)
// read(buffer)
// return buffer.asBinary().read(block = block)
//}
//
//public fun <R> InputStream.read(block: Input.() -> R): R = asInput().block()
//
//public fun <R> InputStream.readBlocking(block: Input.() -> R): R = BlockingStreamInput(this).block()
//
//public inline fun OutputStream.write(block: Output.() -> Unit) {
// asOutput().block()
//}

View File

@ -1,2 +1,2 @@
hep.dataforge.io.BinaryMetaFormatFactory space.kscience.dataforge.io.BinaryMetaFormatFactory
hep.dataforge.io.JsonMetaFormatFactory space.kscience.dataforge.io.JsonMetaFormatFactory

View File

@ -1,10 +1,8 @@
package hep.dataforge.io package space.kscience.dataforge.io
import hep.dataforge.context.Global import io.ktor.utils.io.core.writeDouble
import hep.dataforge.misc.DFExperimental import space.kscience.dataforge.context.Global
import kotlinx.io.asBinary import space.kscience.dataforge.misc.DFExperimental
import kotlinx.io.toByteArray
import kotlinx.io.writeDouble
import java.nio.file.Files import java.nio.file.Files
import kotlin.test.Test import kotlin.test.Test
import kotlin.test.assertEquals import kotlin.test.assertEquals
@ -15,7 +13,7 @@ class FileBinaryTest {
"a" put "AAA" "a" put "AAA"
"b" put 22.2 "b" put 22.2
} }
dataType = "hep.dataforge.test" dataType = "space.kscience.dataforge.test"
dataID = "myData" // добавил только что dataID = "myData" // добавил только что
data { data {
writeDouble(16.7) writeDouble(16.7)
@ -37,7 +35,7 @@ class FileBinaryTest {
"a" put "AAA" "a" put "AAA"
"b" put 22.2 "b" put 22.2
} }
dataType = "hep.dataforge.satellite" dataType = "space.kscience.dataforge.satellite"
dataID = "cellDepositTest" dataID = "cellDepositTest"
data = dataFile.asBinary() data = dataFile.asBinary()
} }

View File

@ -1,8 +1,8 @@
package hep.dataforge.io package space.kscience.dataforge.io
import hep.dataforge.context.Global import io.ktor.utils.io.core.writeDouble
import hep.dataforge.misc.DFExperimental import space.kscience.dataforge.context.Global
import kotlinx.io.writeDouble import space.kscience.dataforge.misc.DFExperimental
import java.nio.file.Files import java.nio.file.Files
import kotlin.test.Test import kotlin.test.Test
import kotlin.test.assertTrue import kotlin.test.assertTrue
@ -15,11 +15,10 @@ class FileEnvelopeTest {
"a" put "AAA" "a" put "AAA"
"b" put 22.2 "b" put 22.2
} }
dataType = "hep.dataforge.test" dataType = "space.kscience.dataforge.test"
dataID = "myData" // добавил только что dataID = "myData" // добавил только что
data { data {
writeDouble(16.7) writeDouble(16.7)
} }
} }

File diff suppressed because it is too large Load Diff

View File

@ -1,6 +1,6 @@
plugins { plugins {
id("ru.mipt.npm.mpp") id("ru.mipt.npm.gradle.mpp")
id("ru.mipt.npm.native") id("ru.mipt.npm.gradle.native")
} }
kscience { kscience {

View File

@ -1,14 +1,14 @@
package hep.dataforge.meta package space.kscience.dataforge.meta
import hep.dataforge.names.Name
import hep.dataforge.names.NameToken
import hep.dataforge.names.asName
import hep.dataforge.names.plus
import kotlinx.serialization.KSerializer import kotlinx.serialization.KSerializer
import kotlinx.serialization.Serializable import kotlinx.serialization.Serializable
import kotlinx.serialization.descriptors.SerialDescriptor import kotlinx.serialization.descriptors.SerialDescriptor
import kotlinx.serialization.encoding.Decoder import kotlinx.serialization.encoding.Decoder
import kotlinx.serialization.encoding.Encoder import kotlinx.serialization.encoding.Encoder
import space.kscience.dataforge.names.Name
import space.kscience.dataforge.names.NameToken
import space.kscience.dataforge.names.asName
import space.kscience.dataforge.names.plus
import kotlin.collections.set import kotlin.collections.set
import kotlin.jvm.Synchronized import kotlin.jvm.Synchronized

View File

@ -1,7 +1,7 @@
package hep.dataforge.meta package space.kscience.dataforge.meta
import hep.dataforge.misc.DFBuilder import space.kscience.dataforge.misc.DFBuilder
import hep.dataforge.names.Name import space.kscience.dataforge.names.Name
import kotlin.properties.ReadWriteProperty import kotlin.properties.ReadWriteProperty
/** /**

View File

@ -1,9 +1,9 @@
package hep.dataforge.meta package space.kscience.dataforge.meta
import hep.dataforge.meta.transformations.MetaConverter import space.kscience.dataforge.meta.transformations.MetaConverter
import hep.dataforge.names.Name import space.kscience.dataforge.names.Name
import hep.dataforge.names.asName import space.kscience.dataforge.names.asName
import hep.dataforge.values.Value import space.kscience.dataforge.values.Value
import kotlin.properties.ReadOnlyProperty import kotlin.properties.ReadOnlyProperty
/* Meta delegates */ /* Meta delegates */

View File

@ -1,6 +1,6 @@
package hep.dataforge.meta package space.kscience.dataforge.meta
import hep.dataforge.names.* import space.kscience.dataforge.names.*
public fun interface ItemProvider { public fun interface ItemProvider {
//getItem used instead of get in order to provide extension freedom //getItem used instead of get in order to provide extension freedom

View File

@ -1,16 +1,16 @@
@file:Suppress("UNUSED_PARAMETER") @file:Suppress("UNUSED_PARAMETER")
package hep.dataforge.meta package space.kscience.dataforge.meta
import hep.dataforge.meta.JsonMeta.Companion.JSON_ARRAY_KEY
import hep.dataforge.meta.descriptors.ItemDescriptor
import hep.dataforge.meta.descriptors.ItemDescriptor.Companion.DEFAULT_INDEX_KEY
import hep.dataforge.meta.descriptors.NodeDescriptor
import hep.dataforge.meta.descriptors.ValueDescriptor
import hep.dataforge.names.NameToken
import hep.dataforge.names.withIndex
import hep.dataforge.values.*
import kotlinx.serialization.json.* import kotlinx.serialization.json.*
import space.kscience.dataforge.meta.JsonMeta.Companion.JSON_ARRAY_KEY
import space.kscience.dataforge.meta.descriptors.ItemDescriptor
import space.kscience.dataforge.meta.descriptors.ItemDescriptor.Companion.DEFAULT_INDEX_KEY
import space.kscience.dataforge.meta.descriptors.NodeDescriptor
import space.kscience.dataforge.meta.descriptors.ValueDescriptor
import space.kscience.dataforge.names.NameToken
import space.kscience.dataforge.names.withIndex
import space.kscience.dataforge.values.*
/** /**

View File

@ -1,7 +1,7 @@
package hep.dataforge.meta package space.kscience.dataforge.meta
import hep.dataforge.names.Name import space.kscience.dataforge.names.Name
import hep.dataforge.names.NameToken import space.kscience.dataforge.names.NameToken
/** /**
* A meta laminate consisting of multiple immutable meta layers. For mutable front layer, use [Scheme]. * A meta laminate consisting of multiple immutable meta layers. For mutable front layer, use [Scheme].

View File

@ -1,8 +1,8 @@
package hep.dataforge.meta package space.kscience.dataforge.meta
import hep.dataforge.names.*
import hep.dataforge.values.Value
import kotlinx.serialization.Serializable import kotlinx.serialization.Serializable
import space.kscience.dataforge.names.*
import space.kscience.dataforge.values.Value
/** /**

Some files were not shown because too many files have changed in this diff Show More