diff --git a/.gitignore b/.gitignore index a1d8904..27697d7 100644 --- a/.gitignore +++ b/.gitignore @@ -1,66 +1,54 @@ -*.o -*.a -*.dSYM -*.csv -*.out -*.png -*.so -*.exe -*.dll -*.lib -*.dylib -*.pyc -mnist/ -data/ -caffe/ -grasp/ -images/ -opencv/ -convnet/ -decaf/ -submission/ -cfg/ -temp/ -build/darknet/* -build_*/ -ninja/ -ninja.zip -vcpkg_installed/ -!build/darknet/YoloWrapper.cs -.fuse* -*.weights -build/*.cmake -build/*.ninja -build/*.txt -build/*.json -build/CMakeFiles/ -build/detect_cuda_compute_capabilities.cu -build/.ninja_deps -build/.ninja_log -build/Makefile -*/vcpkg-manifest-install.log -build.log -__pycache__/ +# Bloody frontend +node_modules +bower_components + +# VSCode +.vscode -# OS Generated # -.DS_Store* -ehthumbs.db -Icon? -Thumbs.db -*.swp +# Ignore Visual Studio files +*.obj +*.pdb +*.user +*.aps +*.pch +*.vspscc +*_i.c +*_p.c +*.ncb +*.suo +*.tlb +*.cache +*.tlh +*.bak +*.cache +*.ilk +*.log +*.lib +*.sbr +*.scc +*.dbmdl +*.nupkg +*.p7s +*.sln.ide +*.onnx +[Bb]in +[Dd]ebug*/ +[Oo]bj/ +[Rr]elease*/ +_ReSharper*/ +[Tt]est[Rr]esult* +TestsResult.html +[Bb]uild[Ll]og.* +*.[Pp]ublish.xml +[Tt]humbs.db -# IDE generated # -.vs/ -.vscode/ +# NuGet +/packages/ +**/packages/* +!**/packages/build/ -# Managed by CMake -src/version.h +# Build +/artifacts/ -# Build artifacts -lib/ -share/ -include/darknet/ -uselib -uselib_track -darknet -vcpkg/ +.localhistory +.vs/ \ No newline at end of file diff --git a/src/Sleopok/Sleopok.App/bin/Debug/net8.0/Sleopok.App.deps.json b/src/Sleopok/Sleopok.App/bin/Debug/net8.0/Sleopok.App.deps.json index bf57bd7..2c963f0 100644 --- a/src/Sleopok/Sleopok.App/bin/Debug/net8.0/Sleopok.App.deps.json +++ b/src/Sleopok/Sleopok.App/bin/Debug/net8.0/Sleopok.App.deps.json @@ -7,9 +7,25 @@ "targets": { ".NETCoreApp,Version=v8.0": { "Sleopok.App/1.0.0": { + "dependencies": { + "Sleopok.Engine": "1.0.0" + }, "runtime": { "Sleopok.App.dll": {} } + }, + "Sleopok.Engine/1.0.0": { + "dependencies": { + "ZeroLevel": "3.4.0.8" + }, + "runtime": { + "Sleopok.Engine.dll": {} + } + }, + "ZeroLevel/3.4.0.8": { + "runtime": { + "ZeroLevel.dll": {} + } } } }, @@ -18,6 +34,16 @@ "type": "project", "serviceable": false, "sha512": "" + }, + "Sleopok.Engine/1.0.0": { + "type": "project", + "serviceable": false, + "sha512": "" + }, + "ZeroLevel/3.4.0.8": { + "type": "project", + "serviceable": false, + "sha512": "" } } } \ No newline at end of file diff --git a/src/Sleopok/Sleopok.App/bin/Debug/net8.0/Sleopok.App.pdb b/src/Sleopok/Sleopok.App/bin/Debug/net8.0/Sleopok.App.pdb index e18a6fb..ed5a12e 100644 Binary files a/src/Sleopok/Sleopok.App/bin/Debug/net8.0/Sleopok.App.pdb and b/src/Sleopok/Sleopok.App/bin/Debug/net8.0/Sleopok.App.pdb differ diff --git a/src/Sleopok/Sleopok.App/obj/Debug/net8.0/Sleopok.App.AssemblyInfo.cs b/src/Sleopok/Sleopok.App/obj/Debug/net8.0/Sleopok.App.AssemblyInfo.cs index 37ea88b..6be55c4 100644 --- a/src/Sleopok/Sleopok.App/obj/Debug/net8.0/Sleopok.App.AssemblyInfo.cs +++ b/src/Sleopok/Sleopok.App/obj/Debug/net8.0/Sleopok.App.AssemblyInfo.cs @@ -14,7 +14,7 @@ using System.Reflection; [assembly: System.Reflection.AssemblyCompanyAttribute("Sleopok.App")] [assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] [assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] -[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+7640df5cc809fe8cc6f1d9b9a6217212fefaed1f")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+fedfec2a4cc01029334d8899a839502b8990face")] [assembly: System.Reflection.AssemblyProductAttribute("Sleopok.App")] [assembly: System.Reflection.AssemblyTitleAttribute("Sleopok.App")] [assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] diff --git a/src/Sleopok/Sleopok.App/obj/Debug/net8.0/Sleopok.App.AssemblyInfoInputs.cache b/src/Sleopok/Sleopok.App/obj/Debug/net8.0/Sleopok.App.AssemblyInfoInputs.cache index a460baa..0e1f2f3 100644 --- a/src/Sleopok/Sleopok.App/obj/Debug/net8.0/Sleopok.App.AssemblyInfoInputs.cache +++ b/src/Sleopok/Sleopok.App/obj/Debug/net8.0/Sleopok.App.AssemblyInfoInputs.cache @@ -1 +1 @@ -d8b06ec6e68c19fe6706483b922cb556bc7a89a968b82d3f71aad430a8fb84fb +5560cd1002dbe4539f9e43ae46cbe690145b0a4b2edd4a4eed18fabd21a0c27c diff --git a/src/Sleopok/Sleopok.App/obj/Debug/net8.0/Sleopok.App.assets.cache b/src/Sleopok/Sleopok.App/obj/Debug/net8.0/Sleopok.App.assets.cache index 0a0d0e5..26941fa 100644 Binary files a/src/Sleopok/Sleopok.App/obj/Debug/net8.0/Sleopok.App.assets.cache and b/src/Sleopok/Sleopok.App/obj/Debug/net8.0/Sleopok.App.assets.cache differ diff --git a/src/Sleopok/Sleopok.App/obj/Debug/net8.0/Sleopok.App.csproj.AssemblyReference.cache b/src/Sleopok/Sleopok.App/obj/Debug/net8.0/Sleopok.App.csproj.AssemblyReference.cache index 076ae1e..39e5779 100644 Binary files a/src/Sleopok/Sleopok.App/obj/Debug/net8.0/Sleopok.App.csproj.AssemblyReference.cache and b/src/Sleopok/Sleopok.App/obj/Debug/net8.0/Sleopok.App.csproj.AssemblyReference.cache differ diff --git a/src/Sleopok/Sleopok.App/obj/Debug/net8.0/Sleopok.App.csproj.CoreCompileInputs.cache b/src/Sleopok/Sleopok.App/obj/Debug/net8.0/Sleopok.App.csproj.CoreCompileInputs.cache index fad575f..499bc26 100644 --- a/src/Sleopok/Sleopok.App/obj/Debug/net8.0/Sleopok.App.csproj.CoreCompileInputs.cache +++ b/src/Sleopok/Sleopok.App/obj/Debug/net8.0/Sleopok.App.csproj.CoreCompileInputs.cache @@ -1 +1 @@ -a2e308b4ff36099adb277b73d1c52b3408af94527cd7ccc25e5a636640e0c29e +04a50ceab159ea786c56ba8ea60d0513868855b532afb5140660b2b597b148c8 diff --git a/src/Sleopok/Sleopok.App/obj/Debug/net8.0/Sleopok.App.csproj.FileListAbsolute.txt b/src/Sleopok/Sleopok.App/obj/Debug/net8.0/Sleopok.App.csproj.FileListAbsolute.txt index f2740c5..91bda6b 100644 --- a/src/Sleopok/Sleopok.App/obj/Debug/net8.0/Sleopok.App.csproj.FileListAbsolute.txt +++ b/src/Sleopok/Sleopok.App/obj/Debug/net8.0/Sleopok.App.csproj.FileListAbsolute.txt @@ -23,3 +23,9 @@ G:\Documents\GitHub\sleopok\src\Sleopok\Sleopok.App\obj\Debug\net8.0\refint\Sleo G:\Documents\GitHub\sleopok\src\Sleopok\Sleopok.App\obj\Debug\net8.0\Sleopok.App.pdb G:\Documents\GitHub\sleopok\src\Sleopok\Sleopok.App\obj\Debug\net8.0\Sleopok.App.genruntimeconfig.cache G:\Documents\GitHub\sleopok\src\Sleopok\Sleopok.App\obj\Debug\net8.0\ref\Sleopok.App.dll +G:\Documents\GitHub\sleopok\src\Sleopok\Sleopok.App\bin\Debug\net8.0\Sleopok.Engine.dll +G:\Documents\GitHub\sleopok\src\Sleopok\Sleopok.App\bin\Debug\net8.0\ZeroLevel.dll +G:\Documents\GitHub\sleopok\src\Sleopok\Sleopok.App\bin\Debug\net8.0\Sleopok.Engine.pdb +G:\Documents\GitHub\sleopok\src\Sleopok\Sleopok.App\bin\Debug\net8.0\ZeroLevel.pdb +G:\Documents\GitHub\sleopok\src\Sleopok\Sleopok.App\obj\Debug\net8.0\Sleopok.App.csproj.AssemblyReference.cache +G:\Documents\GitHub\sleopok\src\Sleopok\Sleopok.App\obj\Debug\net8.0\Sleopok..828B5A2C.Up2Date diff --git a/src/Sleopok/Sleopok.App/obj/Debug/net8.0/Sleopok.App.pdb b/src/Sleopok/Sleopok.App/obj/Debug/net8.0/Sleopok.App.pdb index e18a6fb..ed5a12e 100644 Binary files a/src/Sleopok/Sleopok.App/obj/Debug/net8.0/Sleopok.App.pdb and b/src/Sleopok/Sleopok.App/obj/Debug/net8.0/Sleopok.App.pdb differ diff --git a/src/Sleopok/Sleopok.App/obj/Sleopok.App.csproj.nuget.dgspec.json b/src/Sleopok/Sleopok.App/obj/Sleopok.App.csproj.nuget.dgspec.json index 6e025fc..f1892a6 100644 --- a/src/Sleopok/Sleopok.App/obj/Sleopok.App.csproj.nuget.dgspec.json +++ b/src/Sleopok/Sleopok.App/obj/Sleopok.App.csproj.nuget.dgspec.json @@ -4,6 +4,71 @@ "G:\\Documents\\GitHub\\sleopok\\src\\Sleopok\\Sleopok.App\\Sleopok.App.csproj": {} }, "projects": { + "F:\\Documents\\GitHub\\Zero\\ZeroLevel\\ZeroLevel.csproj": { + "version": "3.4.0.8", + "restore": { + "projectUniqueName": "F:\\Documents\\GitHub\\Zero\\ZeroLevel\\ZeroLevel.csproj", + "projectName": "ZeroLevel", + "projectPath": "F:\\Documents\\GitHub\\Zero\\ZeroLevel\\ZeroLevel.csproj", + "packagesPath": "C:\\Users\\Ogoun\\.nuget\\packages\\", + "outputPath": "F:\\Documents\\GitHub\\Zero\\ZeroLevel\\obj\\", + "projectStyle": "PackageReference", + "fallbackFolders": [ + "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages" + ], + "configFilePaths": [ + "C:\\Users\\Ogoun\\AppData\\Roaming\\NuGet\\NuGet.Config", + "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.FallbackLocation.config", + "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config" + ], + "originalTargetFrameworks": [ + "net8.0" + ], + "sources": { + "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {}, + "C:\\Program Files\\dotnet\\library-packs": {}, + "https://api.nuget.org/v3/index.json": {} + }, + "frameworks": { + "net8.0": { + "targetAlias": "net8.0", + "projectReferences": {} + } + }, + "warningProperties": { + "warnAsError": [ + "NU1605" + ] + }, + "restoreAuditProperties": { + "enableAudit": "true", + "auditLevel": "low", + "auditMode": "direct" + } + }, + "frameworks": { + "net8.0": { + "targetAlias": "net8.0", + "imports": [ + "net461", + "net462", + "net47", + "net471", + "net472", + "net48", + "net481" + ], + "assetTargetFallback": true, + "warn": true, + "frameworkReferences": { + "Microsoft.NETCore.App": { + "privateAssets": "all" + } + }, + "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\8.0.200/PortableRuntimeIdentifierGraph.json" + } + } + }, "G:\\Documents\\GitHub\\sleopok\\src\\Sleopok\\Sleopok.App\\Sleopok.App.csproj": { "version": "1.0.0", "restore": { @@ -104,7 +169,11 @@ "frameworks": { "net8.0": { "targetAlias": "net8.0", - "projectReferences": {} + "projectReferences": { + "F:\\Documents\\GitHub\\Zero\\ZeroLevel\\ZeroLevel.csproj": { + "projectPath": "F:\\Documents\\GitHub\\Zero\\ZeroLevel\\ZeroLevel.csproj" + } + } } }, "warningProperties": { @@ -121,12 +190,6 @@ "frameworks": { "net8.0": { "targetAlias": "net8.0", - "dependencies": { - "ZeroLevel": { - "target": "Package", - "version": "[3.4.0.8, )" - } - }, "imports": [ "net461", "net462", diff --git a/src/Sleopok/Sleopok.App/obj/project.assets.json b/src/Sleopok/Sleopok.App/obj/project.assets.json index dd554b5..2985c4e 100644 --- a/src/Sleopok/Sleopok.App/obj/project.assets.json +++ b/src/Sleopok/Sleopok.App/obj/project.assets.json @@ -2,22 +2,6 @@ "version": 3, "targets": { "net8.0": { - "ZeroLevel/3.4.0.8": { - "type": "package", - "compile": { - "lib/net6.0/ZeroLevel.dll": {} - }, - "runtime": { - "lib/net6.0/ZeroLevel.dll": {} - }, - "contentFiles": { - "contentFiles/any/any/_._": { - "buildAction": "None", - "codeLanguage": "any", - "copyToOutput": false - } - } - }, "Sleopok.Engine/1.0.0": { "type": "project", "framework": ".NETCoreApp,Version=v8.0", @@ -30,29 +14,29 @@ "runtime": { "bin/placeholder/Sleopok.Engine.dll": {} } + }, + "ZeroLevel/3.4.0.8": { + "type": "project", + "framework": ".NETCoreApp,Version=v8.0", + "compile": { + "bin/placeholder/ZeroLevel.dll": {} + }, + "runtime": { + "bin/placeholder/ZeroLevel.dll": {} + } } } }, "libraries": { - "ZeroLevel/3.4.0.8": { - "sha512": "zPyHKeeX9M96BPqXcS+MKnUbF1EWPUusz4i2Ij9UiF+HTU85MtCKW3MQZx2O6vVtRtRbD20OoKGwn7/vvXFTgw==", - "type": "package", - "path": "zerolevel/3.4.0.8", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "content/zero.ico", - "contentFiles/any/net6.0/zero.ico", - "lib/net6.0/ZeroLevel.dll", - "zero.png", - "zerolevel.3.4.0.8.nupkg.sha512", - "zerolevel.nuspec" - ] - }, "Sleopok.Engine/1.0.0": { "type": "project", "path": "../Sleopok.Engine/Sleopok.Engine.csproj", "msbuildProject": "../Sleopok.Engine/Sleopok.Engine.csproj" + }, + "ZeroLevel/3.4.0.8": { + "type": "project", + "path": "F:\\Documents\\GitHub\\Zero\\ZeroLevel\\ZeroLevel.csproj", + "msbuildProject": "F:\\Documents\\GitHub\\Zero\\ZeroLevel\\ZeroLevel.csproj" } }, "projectFileDependencyGroups": { diff --git a/src/Sleopok/Sleopok.App/obj/project.nuget.cache b/src/Sleopok/Sleopok.App/obj/project.nuget.cache index bf8166b..eb20dd8 100644 --- a/src/Sleopok/Sleopok.App/obj/project.nuget.cache +++ b/src/Sleopok/Sleopok.App/obj/project.nuget.cache @@ -1,6 +1,6 @@ { "version": 2, - "dgSpecHash": "QszXmS4jTB4/g81c5S0k5kmgKnYAstc+y85p97SGB7JZRRsitubhahL4kk4pmvMhw3dptCd7nB0TUequ444V3w==", + "dgSpecHash": "Dmtpz+2osvmz8JOFw1GA1Q3x2c//LvNmNR6aOjKSN8FYkifQV2lGZI5C+urTZRWkYrAO2KQVBLcOxIs3/gAHMA==", "success": true, "projectFilePath": "G:\\Documents\\GitHub\\sleopok\\src\\Sleopok\\Sleopok.App\\Sleopok.App.csproj", "expectedPackageFiles": [ diff --git a/src/Sleopok/Sleopok.Engine/BaseIndexer.cs b/src/Sleopok/Sleopok.Engine/BaseIndexer.cs deleted file mode 100644 index f3b1189..0000000 --- a/src/Sleopok/Sleopok.Engine/BaseIndexer.cs +++ /dev/null @@ -1,12 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace Sleopok.Engine -{ - internal class BaseIndexer - { - } -} diff --git a/src/Sleopok/Sleopok.Engine/DataStorage.cs b/src/Sleopok/Sleopok.Engine/DataStorage.cs deleted file mode 100644 index d3e9c75..0000000 --- a/src/Sleopok/Sleopok.Engine/DataStorage.cs +++ /dev/null @@ -1,12 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace Sleopok.Engine -{ - internal class DataStorage - { - } -} diff --git a/src/Sleopok/Sleopok.Engine/Engine.cs b/src/Sleopok/Sleopok.Engine/Engine.cs deleted file mode 100644 index 40d8d39..0000000 --- a/src/Sleopok/Sleopok.Engine/Engine.cs +++ /dev/null @@ -1,15 +0,0 @@ -namespace Sleopok.Engine -{ - public class Engine - { - public IIndexBuilder CreateBuilder(IndexOptions options) - { - return null; - } - - public IIndexReader CreateReader(IndexOptions options) - { - return null; - } - } -} diff --git a/src/Sleopok/Sleopok.Engine/IIndexBuilder.cs b/src/Sleopok/Sleopok.Engine/IIndexBuilder.cs deleted file mode 100644 index 4aed52c..0000000 --- a/src/Sleopok/Sleopok.Engine/IIndexBuilder.cs +++ /dev/null @@ -1,12 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace Sleopok.Engine -{ - public interface IIndexBuilder - { - } -} diff --git a/src/Sleopok/Sleopok.Engine/IIndexReader.cs b/src/Sleopok/Sleopok.Engine/IIndexReader.cs deleted file mode 100644 index acc5871..0000000 --- a/src/Sleopok/Sleopok.Engine/IIndexReader.cs +++ /dev/null @@ -1,12 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace Sleopok.Engine -{ - public interface IIndexReader - { - } -} diff --git a/src/Sleopok/Sleopok.Engine/IndexOptions.cs b/src/Sleopok/Sleopok.Engine/IndexOptions.cs deleted file mode 100644 index 1114d12..0000000 --- a/src/Sleopok/Sleopok.Engine/IndexOptions.cs +++ /dev/null @@ -1,9 +0,0 @@ -namespace Sleopok.Engine -{ - public sealed class IndexOptions - { - public string IndexName { get; set; } - public string IndexPath { get; set; } - public Dictionary> Mapping { get; set; } - } -} diff --git a/src/Sleopok/Sleopok.Engine/Models/IndexInfo.cs b/src/Sleopok/Sleopok.Engine/Models/IndexInfo.cs new file mode 100644 index 0000000..b960a90 --- /dev/null +++ b/src/Sleopok/Sleopok.Engine/Models/IndexInfo.cs @@ -0,0 +1,57 @@ +using System.Reflection; +using ZeroLevel; +using ZeroLevel.Services.FileSystem; +using ZeroLevel.Services.Reflection; + +namespace Sleopok.Engine.Models +{ + internal class IndexInfo + { + private readonly Func _identityExtractor; + private readonly List _fields; + + public string GetId(T item) => _identityExtractor.Invoke(item); + + public IReadOnlyCollection Fields => _fields; + + public IndexInfo(Func identityExtractor) + { + _identityExtractor = identityExtractor; + _fields = new List(); + typeof(T).GetMembers( + BindingFlags.Public | + BindingFlags.FlattenHierarchy | + BindingFlags.GetField | + BindingFlags.GetProperty | + BindingFlags.Instance). + Do(members => + { + foreach (var member in members) + { + var sleoAttribute = member.GetCustomAttribute(); + if (sleoAttribute == null) continue; + + Func getter; + switch (member.MemberType) + { + case MemberTypes.Field: + getter = TypeGetterSetterBuilder.BuildGetter(member as FieldInfo); + break; + case MemberTypes.Property: + getter = TypeGetterSetterBuilder.BuildGetter(member as PropertyInfo); + break; + default: return; + } + var name = FSUtils.FileNameCorrection(string.IsNullOrWhiteSpace(sleoAttribute.Name) ? member.Name : sleoAttribute.Name); + _fields.Add(new SleoField + { + Boost = sleoAttribute.Boost, + Name = name, + Getter = getter, + ExactMatch = sleoAttribute.AvaliableForExactMatch + }); + } + }); + } + } +} diff --git a/src/Sleopok/Sleopok.Engine/Models/SleoField.cs b/src/Sleopok/Sleopok.Engine/Models/SleoField.cs new file mode 100644 index 0000000..02b559f --- /dev/null +++ b/src/Sleopok/Sleopok.Engine/Models/SleoField.cs @@ -0,0 +1,10 @@ +namespace Sleopok.Engine.Models +{ + internal sealed class SleoField + { + public string Name; + public float Boost; + public bool ExactMatch; + public Func Getter; + } +} diff --git a/src/Sleopok/Sleopok.Engine/Models/SleoIndexAttribute.cs b/src/Sleopok/Sleopok.Engine/Models/SleoIndexAttribute.cs new file mode 100644 index 0000000..2460239 --- /dev/null +++ b/src/Sleopok/Sleopok.Engine/Models/SleoIndexAttribute.cs @@ -0,0 +1,17 @@ +namespace Sleopok.Engine.Models +{ + public sealed class SleoIndexAttribute + : Attribute + { + public string Name { get; private set; } + public float Boost { get; private set; } = 1.0f; + public bool AvaliableForExactMatch { get; private set; } = false; + + public SleoIndexAttribute(string name, float boost = 1.0f, bool avaliableForExactMatch = false) + { + Name = name; + Boost = boost; + AvaliableForExactMatch = avaliableForExactMatch; + } + } +} diff --git a/src/Sleopok/Sleopok.Engine/Compressor.cs b/src/Sleopok/Sleopok.Engine/Services/Compressor.cs similarity index 70% rename from src/Sleopok/Sleopok.Engine/Compressor.cs rename to src/Sleopok/Sleopok.Engine/Services/Compressor.cs index 4c0fa4a..f0bd62b 100644 --- a/src/Sleopok/Sleopok.Engine/Compressor.cs +++ b/src/Sleopok/Sleopok.Engine/Services/Compressor.cs @@ -1,9 +1,9 @@ using System.IO.Compression; -using System.Text; +using ZeroLevel.Services.Serialization; -namespace Sleopok.Engine +namespace Sleopok.Engine.Services { - internal static class Compressor + public static class Compressor { private static void CopyTo(Stream src, Stream dest) { @@ -15,6 +15,17 @@ namespace Sleopok.Engine } } + public static byte[] Compress(string[] documents) + { + return Compress(MessageSerializer.SerializeCompatible(documents)); + } + + public static string[] DecompressToDocuments(byte[] data) + { + var bytes = Decompress(data); + return MessageSerializer.DeserializeCompatible(bytes); + } + public static byte[] Compress(byte[] data) { using (var msi = new MemoryStream(data)) diff --git a/src/Sleopok/Sleopok.Engine/Services/Indexes/IIndexBuilder.cs b/src/Sleopok/Sleopok.Engine/Services/Indexes/IIndexBuilder.cs new file mode 100644 index 0000000..7ee6428 --- /dev/null +++ b/src/Sleopok/Sleopok.Engine/Services/Indexes/IIndexBuilder.cs @@ -0,0 +1,9 @@ +namespace Sleopok.Engine.Services.Indexes +{ + public interface IIndexBuilder + : IDisposable + { + Task Write(IEnumerable batch); + Task Complete(); + } +} diff --git a/src/Sleopok/Sleopok.Engine/Services/Indexes/IIndexReader.cs b/src/Sleopok/Sleopok.Engine/Services/Indexes/IIndexReader.cs new file mode 100644 index 0000000..44ef7ba --- /dev/null +++ b/src/Sleopok/Sleopok.Engine/Services/Indexes/IIndexReader.cs @@ -0,0 +1,7 @@ +namespace Sleopok.Engine.Services.Indexes +{ + public interface IIndexReader + { + Task> Search(string[] tokens, bool exactMatch); + } +} diff --git a/src/Sleopok/Sleopok.Engine/Services/Indexes/IndexBuilder.cs b/src/Sleopok/Sleopok.Engine/Services/Indexes/IndexBuilder.cs new file mode 100644 index 0000000..836180a --- /dev/null +++ b/src/Sleopok/Sleopok.Engine/Services/Indexes/IndexBuilder.cs @@ -0,0 +1,55 @@ +using Sleopok.Engine.Models; +using Sleopok.Engine.Services.Storage; + +namespace Sleopok.Engine.Services.Indexes +{ + internal sealed class IndexBuilder + : IIndexBuilder + { + private readonly DataStorage _storage; + private readonly IndexInfo _indexInfo; + private readonly Dictionary Indexers = new Dictionary(); + public IndexBuilder(DataStorage storage, IndexInfo indexInfo) + { + _storage = storage; + _indexInfo = indexInfo; + foreach (var field in indexInfo.Fields) + { + Indexers[field.Name] = _storage.GetWriter(field.Name); + } + } + + public async Task Complete() + { + foreach (var i in Indexers) + { + await i.Value.Complete(); + i.Value.Dispose(); + } + } + + public async Task Write(IEnumerable batch) + { + foreach (var doc in batch) + { + var doc_id = _indexInfo.GetId(doc); + foreach (var field in _indexInfo.Fields) + { + var value = field.Getter(doc).ToString(); + if (string.IsNullOrWhiteSpace(value) == false) + { + foreach (var t in value.Split(' ')) + { + await Indexers[field.Name].Write(t, doc_id); + } + } + } + } + } + + public void Dispose() + { + Complete().Wait(); + } + } +} diff --git a/src/Sleopok/Sleopok.Engine/Services/Indexes/IndexReader.cs b/src/Sleopok/Sleopok.Engine/Services/Indexes/IndexReader.cs new file mode 100644 index 0000000..9227e2c --- /dev/null +++ b/src/Sleopok/Sleopok.Engine/Services/Indexes/IndexReader.cs @@ -0,0 +1,44 @@ +using Sleopok.Engine.Models; +using Sleopok.Engine.Services.Storage; + +namespace Sleopok.Engine.Services.Indexes +{ + internal sealed class IndexReader + : IIndexReader + { + private readonly DataStorage _storage; + private readonly IndexInfo _indexInfo; + public IndexReader(DataStorage storage, IndexInfo indexInfo) + { + _storage = storage; + _indexInfo = indexInfo; + } + + public async Task> Search(string[] tokens, bool exactMatch) + { + var documents = new Dictionary(); + + foreach (var field in _indexInfo.Fields) + { + if (exactMatch && field.ExactMatch == false) + continue; + var docs = await _storage.GetDocuments(field.Name, tokens, field.Boost, exactMatch); + foreach (var doc in docs) + { + if (doc.Value > 0.0001f) + { + if (documents.ContainsKey(doc.Key) == false) + { + documents[doc.Key] = doc.Value; + } + else + { + documents[doc.Key] += doc.Value; + } + } + } + } + return documents; + } + } +} diff --git a/src/Sleopok/Sleopok.Engine/Services/Storage/DataStorage.cs b/src/Sleopok/Sleopok.Engine/Services/Storage/DataStorage.cs new file mode 100644 index 0000000..8af7607 --- /dev/null +++ b/src/Sleopok/Sleopok.Engine/Services/Storage/DataStorage.cs @@ -0,0 +1,166 @@ +using ZeroLevel.Services.HashFunctions; +using ZeroLevel.Services.PartitionStorage; + +namespace Sleopok.Engine.Services.Storage +{ + public sealed class DataStorage + { + private readonly IStore _store; + + private class DateSourceWriter : + IPartitionDataWriter + { + private readonly IStorePartitionBuilder _builder; + public DateSourceWriter(IStorePartitionBuilder builder) + { + _builder = builder; + } + + public async Task Complete() + { + _builder.CompleteAdding(); + await _builder.Compress(); + await _builder.RebuildIndex(); + _builder.Dispose(); + } + + public async Task Write(string host, string document) + { + await _builder.Store(host, document); + } + + public long GetTotalRecords() => _builder.TotalRecords; + + public void Dispose() + { + _builder.Dispose(); + } + } + + public DataStorage(string rootFolder) + { + var serializers = new StoreSerializers( + async (w, n) => await w.WriteStringAsync(n), + async (w, n) => await w.WriteStringAsync(n), + async (w, n) => await w.WriteBytesAsync(n), + + async (r) => { try { return new DeserializeResult(true, await r.ReadStringAsync()); } catch { return new DeserializeResult(false, string.Empty); } }, + async (r) => { try { return new DeserializeResult(true, await r.ReadStringAsync()); } catch { return new DeserializeResult(false, string.Empty); } }, + async (r) => { try { return new DeserializeResult(true, await r.ReadBytesAsync()); } catch { return new DeserializeResult(false, new byte[0]); } }); + + var options = new StoreOptions + { + Index = new IndexOptions + { + Enabled = true, + StepType = IndexStepType.Step, + StepValue = 32, + EnableIndexInMemoryCachee = false + }, + RootFolder = rootFolder, + FilePartition = new StoreFilePartition("Token hash", (token, _) => Math.Abs(StringHash.DotNetFullHash(token) % 47).ToString()), + MergeFunction = list => + { + return Compressor.Compress(list.OrderBy(c => c).ToArray()); + }, + Partitions = new List> + { + new StoreCatalogPartition("Field", m => m.Field) + }, + KeyComparer = (left, right) => string.Compare(left, right, true), + ThreadSafeWriting = true + }; + _store = new Store(options, serializers); + } + + public IPartitionDataWriter GetWriter(string field) + { + return new DateSourceWriter(_store.CreateBuilder(new StoreMetadata { Field = field })); + } + + private class PositionDocScore + { + private float score = 0.0f; + private int _last_position = -1; + private int count = 0; + + public float GetScore(int total, bool exactMatch) + { + if (exactMatch) + { + return (count == total) ? 1.0f : 0f; + } + return (score / (float)total) * count; + } + + public void Increase(int position) + { + if (position == 0) + { + score = 1.0f; + } + else + { + var diff = position - _last_position; + score += 1.0f / diff; + } + _last_position = position; + count++; + } + } + + public async Task> GetDocuments(string field, string[] tokens, float boost, bool exactMatch) + { + var documents = new Dictionary(); + var accessor = _store.CreateAccessor(new StoreMetadata { Field = field }); + if (accessor != null) + { + using (accessor) + { + int step = 0; + foreach (var token in tokens) + { + var sr = await accessor.Find(token); + if (sr.Success) + { + foreach (var doc in Compressor.DecompressToDocuments(sr.Value)) + { + if (false == documents.ContainsKey(doc)) + { + documents.Add(doc, new PositionDocScore()); + } + documents[doc].Increase(step); + } + } + } + } + } + return documents.ToDictionary(d => d.Key, d => boost * d.Value.GetScore(tokens.Length, exactMatch)); + } + + public async Task Dump(string key, Stream stream) + { + using (TextWriter writer = new StreamWriter(stream)) + { + await foreach (var i in _store.Bypass(new StoreMetadata { Field = key })) + { + writer.WriteLine(i.Key); + writer.WriteLine(string.Join(' ', Compressor.DecompressToDocuments(i.Value))); + } + } + } + + public int HasData(string field) + { + var partition = _store.CreateAccessor(new StoreMetadata { Field = field }); + if (partition != null) + { + using (partition) + { + return partition.CountDataFiles(); + } + } + return 0; + } + } +} diff --git a/src/Sleopok/Sleopok.Engine/Services/Storage/IPartitionDataWriter.cs b/src/Sleopok/Sleopok.Engine/Services/Storage/IPartitionDataWriter.cs new file mode 100644 index 0000000..a9d1fc6 --- /dev/null +++ b/src/Sleopok/Sleopok.Engine/Services/Storage/IPartitionDataWriter.cs @@ -0,0 +1,10 @@ +namespace Sleopok.Engine.Services.Storage +{ + public interface IPartitionDataWriter + : IDisposable + { + Task Write(string token, string document); + Task Complete(); + long GetTotalRecords(); + } +} diff --git a/src/Sleopok/Sleopok.Engine/Services/Storage/StoreMetadata.cs b/src/Sleopok/Sleopok.Engine/Services/Storage/StoreMetadata.cs new file mode 100644 index 0000000..6dda409 --- /dev/null +++ b/src/Sleopok/Sleopok.Engine/Services/Storage/StoreMetadata.cs @@ -0,0 +1,13 @@ +namespace Sleopok.Engine.Services.Storage +{ + /// + /// Мета + /// + public sealed class StoreMetadata + { + /// + /// Поле документа + /// + public string Field { get; set; } + } +} diff --git a/src/Sleopok/Sleopok.Engine/Services/Storage/StoreRecord.cs b/src/Sleopok/Sleopok.Engine/Services/Storage/StoreRecord.cs new file mode 100644 index 0000000..62f4b29 --- /dev/null +++ b/src/Sleopok/Sleopok.Engine/Services/Storage/StoreRecord.cs @@ -0,0 +1,14 @@ +namespace Sleopok.Engine.Services.Storage +{ + public sealed class StoreRecord + { + /// + /// Токен / ключ + /// + public string Token { get; set; } + /// + /// Идентификаторы документов / значение + /// + public string[] Documents { get; set; } + } +} diff --git a/src/Sleopok/Sleopok.Engine/SleoEngine.cs b/src/Sleopok/Sleopok.Engine/SleoEngine.cs new file mode 100644 index 0000000..2fdc9f7 --- /dev/null +++ b/src/Sleopok/Sleopok.Engine/SleoEngine.cs @@ -0,0 +1,41 @@ +using Sleopok.Engine.Models; +using Sleopok.Engine.Services.Indexes; +using Sleopok.Engine.Services.Storage; +using ZeroLevel; + +namespace Sleopok.Engine +{ + public class SleoEngine + { + private readonly DataStorage _storage; + private readonly IndexInfo _indexInfo; + public SleoEngine(string indexFolder, Func identityExtractor) + { + _storage = new DataStorage(indexFolder); + _indexInfo = new IndexInfo(identityExtractor); + } + + public bool HasData() + { + var total = 0; + // healthy + foreach (var field in _indexInfo.Fields) + { + var count = _storage.HasData(field.Name); + Log.Debug($"Field: {field.Name}: {count} files"); + total += count; + } + return total > 0; + } + + public IIndexBuilder CreateBuilder() + { + return new IndexBuilder(_storage, _indexInfo); + } + + public IIndexReader CreateReader() + { + return new IndexReader(_storage, _indexInfo); + } + } +} diff --git a/src/Sleopok/Sleopok.Engine/Sleopok.Engine.csproj b/src/Sleopok/Sleopok.Engine/Sleopok.Engine.csproj index a53ea04..2b305c8 100644 --- a/src/Sleopok/Sleopok.Engine/Sleopok.Engine.csproj +++ b/src/Sleopok/Sleopok.Engine/Sleopok.Engine.csproj @@ -7,7 +7,7 @@ - + diff --git a/src/Sleopok/Sleopok.Engine/bin/Debug/net8.0/Sleopok.Engine.deps.json b/src/Sleopok/Sleopok.Engine/bin/Debug/net8.0/Sleopok.Engine.deps.json index a457fd3..14d84d8 100644 --- a/src/Sleopok/Sleopok.Engine/bin/Debug/net8.0/Sleopok.Engine.deps.json +++ b/src/Sleopok/Sleopok.Engine/bin/Debug/net8.0/Sleopok.Engine.deps.json @@ -7,9 +7,17 @@ "targets": { ".NETCoreApp,Version=v8.0": { "Sleopok.Engine/1.0.0": { + "dependencies": { + "ZeroLevel": "3.4.0.8" + }, "runtime": { "Sleopok.Engine.dll": {} } + }, + "ZeroLevel/3.4.0.8": { + "runtime": { + "ZeroLevel.dll": {} + } } } }, @@ -18,6 +26,11 @@ "type": "project", "serviceable": false, "sha512": "" + }, + "ZeroLevel/3.4.0.8": { + "type": "project", + "serviceable": false, + "sha512": "" } } } \ No newline at end of file diff --git a/src/Sleopok/Sleopok.Engine/bin/Debug/net8.0/Sleopok.Engine.pdb b/src/Sleopok/Sleopok.Engine/bin/Debug/net8.0/Sleopok.Engine.pdb index d925095..378544b 100644 Binary files a/src/Sleopok/Sleopok.Engine/bin/Debug/net8.0/Sleopok.Engine.pdb and b/src/Sleopok/Sleopok.Engine/bin/Debug/net8.0/Sleopok.Engine.pdb differ diff --git a/src/Sleopok/Sleopok.Engine/obj/Debug/net8.0/Sleopok.Engine.AssemblyInfo.cs b/src/Sleopok/Sleopok.Engine/obj/Debug/net8.0/Sleopok.Engine.AssemblyInfo.cs index 77cbf69..8f7361a 100644 --- a/src/Sleopok/Sleopok.Engine/obj/Debug/net8.0/Sleopok.Engine.AssemblyInfo.cs +++ b/src/Sleopok/Sleopok.Engine/obj/Debug/net8.0/Sleopok.Engine.AssemblyInfo.cs @@ -14,7 +14,7 @@ using System.Reflection; [assembly: System.Reflection.AssemblyCompanyAttribute("Sleopok.Engine")] [assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] [assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] -[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+7640df5cc809fe8cc6f1d9b9a6217212fefaed1f")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+fedfec2a4cc01029334d8899a839502b8990face")] [assembly: System.Reflection.AssemblyProductAttribute("Sleopok.Engine")] [assembly: System.Reflection.AssemblyTitleAttribute("Sleopok.Engine")] [assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] diff --git a/src/Sleopok/Sleopok.Engine/obj/Debug/net8.0/Sleopok.Engine.AssemblyInfoInputs.cache b/src/Sleopok/Sleopok.Engine/obj/Debug/net8.0/Sleopok.Engine.AssemblyInfoInputs.cache index 39897b7..bb0f264 100644 --- a/src/Sleopok/Sleopok.Engine/obj/Debug/net8.0/Sleopok.Engine.AssemblyInfoInputs.cache +++ b/src/Sleopok/Sleopok.Engine/obj/Debug/net8.0/Sleopok.Engine.AssemblyInfoInputs.cache @@ -1 +1 @@ -f426e6a434a2fc8387e3d537276d02f6cf81d1a9ad7d6c180ee6ed07027c56e6 +77e8df075c7d1f0f3dc236560a0047f015aa2ee269d969915745f95d3be4c2de diff --git a/src/Sleopok/Sleopok.Engine/obj/Debug/net8.0/Sleopok.Engine.assets.cache b/src/Sleopok/Sleopok.Engine/obj/Debug/net8.0/Sleopok.Engine.assets.cache index 0102916..dc421e4 100644 Binary files a/src/Sleopok/Sleopok.Engine/obj/Debug/net8.0/Sleopok.Engine.assets.cache and b/src/Sleopok/Sleopok.Engine/obj/Debug/net8.0/Sleopok.Engine.assets.cache differ diff --git a/src/Sleopok/Sleopok.Engine/obj/Debug/net8.0/Sleopok.Engine.csproj.AssemblyReference.cache b/src/Sleopok/Sleopok.Engine/obj/Debug/net8.0/Sleopok.Engine.csproj.AssemblyReference.cache index 48185b6..82c25f0 100644 Binary files a/src/Sleopok/Sleopok.Engine/obj/Debug/net8.0/Sleopok.Engine.csproj.AssemblyReference.cache and b/src/Sleopok/Sleopok.Engine/obj/Debug/net8.0/Sleopok.Engine.csproj.AssemblyReference.cache differ diff --git a/src/Sleopok/Sleopok.Engine/obj/Debug/net8.0/Sleopok.Engine.csproj.CoreCompileInputs.cache b/src/Sleopok/Sleopok.Engine/obj/Debug/net8.0/Sleopok.Engine.csproj.CoreCompileInputs.cache index 7fb3bf5..1fdcbd6 100644 --- a/src/Sleopok/Sleopok.Engine/obj/Debug/net8.0/Sleopok.Engine.csproj.CoreCompileInputs.cache +++ b/src/Sleopok/Sleopok.Engine/obj/Debug/net8.0/Sleopok.Engine.csproj.CoreCompileInputs.cache @@ -1 +1 @@ -5da1357c9eefef2d7ad7c9bb0c603c0f7ef9b42dc2cecea34ee721a98d798d52 +41bfc06d75e1228dd2a09cea218be6ef02f4290e829a20aa336f3a48d826fcfc diff --git a/src/Sleopok/Sleopok.Engine/obj/Debug/net8.0/Sleopok.Engine.csproj.FileListAbsolute.txt b/src/Sleopok/Sleopok.Engine/obj/Debug/net8.0/Sleopok.Engine.csproj.FileListAbsolute.txt index de59294..128112e 100644 --- a/src/Sleopok/Sleopok.Engine/obj/Debug/net8.0/Sleopok.Engine.csproj.FileListAbsolute.txt +++ b/src/Sleopok/Sleopok.Engine/obj/Debug/net8.0/Sleopok.Engine.csproj.FileListAbsolute.txt @@ -9,3 +9,7 @@ G:\Documents\GitHub\sleopok\src\Sleopok\Sleopok.Engine\obj\Debug\net8.0\Sleopok. G:\Documents\GitHub\sleopok\src\Sleopok\Sleopok.Engine\obj\Debug\net8.0\refint\Sleopok.Engine.dll G:\Documents\GitHub\sleopok\src\Sleopok\Sleopok.Engine\obj\Debug\net8.0\Sleopok.Engine.pdb G:\Documents\GitHub\sleopok\src\Sleopok\Sleopok.Engine\obj\Debug\net8.0\ref\Sleopok.Engine.dll +G:\Documents\GitHub\sleopok\src\Sleopok\Sleopok.Engine\obj\Debug\net8.0\Sleopok.Engine.csproj.AssemblyReference.cache +G:\Documents\GitHub\sleopok\src\Sleopok\Sleopok.Engine\bin\Debug\net8.0\ZeroLevel.dll +G:\Documents\GitHub\sleopok\src\Sleopok\Sleopok.Engine\bin\Debug\net8.0\ZeroLevel.pdb +G:\Documents\GitHub\sleopok\src\Sleopok\Sleopok.Engine\obj\Debug\net8.0\Sleopok..B842D9EA.Up2Date diff --git a/src/Sleopok/Sleopok.Engine/obj/Debug/net8.0/Sleopok.Engine.pdb b/src/Sleopok/Sleopok.Engine/obj/Debug/net8.0/Sleopok.Engine.pdb index d925095..378544b 100644 Binary files a/src/Sleopok/Sleopok.Engine/obj/Debug/net8.0/Sleopok.Engine.pdb and b/src/Sleopok/Sleopok.Engine/obj/Debug/net8.0/Sleopok.Engine.pdb differ diff --git a/src/Sleopok/Sleopok.Engine/obj/Sleopok.Engine.csproj.nuget.dgspec.json b/src/Sleopok/Sleopok.Engine/obj/Sleopok.Engine.csproj.nuget.dgspec.json index 98f9a8d..5cbdf4a 100644 --- a/src/Sleopok/Sleopok.Engine/obj/Sleopok.Engine.csproj.nuget.dgspec.json +++ b/src/Sleopok/Sleopok.Engine/obj/Sleopok.Engine.csproj.nuget.dgspec.json @@ -4,6 +4,71 @@ "G:\\Documents\\GitHub\\sleopok\\src\\Sleopok\\Sleopok.Engine\\Sleopok.Engine.csproj": {} }, "projects": { + "F:\\Documents\\GitHub\\Zero\\ZeroLevel\\ZeroLevel.csproj": { + "version": "3.4.0.8", + "restore": { + "projectUniqueName": "F:\\Documents\\GitHub\\Zero\\ZeroLevel\\ZeroLevel.csproj", + "projectName": "ZeroLevel", + "projectPath": "F:\\Documents\\GitHub\\Zero\\ZeroLevel\\ZeroLevel.csproj", + "packagesPath": "C:\\Users\\Ogoun\\.nuget\\packages\\", + "outputPath": "F:\\Documents\\GitHub\\Zero\\ZeroLevel\\obj\\", + "projectStyle": "PackageReference", + "fallbackFolders": [ + "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages" + ], + "configFilePaths": [ + "C:\\Users\\Ogoun\\AppData\\Roaming\\NuGet\\NuGet.Config", + "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.FallbackLocation.config", + "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config" + ], + "originalTargetFrameworks": [ + "net8.0" + ], + "sources": { + "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {}, + "C:\\Program Files\\dotnet\\library-packs": {}, + "https://api.nuget.org/v3/index.json": {} + }, + "frameworks": { + "net8.0": { + "targetAlias": "net8.0", + "projectReferences": {} + } + }, + "warningProperties": { + "warnAsError": [ + "NU1605" + ] + }, + "restoreAuditProperties": { + "enableAudit": "true", + "auditLevel": "low", + "auditMode": "direct" + } + }, + "frameworks": { + "net8.0": { + "targetAlias": "net8.0", + "imports": [ + "net461", + "net462", + "net47", + "net471", + "net472", + "net48", + "net481" + ], + "assetTargetFallback": true, + "warn": true, + "frameworkReferences": { + "Microsoft.NETCore.App": { + "privateAssets": "all" + } + }, + "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\8.0.200/PortableRuntimeIdentifierGraph.json" + } + } + }, "G:\\Documents\\GitHub\\sleopok\\src\\Sleopok\\Sleopok.Engine\\Sleopok.Engine.csproj": { "version": "1.0.0", "restore": { @@ -32,7 +97,11 @@ "frameworks": { "net8.0": { "targetAlias": "net8.0", - "projectReferences": {} + "projectReferences": { + "F:\\Documents\\GitHub\\Zero\\ZeroLevel\\ZeroLevel.csproj": { + "projectPath": "F:\\Documents\\GitHub\\Zero\\ZeroLevel\\ZeroLevel.csproj" + } + } } }, "warningProperties": { @@ -49,12 +118,6 @@ "frameworks": { "net8.0": { "targetAlias": "net8.0", - "dependencies": { - "ZeroLevel": { - "target": "Package", - "version": "[3.4.0.8, )" - } - }, "imports": [ "net461", "net462", diff --git a/src/Sleopok/Sleopok.Engine/obj/Sleopok.Engine.csproj.nuget.g.props b/src/Sleopok/Sleopok.Engine/obj/Sleopok.Engine.csproj.nuget.g.props index 27fd830..02d31c6 100644 --- a/src/Sleopok/Sleopok.Engine/obj/Sleopok.Engine.csproj.nuget.g.props +++ b/src/Sleopok/Sleopok.Engine/obj/Sleopok.Engine.csproj.nuget.g.props @@ -13,14 +13,4 @@ - - - ZeroLevel - 3.4.0.8 - Content - false - False - zero.ico - - \ No newline at end of file diff --git a/src/Sleopok/Sleopok.Engine/obj/project.assets.json b/src/Sleopok/Sleopok.Engine/obj/project.assets.json index 28920d5..8716b61 100644 --- a/src/Sleopok/Sleopok.Engine/obj/project.assets.json +++ b/src/Sleopok/Sleopok.Engine/obj/project.assets.json @@ -3,38 +3,22 @@ "targets": { "net8.0": { "ZeroLevel/3.4.0.8": { - "type": "package", + "type": "project", + "framework": ".NETCoreApp,Version=v8.0", "compile": { - "lib/net6.0/ZeroLevel.dll": {} + "bin/placeholder/ZeroLevel.dll": {} }, "runtime": { - "lib/net6.0/ZeroLevel.dll": {} - }, - "contentFiles": { - "contentFiles/any/net6.0/zero.ico": { - "buildAction": "Content", - "codeLanguage": "any", - "copyToOutput": false - } + "bin/placeholder/ZeroLevel.dll": {} } } } }, "libraries": { "ZeroLevel/3.4.0.8": { - "sha512": "zPyHKeeX9M96BPqXcS+MKnUbF1EWPUusz4i2Ij9UiF+HTU85MtCKW3MQZx2O6vVtRtRbD20OoKGwn7/vvXFTgw==", - "type": "package", - "path": "zerolevel/3.4.0.8", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "content/zero.ico", - "contentFiles/any/net6.0/zero.ico", - "lib/net6.0/ZeroLevel.dll", - "zero.png", - "zerolevel.3.4.0.8.nupkg.sha512", - "zerolevel.nuspec" - ] + "type": "project", + "path": "F:\\Documents\\GitHub\\Zero\\ZeroLevel\\ZeroLevel.csproj", + "msbuildProject": "F:\\Documents\\GitHub\\Zero\\ZeroLevel\\ZeroLevel.csproj" } }, "projectFileDependencyGroups": { @@ -74,7 +58,11 @@ "frameworks": { "net8.0": { "targetAlias": "net8.0", - "projectReferences": {} + "projectReferences": { + "F:\\Documents\\GitHub\\Zero\\ZeroLevel\\ZeroLevel.csproj": { + "projectPath": "F:\\Documents\\GitHub\\Zero\\ZeroLevel\\ZeroLevel.csproj" + } + } } }, "warningProperties": { @@ -91,12 +79,6 @@ "frameworks": { "net8.0": { "targetAlias": "net8.0", - "dependencies": { - "ZeroLevel": { - "target": "Package", - "version": "[3.4.0.8, )" - } - }, "imports": [ "net461", "net462", diff --git a/src/Sleopok/Sleopok.Engine/obj/project.nuget.cache b/src/Sleopok/Sleopok.Engine/obj/project.nuget.cache index b5c4693..887aad2 100644 --- a/src/Sleopok/Sleopok.Engine/obj/project.nuget.cache +++ b/src/Sleopok/Sleopok.Engine/obj/project.nuget.cache @@ -1,6 +1,6 @@ { "version": 2, - "dgSpecHash": "880PzxH53Ahr72uy6Pp63ie2s9+KLoxGS6Fer5K7TH4n18bLP8oxr0T3yuxBfSUzk6KjY9S0DRwHSzjW2hcO9g==", + "dgSpecHash": "4HWaMlhWwDRMgMlaabFye9fQhdCxurzS/2Lp4upBhQDnDz9xaw6qwUb3S+rAs+HHl9VGGCU73F9hiJCgIpjhQg==", "success": true, "projectFilePath": "G:\\Documents\\GitHub\\sleopok\\src\\Sleopok\\Sleopok.Engine\\Sleopok.Engine.csproj", "expectedPackageFiles": [ diff --git a/src/Sleopok/Sleopok.Tests/Program.cs b/src/Sleopok/Sleopok.Tests/Program.cs index fa3a5da..f88955f 100644 --- a/src/Sleopok/Sleopok.Tests/Program.cs +++ b/src/Sleopok/Sleopok.Tests/Program.cs @@ -1,10 +1,141 @@ -namespace Sleopok.Tests +using Sleopok.Engine; +using Sleopok.Engine.Models; +using Sleopok.Engine.Services; +using Sleopok.Engine.Services.Storage; +using ZeroLevel.Services.Semantic; +using ZeroLevel.Services.Serialization; + +namespace Sleopok.Tests { internal class Program { - static void Main(string[] args) + public sealed class BookDocument { - Console.WriteLine("Hello, World!"); + public string Id { get; set; } + + [SleoIndex("title", 200.0f)] + public string Title { get; set; } + + [SleoIndex("titlelm", 100.0f)] + public string TitleLemmas { get; set; } + + [SleoIndex("author", 10.0f)] + public string Author { get; set; } + + [SleoIndex("genre", 1.0f)] + public string Genre { get; set; } + } + + private static Dictionary _titles = new Dictionary + { + { "66056bc0481e83af64c55022", "Документ без названия" }, + { "6605698d481e83af64c45ad7", "На развилке дорог. Часть 2"}, + { "660581bc481e83af64cb8b4d", "Паниклав"}, + { "66057aa2481e83af64c9bb11", "Князь. Война магов (сборник)"}, + { "66057f75481e83af64cb04f7", "Антология севетского детектива-8. Компиляция. Книги 1-17"}, + { "66057bd4481e83af64ca0779", "Вор черной масти"}, + { "66057247481e83af64c76860", "Выбор"}, + { "66056807481e83af64c3a64f", "Последняя лекция"}, + { "66057f13481e83af64caed5d", "Оружие Круппа. История династии пушечных королей"}, + { "66057a37481e83af64c9a14b", "Месть Черного Дракона"}, + { "660588e8481e83af64cd2d3e", "Мгла над старыми могилами"}, + { "66056e88481e83af64c64e81", "Кровь и железо"}, + { "66057a8e481e83af64c9b673", "Маленькая страна"}, + { "6605687d481e83af64c3e360", "Санкт-Петербург – история в преданиях и легендах"}, + { "66057987481e83af64c9770c", "Контракт на рабство"}, + { "66059052481e83af64cf5e31", "Агент космического сыска"}, + { "660580f9481e83af64cb61c9", "Две жизни Алессы Коэн"}, + { "66056807481e84af64c3a64f", "Последняя история"}, + { "66057f13481e85af64caed5d", "История Китая"}, + { "66057a37481e86af64c9a14b", "Время Черного Дракона"}, + { "660588e8481e87af64cd2d3e", "Страна которой нет"}, + }; + + static async Task Main(string[] args) + { + // TestCompression(); + // await FillOneFieldIndex(); + // await TestSearch(); + await TestEngine(); + } + + static async Task TestEngine() + { + var engine = new SleoEngine(@"H:\Test", b => b.Id); + using (var builder = engine.CreateBuilder()) + { + builder.Write(new[] + { + new BookDocument{ Id = "01", Title = "Страж птица", }, + new BookDocument{ Id = "02" }, + new BookDocument{ Id = "03" }, + new BookDocument{ Id = "04" }, + }); + } + } + + static void TestCompression() + { + var strings = new string[] + { + string.Empty, + "doc1", + "doc2", + "", + " ", + "\r\n", + "last", + "doc3", + "doc4", + "doc5", + "doc6", + "doc7", + "doc8", + "doc9", + "doc10", + }; + + var clearbytes = MessageSerializer.SerializeCompatible(strings).Length; + var compressed = Compressor.Compress(strings); + Console.WriteLine($"{compressed.Length} / {clearbytes} bytes"); + + var decomressed = Compressor.DecompressToDocuments(compressed); + int index = 0; + foreach (var s in decomressed) + { + if (!(string.IsNullOrEmpty(s) && string.IsNullOrEmpty(strings[index])) && 0 != string.CompareOrdinal(strings[index], s)) + { + Console.WriteLine($"Got {s}. Expected {strings[index]}"); + } + index++; + } + } + + static async Task FillOneFieldIndex() + { + var store = new DataStorage(@"H:\TEST"); + using (var writer = store.GetWriter("title")) + { + foreach (var kv in _titles) + { + var tokens = WordTokenizer.Tokenize(kv.Value); + foreach (var t in tokens) + { + await writer.Write(t, kv.Key); + } + } + await writer.Complete(); + } + } + + static async Task TestSearch() + { + var store = new DataStorage(@"H:\TEST"); + var docs = await store.GetDocuments("title", new string[] { "кровь", "страна", "железо", "история", "оружие" }, 1.0f, false); + foreach (var kv in docs.OrderByDescending(kv => kv.Value)) + { + Console.WriteLine($"[{kv.Key}: {kv.Value}] {_titles[kv.Key]}"); + } } } } diff --git a/src/Sleopok/Sleopok.Tests/bin/Debug/net8.0/Sleopok.Tests.deps.json b/src/Sleopok/Sleopok.Tests/bin/Debug/net8.0/Sleopok.Tests.deps.json index 5152259..53a7675 100644 --- a/src/Sleopok/Sleopok.Tests/bin/Debug/net8.0/Sleopok.Tests.deps.json +++ b/src/Sleopok/Sleopok.Tests/bin/Debug/net8.0/Sleopok.Tests.deps.json @@ -7,9 +7,25 @@ "targets": { ".NETCoreApp,Version=v8.0": { "Sleopok.Tests/1.0.0": { + "dependencies": { + "Sleopok.Engine": "1.0.0" + }, "runtime": { "Sleopok.Tests.dll": {} } + }, + "Sleopok.Engine/1.0.0": { + "dependencies": { + "ZeroLevel": "3.4.0.8" + }, + "runtime": { + "Sleopok.Engine.dll": {} + } + }, + "ZeroLevel/3.4.0.8": { + "runtime": { + "ZeroLevel.dll": {} + } } } }, @@ -18,6 +34,16 @@ "type": "project", "serviceable": false, "sha512": "" + }, + "Sleopok.Engine/1.0.0": { + "type": "project", + "serviceable": false, + "sha512": "" + }, + "ZeroLevel/3.4.0.8": { + "type": "project", + "serviceable": false, + "sha512": "" } } } \ No newline at end of file diff --git a/src/Sleopok/Sleopok.Tests/bin/Debug/net8.0/Sleopok.Tests.pdb b/src/Sleopok/Sleopok.Tests/bin/Debug/net8.0/Sleopok.Tests.pdb index c1b56d3..a464f10 100644 Binary files a/src/Sleopok/Sleopok.Tests/bin/Debug/net8.0/Sleopok.Tests.pdb and b/src/Sleopok/Sleopok.Tests/bin/Debug/net8.0/Sleopok.Tests.pdb differ diff --git a/src/Sleopok/Sleopok.Tests/obj/Debug/net8.0/Sleopok.Tests.AssemblyInfo.cs b/src/Sleopok/Sleopok.Tests/obj/Debug/net8.0/Sleopok.Tests.AssemblyInfo.cs index dac4f70..fa0086b 100644 --- a/src/Sleopok/Sleopok.Tests/obj/Debug/net8.0/Sleopok.Tests.AssemblyInfo.cs +++ b/src/Sleopok/Sleopok.Tests/obj/Debug/net8.0/Sleopok.Tests.AssemblyInfo.cs @@ -14,7 +14,7 @@ using System.Reflection; [assembly: System.Reflection.AssemblyCompanyAttribute("Sleopok.Tests")] [assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] [assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] -[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+7640df5cc809fe8cc6f1d9b9a6217212fefaed1f")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+fedfec2a4cc01029334d8899a839502b8990face")] [assembly: System.Reflection.AssemblyProductAttribute("Sleopok.Tests")] [assembly: System.Reflection.AssemblyTitleAttribute("Sleopok.Tests")] [assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] diff --git a/src/Sleopok/Sleopok.Tests/obj/Debug/net8.0/Sleopok.Tests.AssemblyInfoInputs.cache b/src/Sleopok/Sleopok.Tests/obj/Debug/net8.0/Sleopok.Tests.AssemblyInfoInputs.cache index 6ac20a8..38586b3 100644 --- a/src/Sleopok/Sleopok.Tests/obj/Debug/net8.0/Sleopok.Tests.AssemblyInfoInputs.cache +++ b/src/Sleopok/Sleopok.Tests/obj/Debug/net8.0/Sleopok.Tests.AssemblyInfoInputs.cache @@ -1 +1 @@ -d17f9dca864c4d8df026d969f5b6ea99b9c64210522de05cbf223c73c87241f4 +5ab19946e0862a233cc54d291fd7a3f27e64b66b5ba0deed43cb098d1e9e2950 diff --git a/src/Sleopok/Sleopok.Tests/obj/Debug/net8.0/Sleopok.Tests.assets.cache b/src/Sleopok/Sleopok.Tests/obj/Debug/net8.0/Sleopok.Tests.assets.cache index f9dda93..82d3d50 100644 Binary files a/src/Sleopok/Sleopok.Tests/obj/Debug/net8.0/Sleopok.Tests.assets.cache and b/src/Sleopok/Sleopok.Tests/obj/Debug/net8.0/Sleopok.Tests.assets.cache differ diff --git a/src/Sleopok/Sleopok.Tests/obj/Debug/net8.0/Sleopok.Tests.csproj.AssemblyReference.cache b/src/Sleopok/Sleopok.Tests/obj/Debug/net8.0/Sleopok.Tests.csproj.AssemblyReference.cache index 076ae1e..39e5779 100644 Binary files a/src/Sleopok/Sleopok.Tests/obj/Debug/net8.0/Sleopok.Tests.csproj.AssemblyReference.cache and b/src/Sleopok/Sleopok.Tests/obj/Debug/net8.0/Sleopok.Tests.csproj.AssemblyReference.cache differ diff --git a/src/Sleopok/Sleopok.Tests/obj/Debug/net8.0/Sleopok.Tests.csproj.CoreCompileInputs.cache b/src/Sleopok/Sleopok.Tests/obj/Debug/net8.0/Sleopok.Tests.csproj.CoreCompileInputs.cache index 873f4ca..b641b86 100644 --- a/src/Sleopok/Sleopok.Tests/obj/Debug/net8.0/Sleopok.Tests.csproj.CoreCompileInputs.cache +++ b/src/Sleopok/Sleopok.Tests/obj/Debug/net8.0/Sleopok.Tests.csproj.CoreCompileInputs.cache @@ -1 +1 @@ -41452b14e8c8ea81ab536b55333608fe5ea90183b89453bd74806e2add53c90c +0a16ec38b6c4b5fcb1005d7c9ec70a307d026e3be3d426b201c8e1f37a231ec7 diff --git a/src/Sleopok/Sleopok.Tests/obj/Debug/net8.0/Sleopok.Tests.csproj.FileListAbsolute.txt b/src/Sleopok/Sleopok.Tests/obj/Debug/net8.0/Sleopok.Tests.csproj.FileListAbsolute.txt index 9788944..2c186f6 100644 --- a/src/Sleopok/Sleopok.Tests/obj/Debug/net8.0/Sleopok.Tests.csproj.FileListAbsolute.txt +++ b/src/Sleopok/Sleopok.Tests/obj/Debug/net8.0/Sleopok.Tests.csproj.FileListAbsolute.txt @@ -12,3 +12,9 @@ G:\Documents\GitHub\sleopok\src\Sleopok\Sleopok.Tests\obj\Debug\net8.0\refint\Sl G:\Documents\GitHub\sleopok\src\Sleopok\Sleopok.Tests\obj\Debug\net8.0\Sleopok.Tests.pdb G:\Documents\GitHub\sleopok\src\Sleopok\Sleopok.Tests\obj\Debug\net8.0\Sleopok.Tests.genruntimeconfig.cache G:\Documents\GitHub\sleopok\src\Sleopok\Sleopok.Tests\obj\Debug\net8.0\ref\Sleopok.Tests.dll +G:\Documents\GitHub\sleopok\src\Sleopok\Sleopok.Tests\bin\Debug\net8.0\ZeroLevel.dll +G:\Documents\GitHub\sleopok\src\Sleopok\Sleopok.Tests\bin\Debug\net8.0\Sleopok.Engine.dll +G:\Documents\GitHub\sleopok\src\Sleopok\Sleopok.Tests\bin\Debug\net8.0\Sleopok.Engine.pdb +G:\Documents\GitHub\sleopok\src\Sleopok\Sleopok.Tests\obj\Debug\net8.0\Sleopok.Tests.csproj.AssemblyReference.cache +G:\Documents\GitHub\sleopok\src\Sleopok\Sleopok.Tests\obj\Debug\net8.0\Sleopok..98C533F0.Up2Date +G:\Documents\GitHub\sleopok\src\Sleopok\Sleopok.Tests\bin\Debug\net8.0\ZeroLevel.pdb diff --git a/src/Sleopok/Sleopok.Tests/obj/Debug/net8.0/Sleopok.Tests.pdb b/src/Sleopok/Sleopok.Tests/obj/Debug/net8.0/Sleopok.Tests.pdb index c1b56d3..a464f10 100644 Binary files a/src/Sleopok/Sleopok.Tests/obj/Debug/net8.0/Sleopok.Tests.pdb and b/src/Sleopok/Sleopok.Tests/obj/Debug/net8.0/Sleopok.Tests.pdb differ diff --git a/src/Sleopok/Sleopok.Tests/obj/Sleopok.Tests.csproj.nuget.dgspec.json b/src/Sleopok/Sleopok.Tests/obj/Sleopok.Tests.csproj.nuget.dgspec.json index cc70e37..c008da6 100644 --- a/src/Sleopok/Sleopok.Tests/obj/Sleopok.Tests.csproj.nuget.dgspec.json +++ b/src/Sleopok/Sleopok.Tests/obj/Sleopok.Tests.csproj.nuget.dgspec.json @@ -4,6 +4,71 @@ "G:\\Documents\\GitHub\\sleopok\\src\\Sleopok\\Sleopok.Tests\\Sleopok.Tests.csproj": {} }, "projects": { + "F:\\Documents\\GitHub\\Zero\\ZeroLevel\\ZeroLevel.csproj": { + "version": "3.4.0.8", + "restore": { + "projectUniqueName": "F:\\Documents\\GitHub\\Zero\\ZeroLevel\\ZeroLevel.csproj", + "projectName": "ZeroLevel", + "projectPath": "F:\\Documents\\GitHub\\Zero\\ZeroLevel\\ZeroLevel.csproj", + "packagesPath": "C:\\Users\\Ogoun\\.nuget\\packages\\", + "outputPath": "F:\\Documents\\GitHub\\Zero\\ZeroLevel\\obj\\", + "projectStyle": "PackageReference", + "fallbackFolders": [ + "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages" + ], + "configFilePaths": [ + "C:\\Users\\Ogoun\\AppData\\Roaming\\NuGet\\NuGet.Config", + "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.FallbackLocation.config", + "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config" + ], + "originalTargetFrameworks": [ + "net8.0" + ], + "sources": { + "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {}, + "C:\\Program Files\\dotnet\\library-packs": {}, + "https://api.nuget.org/v3/index.json": {} + }, + "frameworks": { + "net8.0": { + "targetAlias": "net8.0", + "projectReferences": {} + } + }, + "warningProperties": { + "warnAsError": [ + "NU1605" + ] + }, + "restoreAuditProperties": { + "enableAudit": "true", + "auditLevel": "low", + "auditMode": "direct" + } + }, + "frameworks": { + "net8.0": { + "targetAlias": "net8.0", + "imports": [ + "net461", + "net462", + "net47", + "net471", + "net472", + "net48", + "net481" + ], + "assetTargetFallback": true, + "warn": true, + "frameworkReferences": { + "Microsoft.NETCore.App": { + "privateAssets": "all" + } + }, + "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\8.0.200/PortableRuntimeIdentifierGraph.json" + } + } + }, "G:\\Documents\\GitHub\\sleopok\\src\\Sleopok\\Sleopok.Engine\\Sleopok.Engine.csproj": { "version": "1.0.0", "restore": { @@ -32,7 +97,11 @@ "frameworks": { "net8.0": { "targetAlias": "net8.0", - "projectReferences": {} + "projectReferences": { + "F:\\Documents\\GitHub\\Zero\\ZeroLevel\\ZeroLevel.csproj": { + "projectPath": "F:\\Documents\\GitHub\\Zero\\ZeroLevel\\ZeroLevel.csproj" + } + } } }, "warningProperties": { @@ -49,12 +118,6 @@ "frameworks": { "net8.0": { "targetAlias": "net8.0", - "dependencies": { - "ZeroLevel": { - "target": "Package", - "version": "[3.4.0.8, )" - } - }, "imports": [ "net461", "net462", diff --git a/src/Sleopok/Sleopok.Tests/obj/project.assets.json b/src/Sleopok/Sleopok.Tests/obj/project.assets.json index 810aa94..cc05b8c 100644 --- a/src/Sleopok/Sleopok.Tests/obj/project.assets.json +++ b/src/Sleopok/Sleopok.Tests/obj/project.assets.json @@ -2,22 +2,6 @@ "version": 3, "targets": { "net8.0": { - "ZeroLevel/3.4.0.8": { - "type": "package", - "compile": { - "lib/net6.0/ZeroLevel.dll": {} - }, - "runtime": { - "lib/net6.0/ZeroLevel.dll": {} - }, - "contentFiles": { - "contentFiles/any/any/_._": { - "buildAction": "None", - "codeLanguage": "any", - "copyToOutput": false - } - } - }, "Sleopok.Engine/1.0.0": { "type": "project", "framework": ".NETCoreApp,Version=v8.0", @@ -30,29 +14,29 @@ "runtime": { "bin/placeholder/Sleopok.Engine.dll": {} } + }, + "ZeroLevel/3.4.0.8": { + "type": "project", + "framework": ".NETCoreApp,Version=v8.0", + "compile": { + "bin/placeholder/ZeroLevel.dll": {} + }, + "runtime": { + "bin/placeholder/ZeroLevel.dll": {} + } } } }, "libraries": { - "ZeroLevel/3.4.0.8": { - "sha512": "zPyHKeeX9M96BPqXcS+MKnUbF1EWPUusz4i2Ij9UiF+HTU85MtCKW3MQZx2O6vVtRtRbD20OoKGwn7/vvXFTgw==", - "type": "package", - "path": "zerolevel/3.4.0.8", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "content/zero.ico", - "contentFiles/any/net6.0/zero.ico", - "lib/net6.0/ZeroLevel.dll", - "zero.png", - "zerolevel.3.4.0.8.nupkg.sha512", - "zerolevel.nuspec" - ] - }, "Sleopok.Engine/1.0.0": { "type": "project", "path": "../Sleopok.Engine/Sleopok.Engine.csproj", "msbuildProject": "../Sleopok.Engine/Sleopok.Engine.csproj" + }, + "ZeroLevel/3.4.0.8": { + "type": "project", + "path": "F:\\Documents\\GitHub\\Zero\\ZeroLevel\\ZeroLevel.csproj", + "msbuildProject": "F:\\Documents\\GitHub\\Zero\\ZeroLevel\\ZeroLevel.csproj" } }, "projectFileDependencyGroups": { diff --git a/src/Sleopok/Sleopok.Tests/obj/project.nuget.cache b/src/Sleopok/Sleopok.Tests/obj/project.nuget.cache index 50ac272..44ff015 100644 --- a/src/Sleopok/Sleopok.Tests/obj/project.nuget.cache +++ b/src/Sleopok/Sleopok.Tests/obj/project.nuget.cache @@ -1,6 +1,6 @@ { "version": 2, - "dgSpecHash": "mNch86pkkquYXfThFypfi+NUSdjLFWRy/cWmm5ynS4AfjyGh5yLz4bEpOhkRNzjA0l4q7HWTuyu2fAYV2lockw==", + "dgSpecHash": "xyOpZV1ojrsCK1nD9z8X1xyWbibkrgwI9IZAL3gUsR1xRauOOe7HHLysWMriBW/Q+gHmI9fl0OhmzX2BHzEndg==", "success": true, "projectFilePath": "G:\\Documents\\GitHub\\sleopok\\src\\Sleopok\\Sleopok.Tests\\Sleopok.Tests.csproj", "expectedPackageFiles": [ diff --git a/src/Sleopok/Sleopok.sln b/src/Sleopok/Sleopok.sln index 39eae96..10d55dd 100644 --- a/src/Sleopok/Sleopok.sln +++ b/src/Sleopok/Sleopok.sln @@ -9,24 +9,66 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sleopok.Tests", "Sleopok.Te EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sleopok.App", "Sleopok.App\Sleopok.App.csproj", "{9E53D77C-D559-4B24-A8C6-37F80E3624BB}" EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ZeroLevel", "F:\Documents\GitHub\Zero\ZeroLevel\ZeroLevel.csproj", "{592B7FC1-FD96-4881-8F35-DB2DA184CAF2}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 Release|Any CPU = Release|Any CPU + Release|x64 = Release|x64 + Release|x86 = Release|x86 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {D8D0C82C-147F-418A-8050-998368D07879}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {D8D0C82C-147F-418A-8050-998368D07879}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D8D0C82C-147F-418A-8050-998368D07879}.Debug|x64.ActiveCfg = Debug|Any CPU + {D8D0C82C-147F-418A-8050-998368D07879}.Debug|x64.Build.0 = Debug|Any CPU + {D8D0C82C-147F-418A-8050-998368D07879}.Debug|x86.ActiveCfg = Debug|Any CPU + {D8D0C82C-147F-418A-8050-998368D07879}.Debug|x86.Build.0 = Debug|Any CPU {D8D0C82C-147F-418A-8050-998368D07879}.Release|Any CPU.ActiveCfg = Release|Any CPU {D8D0C82C-147F-418A-8050-998368D07879}.Release|Any CPU.Build.0 = Release|Any CPU + {D8D0C82C-147F-418A-8050-998368D07879}.Release|x64.ActiveCfg = Release|Any CPU + {D8D0C82C-147F-418A-8050-998368D07879}.Release|x64.Build.0 = Release|Any CPU + {D8D0C82C-147F-418A-8050-998368D07879}.Release|x86.ActiveCfg = Release|Any CPU + {D8D0C82C-147F-418A-8050-998368D07879}.Release|x86.Build.0 = Release|Any CPU {3CDCDABF-8B27-46DD-9F54-825F039B4511}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {3CDCDABF-8B27-46DD-9F54-825F039B4511}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3CDCDABF-8B27-46DD-9F54-825F039B4511}.Debug|x64.ActiveCfg = Debug|Any CPU + {3CDCDABF-8B27-46DD-9F54-825F039B4511}.Debug|x64.Build.0 = Debug|Any CPU + {3CDCDABF-8B27-46DD-9F54-825F039B4511}.Debug|x86.ActiveCfg = Debug|Any CPU + {3CDCDABF-8B27-46DD-9F54-825F039B4511}.Debug|x86.Build.0 = Debug|Any CPU {3CDCDABF-8B27-46DD-9F54-825F039B4511}.Release|Any CPU.ActiveCfg = Release|Any CPU {3CDCDABF-8B27-46DD-9F54-825F039B4511}.Release|Any CPU.Build.0 = Release|Any CPU + {3CDCDABF-8B27-46DD-9F54-825F039B4511}.Release|x64.ActiveCfg = Release|Any CPU + {3CDCDABF-8B27-46DD-9F54-825F039B4511}.Release|x64.Build.0 = Release|Any CPU + {3CDCDABF-8B27-46DD-9F54-825F039B4511}.Release|x86.ActiveCfg = Release|Any CPU + {3CDCDABF-8B27-46DD-9F54-825F039B4511}.Release|x86.Build.0 = Release|Any CPU {9E53D77C-D559-4B24-A8C6-37F80E3624BB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {9E53D77C-D559-4B24-A8C6-37F80E3624BB}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9E53D77C-D559-4B24-A8C6-37F80E3624BB}.Debug|x64.ActiveCfg = Debug|Any CPU + {9E53D77C-D559-4B24-A8C6-37F80E3624BB}.Debug|x64.Build.0 = Debug|Any CPU + {9E53D77C-D559-4B24-A8C6-37F80E3624BB}.Debug|x86.ActiveCfg = Debug|Any CPU + {9E53D77C-D559-4B24-A8C6-37F80E3624BB}.Debug|x86.Build.0 = Debug|Any CPU {9E53D77C-D559-4B24-A8C6-37F80E3624BB}.Release|Any CPU.ActiveCfg = Release|Any CPU {9E53D77C-D559-4B24-A8C6-37F80E3624BB}.Release|Any CPU.Build.0 = Release|Any CPU + {9E53D77C-D559-4B24-A8C6-37F80E3624BB}.Release|x64.ActiveCfg = Release|Any CPU + {9E53D77C-D559-4B24-A8C6-37F80E3624BB}.Release|x64.Build.0 = Release|Any CPU + {9E53D77C-D559-4B24-A8C6-37F80E3624BB}.Release|x86.ActiveCfg = Release|Any CPU + {9E53D77C-D559-4B24-A8C6-37F80E3624BB}.Release|x86.Build.0 = Release|Any CPU + {592B7FC1-FD96-4881-8F35-DB2DA184CAF2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {592B7FC1-FD96-4881-8F35-DB2DA184CAF2}.Debug|Any CPU.Build.0 = Debug|Any CPU + {592B7FC1-FD96-4881-8F35-DB2DA184CAF2}.Debug|x64.ActiveCfg = Debug|x64 + {592B7FC1-FD96-4881-8F35-DB2DA184CAF2}.Debug|x64.Build.0 = Debug|x64 + {592B7FC1-FD96-4881-8F35-DB2DA184CAF2}.Debug|x86.ActiveCfg = Debug|x86 + {592B7FC1-FD96-4881-8F35-DB2DA184CAF2}.Debug|x86.Build.0 = Debug|x86 + {592B7FC1-FD96-4881-8F35-DB2DA184CAF2}.Release|Any CPU.ActiveCfg = Release|Any CPU + {592B7FC1-FD96-4881-8F35-DB2DA184CAF2}.Release|Any CPU.Build.0 = Release|Any CPU + {592B7FC1-FD96-4881-8F35-DB2DA184CAF2}.Release|x64.ActiveCfg = Release|x64 + {592B7FC1-FD96-4881-8F35-DB2DA184CAF2}.Release|x64.Build.0 = Release|x64 + {592B7FC1-FD96-4881-8F35-DB2DA184CAF2}.Release|x86.ActiveCfg = Release|x86 + {592B7FC1-FD96-4881-8F35-DB2DA184CAF2}.Release|x86.Build.0 = Release|x86 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE