fix engine for UNIX

main
Ogoun 6 months ago
parent fedfec2a4c
commit e04130f15e

112
.gitignore vendored

@ -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/

@ -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": ""
}
}
}

@ -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")]

@ -1 +1 @@
d8b06ec6e68c19fe6706483b922cb556bc7a89a968b82d3f71aad430a8fb84fb
5560cd1002dbe4539f9e43ae46cbe690145b0a4b2edd4a4eed18fabd21a0c27c

@ -1 +1 @@
a2e308b4ff36099adb277b73d1c52b3408af94527cd7ccc25e5a636640e0c29e
04a50ceab159ea786c56ba8ea60d0513868855b532afb5140660b2b597b148c8

@ -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

@ -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",

@ -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": {

@ -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": [

@ -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
{
}
}

@ -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
{
}
}

@ -1,15 +0,0 @@
namespace Sleopok.Engine
{
public class Engine
{
public IIndexBuilder<T> CreateBuilder<T>(IndexOptions<T> options)
{
return null;
}
public IIndexReader<T> CreateReader<T>(IndexOptions<T> options)
{
return 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<T>
{
}
}

@ -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<T>
{
}
}

@ -1,9 +0,0 @@
namespace Sleopok.Engine
{
public sealed class IndexOptions<T>
{
public string IndexName { get; set; }
public string IndexPath { get; set; }
public Dictionary<String, Func<T, string>> Mapping { get; set; }
}
}

@ -0,0 +1,57 @@
using System.Reflection;
using ZeroLevel;
using ZeroLevel.Services.FileSystem;
using ZeroLevel.Services.Reflection;
namespace Sleopok.Engine.Models
{
internal class IndexInfo<T>
{
private readonly Func<T, string> _identityExtractor;
private readonly List<SleoField> _fields;
public string GetId(T item) => _identityExtractor.Invoke(item);
public IReadOnlyCollection<SleoField> Fields => _fields;
public IndexInfo(Func<T, string> identityExtractor)
{
_identityExtractor = identityExtractor;
_fields = new List<SleoField>();
typeof(T).GetMembers(
BindingFlags.Public |
BindingFlags.FlattenHierarchy |
BindingFlags.GetField |
BindingFlags.GetProperty |
BindingFlags.Instance).
Do(members =>
{
foreach (var member in members)
{
var sleoAttribute = member.GetCustomAttribute<SleoIndexAttribute>();
if (sleoAttribute == null) continue;
Func<object, object> 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
});
}
});
}
}
}

@ -0,0 +1,10 @@
namespace Sleopok.Engine.Models
{
internal sealed class SleoField
{
public string Name;
public float Boost;
public bool ExactMatch;
public Func<object, object> Getter;
}
}

@ -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;
}
}
}

@ -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<string[]>(bytes);
}
public static byte[] Compress(byte[] data)
{
using (var msi = new MemoryStream(data))

@ -0,0 +1,9 @@
namespace Sleopok.Engine.Services.Indexes
{
public interface IIndexBuilder<T>
: IDisposable
{
Task Write(IEnumerable<T> batch);
Task Complete();
}
}

@ -0,0 +1,7 @@
namespace Sleopok.Engine.Services.Indexes
{
public interface IIndexReader<T>
{
Task<Dictionary<string, float>> Search(string[] tokens, bool exactMatch);
}
}

@ -0,0 +1,55 @@
using Sleopok.Engine.Models;
using Sleopok.Engine.Services.Storage;
namespace Sleopok.Engine.Services.Indexes
{
internal sealed class IndexBuilder<T>
: IIndexBuilder<T>
{
private readonly DataStorage _storage;
private readonly IndexInfo<T> _indexInfo;
private readonly Dictionary<string, IPartitionDataWriter> Indexers = new Dictionary<string, IPartitionDataWriter>();
public IndexBuilder(DataStorage storage, IndexInfo<T> 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<T> 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();
}
}
}

@ -0,0 +1,44 @@
using Sleopok.Engine.Models;
using Sleopok.Engine.Services.Storage;
namespace Sleopok.Engine.Services.Indexes
{
internal sealed class IndexReader<T>
: IIndexReader<T>
{
private readonly DataStorage _storage;
private readonly IndexInfo<T> _indexInfo;
public IndexReader(DataStorage storage, IndexInfo<T> indexInfo)
{
_storage = storage;
_indexInfo = indexInfo;
}
public async Task<Dictionary<string, float>> Search(string[] tokens, bool exactMatch)
{
var documents = new Dictionary<string, float>();
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;
}
}
}

@ -0,0 +1,166 @@
using ZeroLevel.Services.HashFunctions;
using ZeroLevel.Services.PartitionStorage;
namespace Sleopok.Engine.Services.Storage
{
public sealed class DataStorage
{
private readonly IStore<string, string, byte[], StoreMetadata> _store;
private class DateSourceWriter :
IPartitionDataWriter
{
private readonly IStorePartitionBuilder<string, string, byte[]> _builder;
public DateSourceWriter(IStorePartitionBuilder<string, string, byte[]> 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<string, string, byte[]>(
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<string>(true, await r.ReadStringAsync()); } catch { return new DeserializeResult<string>(false, string.Empty); } },
async (r) => { try { return new DeserializeResult<string>(true, await r.ReadStringAsync()); } catch { return new DeserializeResult<string>(false, string.Empty); } },
async (r) => { try { return new DeserializeResult<byte[]>(true, await r.ReadBytesAsync()); } catch { return new DeserializeResult<byte[]>(false, new byte[0]); } });
var options = new StoreOptions<string, string, byte[], StoreMetadata>
{
Index = new IndexOptions
{
Enabled = true,
StepType = IndexStepType.Step,
StepValue = 32,
EnableIndexInMemoryCachee = false
},
RootFolder = rootFolder,
FilePartition = new StoreFilePartition<string, StoreMetadata>("Token hash", (token, _) => Math.Abs(StringHash.DotNetFullHash(token) % 47).ToString()),
MergeFunction = list =>
{
return Compressor.Compress(list.OrderBy(c => c).ToArray());
},
Partitions = new List<StoreCatalogPartition<StoreMetadata>>
{
new StoreCatalogPartition<StoreMetadata>("Field", m => m.Field)
},
KeyComparer = (left, right) => string.Compare(left, right, true),
ThreadSafeWriting = true
};
_store = new Store<string, string, byte[], StoreMetadata>(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<Dictionary<string, float>> GetDocuments(string field, string[] tokens, float boost, bool exactMatch)
{
var documents = new Dictionary<string, PositionDocScore>();
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;
}
}
}

@ -0,0 +1,10 @@
namespace Sleopok.Engine.Services.Storage
{
public interface IPartitionDataWriter
: IDisposable
{
Task Write(string token, string document);
Task Complete();
long GetTotalRecords();
}
}

@ -0,0 +1,13 @@
namespace Sleopok.Engine.Services.Storage
{
/// <summary>
/// Мета
/// </summary>
public sealed class StoreMetadata
{
/// <summary>
/// Поле документа
/// </summary>
public string Field { get; set; }
}
}

@ -0,0 +1,14 @@
namespace Sleopok.Engine.Services.Storage
{
public sealed class StoreRecord
{
/// <summary>
/// Токен / ключ
/// </summary>
public string Token { get; set; }
/// <summary>
/// Идентификаторы документов / значение
/// </summary>
public string[] Documents { get; set; }
}
}

@ -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<T>
{
private readonly DataStorage _storage;
private readonly IndexInfo<T> _indexInfo;
public SleoEngine(string indexFolder, Func<T, string> identityExtractor)
{
_storage = new DataStorage(indexFolder);
_indexInfo = new IndexInfo<T>(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<T> CreateBuilder()
{
return new IndexBuilder<T>(_storage, _indexInfo);
}
public IIndexReader<T> CreateReader()
{
return new IndexReader<T>(_storage, _indexInfo);
}
}
}

@ -7,7 +7,7 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="ZeroLevel" Version="3.4.0.8" />
<ProjectReference Include="F:\Documents\GitHub\Zero\ZeroLevel\ZeroLevel.csproj" />
</ItemGroup>
</Project>

@ -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": ""
}
}
}

@ -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")]

@ -1 +1 @@
f426e6a434a2fc8387e3d537276d02f6cf81d1a9ad7d6c180ee6ed07027c56e6
77e8df075c7d1f0f3dc236560a0047f015aa2ee269d969915745f95d3be4c2de

@ -1 +1 @@
5da1357c9eefef2d7ad7c9bb0c603c0f7ef9b42dc2cecea34ee721a98d798d52
41bfc06d75e1228dd2a09cea218be6ef02f4290e829a20aa336f3a48d826fcfc

@ -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

@ -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",

@ -13,14 +13,4 @@
<SourceRoot Include="C:\Users\Ogoun\.nuget\packages\" />
<SourceRoot Include="C:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages\" />
</ItemGroup>
<ItemGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
<Content Include="$(NuGetPackageRoot)zerolevel\3.4.0.8\contentFiles\any\net6.0\zero.ico" Condition="Exists('$(NuGetPackageRoot)zerolevel\3.4.0.8\contentFiles\any\net6.0\zero.ico')">
<NuGetPackageId>ZeroLevel</NuGetPackageId>
<NuGetPackageVersion>3.4.0.8</NuGetPackageVersion>
<NuGetItemType>Content</NuGetItemType>
<Pack>false</Pack>
<Private>False</Private>
<Link>zero.ico</Link>
</Content>
</ItemGroup>
</Project>

@ -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",

@ -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": [

@ -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<string, string> _titles = new Dictionary<string, string>
{
{ "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<BookDocument>(@"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]}");
}
}
}
}

@ -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": ""
}
}
}

@ -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")]

@ -1 +1 @@
d17f9dca864c4d8df026d969f5b6ea99b9c64210522de05cbf223c73c87241f4
5ab19946e0862a233cc54d291fd7a3f27e64b66b5ba0deed43cb098d1e9e2950

@ -1 +1 @@
41452b14e8c8ea81ab536b55333608fe5ea90183b89453bd74806e2add53c90c
0a16ec38b6c4b5fcb1005d7c9ec70a307d026e3be3d426b201c8e1f37a231ec7

@ -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

@ -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",

@ -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": {

@ -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": [

@ -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

Loading…
Cancel
Save

Powered by TurnKey Linux.