mirror of
https://github.com/DCFApixels/DragonECS-Graphs.git
synced 2025-09-17 19:24:36 +08:00
fixes/refactoring
This commit is contained in:
parent
4c6e0ed045
commit
74c5f8e8c5
@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"name": "DCFApixels.DragonECS.Relations",
|
"name": "DCFApixels.DragonECS.Graphs",
|
||||||
"rootNamespace": "DCFApixels",
|
"rootNamespace": "DCFApixels",
|
||||||
"references": [
|
"references": [
|
||||||
"GUID:abb125fa67fff1e45914d0825236f608"
|
"GUID:abb125fa67fff1e45914d0825236f608"
|
||||||
],
|
],
|
||||||
"includePlatforms": [],
|
"includePlatforms": [],
|
||||||
"excludePlatforms": [],
|
"excludePlatforms": [],
|
||||||
"allowUnsafeCode": false,
|
"allowUnsafeCode": true,
|
||||||
"overrideReferences": false,
|
"overrideReferences": false,
|
||||||
"precompiledReferences": [],
|
"precompiledReferences": [],
|
||||||
"autoReferenced": true,
|
"autoReferenced": true,
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
fileFormatVersion: 2
|
fileFormatVersion: 2
|
||||||
guid: 245c8b2a0b1b736438bc5016f536df7b
|
guid: 72248d53a53519847b5b360dd02c37c5
|
||||||
MonoImporter:
|
MonoImporter:
|
||||||
externalObjects: {}
|
externalObjects: {}
|
||||||
serializedVersion: 2
|
serializedVersion: 2
|
@ -19,7 +19,7 @@ namespace DCFApixels.DragonECS
|
|||||||
private readonly EndWorldHandler _endWorldHandler;
|
private readonly EndWorldHandler _endWorldHandler;
|
||||||
private readonly LoopWorldHandler _loopWorldHandler;
|
private readonly LoopWorldHandler _loopWorldHandler;
|
||||||
|
|
||||||
private RelEntityInfo[] _relEntityInfos; //N * (N - 1) / 2
|
private RelationInfo[] _relEntityInfos; //N * (N - 1) / 2
|
||||||
private readonly SparseMatrix _matrix;
|
private readonly SparseMatrix _matrix;
|
||||||
|
|
||||||
private bool _isLoop;
|
private bool _isLoop;
|
||||||
@ -67,7 +67,7 @@ namespace DCFApixels.DragonECS
|
|||||||
|
|
||||||
_isLoop = startWorld == endWorld;
|
_isLoop = startWorld == endWorld;
|
||||||
|
|
||||||
_relEntityInfos = new RelEntityInfo[arcWorld.Capacity];
|
_relEntityInfos = new RelationInfo[arcWorld.Capacity];
|
||||||
_matrix = new SparseMatrix(arcWorld.Capacity);
|
_matrix = new SparseMatrix(arcWorld.Capacity);
|
||||||
|
|
||||||
_arcWorldHandler = new ArcWorldHandler(this);
|
_arcWorldHandler = new ArcWorldHandler(this);
|
||||||
@ -119,7 +119,7 @@ namespace DCFApixels.DragonECS
|
|||||||
{
|
{
|
||||||
int relEntityID = _arcWorld.NewEntity();
|
int relEntityID = _arcWorld.NewEntity();
|
||||||
_matrix.Add(startEntityID, endEntityID, relEntityID);
|
_matrix.Add(startEntityID, endEntityID, relEntityID);
|
||||||
_relEntityInfos[relEntityID] = new RelEntityInfo(startEntityID, endEntityID);
|
_relEntityInfos[relEntityID] = new RelationInfo(startEntityID, endEntityID);
|
||||||
return relEntityID;
|
return relEntityID;
|
||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
@ -156,9 +156,9 @@ namespace DCFApixels.DragonECS
|
|||||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
public void ClearRelation_Internal(int relEntityID)
|
public void ClearRelation_Internal(int relEntityID)
|
||||||
{
|
{
|
||||||
ref RelEntityInfo info = ref _relEntityInfos[relEntityID];
|
ref RelationInfo info = ref _relEntityInfos[relEntityID];
|
||||||
_matrix.TryDel(info.start, info.end);
|
_matrix.TryDel(info.start, info.end);
|
||||||
info = RelEntityInfo.Empty;
|
info = RelationInfo.Empty;
|
||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
@ -170,16 +170,16 @@ namespace DCFApixels.DragonECS
|
|||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return !_relEntityInfos[relEntityID].IsEmpty;
|
return !_relEntityInfos[relEntityID].IsNull;
|
||||||
}
|
}
|
||||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
public RelEntityInfo GetRelationInfo(int relEntityID)
|
public StartEnd GetRelationInfo(int relEntityID)
|
||||||
{
|
{
|
||||||
if (relEntityID <= 0 || relEntityID >= _relEntityInfos.Length)
|
if (relEntityID <= 0 || relEntityID >= _relEntityInfos.Length)
|
||||||
{
|
{
|
||||||
Throw.UndefinedException();
|
Throw.UndefinedException();
|
||||||
}
|
}
|
||||||
return _relEntityInfos[relEntityID];
|
return new StartEnd(_relEntityInfos[relEntityID]);
|
||||||
}
|
}
|
||||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
public int GetRelStart(int relEntityID)
|
public int GetRelStart(int relEntityID)
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
fileFormatVersion: 2
|
fileFormatVersion: 2
|
||||||
guid: 15bd591d98596324aaf149538dfbb174
|
guid: 8bbdbeffc4dbc37478284bfc4d2c8d59
|
||||||
MonoImporter:
|
MonoImporter:
|
||||||
externalObjects: {}
|
externalObjects: {}
|
||||||
serializedVersion: 2
|
serializedVersion: 2
|
@ -1,5 +1,4 @@
|
|||||||
using DCFApixels.DragonECS.Graphs.Internal;
|
using DCFApixels.DragonECS.Graphs.Internal;
|
||||||
using DCFApixels.DragonECS.Graphs.Utils;
|
|
||||||
using System;
|
using System;
|
||||||
|
|
||||||
namespace DCFApixels.DragonECS
|
namespace DCFApixels.DragonECS
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
fileFormatVersion: 2
|
fileFormatVersion: 2
|
||||||
guid: 56fd7412f01e8be4485580a7860b1331
|
guid: 1ebb7cb8c3ca3e74dbcec878a032442e
|
||||||
MonoImporter:
|
MonoImporter:
|
||||||
externalObjects: {}
|
externalObjects: {}
|
||||||
serializedVersion: 2
|
serializedVersion: 2
|
8
src/Executors.meta
Normal file
8
src/Executors.meta
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: c3e96147ad8229048bfd07d82236327c
|
||||||
|
folderAsset: yes
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
11
src/Executors/EcsJoinExecutor.cs.meta
Normal file
11
src/Executors/EcsJoinExecutor.cs.meta
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 37a368fc468a4f845ba8f0426d44ac46
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
8
src/Internal.meta
Normal file
8
src/Internal.meta
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 73c4fcc6529a39342a22a06cd2eef4f9
|
||||||
|
folderAsset: yes
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
11
src/Internal/ArrayUtility.cs.meta
Normal file
11
src/Internal/ArrayUtility.cs.meta
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: e18d76e777aacc74d87b74a4160f4dd4
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
11
src/Internal/BitsUtility.cs.meta
Normal file
11
src/Internal/BitsUtility.cs.meta
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 20978cdfe73c32d49952cb225e32a5b8
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
@ -6,9 +6,9 @@ namespace DCFApixels.DragonECS.Graphs.Internal
|
|||||||
{
|
{
|
||||||
[StructLayout(LayoutKind.Sequential, Pack = 4, Size = 8)]
|
[StructLayout(LayoutKind.Sequential, Pack = 4, Size = 8)]
|
||||||
[Serializable]
|
[Serializable]
|
||||||
internal readonly struct RelEntityInfo : IEquatable<RelEntityInfo>
|
internal readonly struct RelationInfo : IEquatable<RelationInfo>
|
||||||
{
|
{
|
||||||
public static readonly RelEntityInfo Empty = new RelEntityInfo();
|
public static readonly RelationInfo Empty = new RelationInfo();
|
||||||
|
|
||||||
/// <summary>Start vertex entity ID.</summary>
|
/// <summary>Start vertex entity ID.</summary>
|
||||||
public readonly int start;
|
public readonly int start;
|
||||||
@ -16,15 +16,21 @@ namespace DCFApixels.DragonECS.Graphs.Internal
|
|||||||
public readonly int end;
|
public readonly int end;
|
||||||
|
|
||||||
#region Properties
|
#region Properties
|
||||||
public bool IsEmpty
|
public bool IsNull
|
||||||
{
|
{
|
||||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
get => start == 0 && end == 0;
|
get { return start == 0 && end == 0; }
|
||||||
|
}
|
||||||
|
public bool IsLoop
|
||||||
|
{
|
||||||
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
|
get { return start == end; }
|
||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
#region Constructor/Deconstruct
|
||||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
internal RelEntityInfo(int startEntity, int endEntity)
|
internal RelationInfo(int startEntity, int endEntity)
|
||||||
{
|
{
|
||||||
start = startEntity;
|
start = startEntity;
|
||||||
end = endEntity;
|
end = endEntity;
|
||||||
@ -35,21 +41,22 @@ namespace DCFApixels.DragonECS.Graphs.Internal
|
|||||||
start = this.start;
|
start = this.start;
|
||||||
end = this.end;
|
end = this.end;
|
||||||
}
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
#region operators
|
#region operators
|
||||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
public static bool operator ==(RelEntityInfo a, RelEntityInfo b) => a.start == b.start && a.end == b.end;
|
public static bool operator ==(RelationInfo a, RelationInfo b) { return a.start == b.start && a.end == b.end; }
|
||||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
public static bool operator !=(RelEntityInfo a, RelEntityInfo b) => a.start != b.start || a.end != b.end;
|
public static bool operator !=(RelationInfo a, RelationInfo b) { return a.start != b.start || a.end != b.end; }
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Other
|
#region Other
|
||||||
public override bool Equals(object obj) => obj is RelEntityInfo targets && targets == this;
|
public override bool Equals(object obj) { return obj is RelationInfo targets && targets == this; }
|
||||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
public bool Equals(RelEntityInfo other) => this == other;
|
public bool Equals(RelationInfo other) { return this == other; }
|
||||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
public override int GetHashCode() => ~start ^ end;
|
public override int GetHashCode() { return start ^ BitsUtility.NextXorShiftState(end); }
|
||||||
public override string ToString() => $"arc({start} -> {end})";
|
public override string ToString() { return $"arc({start} -> {end})"; }
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
}
|
}
|
11
src/Internal/RelationInfo.cs.meta
Normal file
11
src/Internal/RelationInfo.cs.meta
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: dbff41f77f58de74e8a869e63278a16c
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
11
src/Internal/SparseArray.cs.meta
Normal file
11
src/Internal/SparseArray.cs.meta
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: c3dd2571d8641a142a77b4dc93c8a33b
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
11
src/Internal/SparseMatrix.cs.meta
Normal file
11
src/Internal/SparseMatrix.cs.meta
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 33f08dac2af94224394c92df946092b8
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
11
src/Internal/UnsafeArray.cs.meta
Normal file
11
src/Internal/UnsafeArray.cs.meta
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: a40924dd997ba8443b5dbe58940f3d0d
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
@ -1,47 +0,0 @@
|
|||||||
using System.Runtime.CompilerServices;
|
|
||||||
|
|
||||||
namespace DCFApixels.DragonECS
|
|
||||||
{
|
|
||||||
public readonly ref struct StartRelEnd
|
|
||||||
{
|
|
||||||
/// <summary>Start vertex entity ID.</summary>
|
|
||||||
public readonly int start;
|
|
||||||
/// <summary>Relation entity ID.</summary>
|
|
||||||
public readonly int rel;
|
|
||||||
/// <summary>End vertex entity ID.</summary>
|
|
||||||
public readonly int end;
|
|
||||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
|
||||||
public StartRelEnd(int start, int rel, int end)
|
|
||||||
{
|
|
||||||
this.start = start;
|
|
||||||
this.rel = rel;
|
|
||||||
this.end = end;
|
|
||||||
}
|
|
||||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
|
||||||
public void Deconstruct(out int start, out int rel, out int end)
|
|
||||||
{
|
|
||||||
start = this.start;
|
|
||||||
rel = this.rel;
|
|
||||||
end = this.end;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
public readonly ref struct RelEnd
|
|
||||||
{
|
|
||||||
/// <summary>Relation entity ID.</summary>
|
|
||||||
public readonly int rel;
|
|
||||||
/// <summary>End vertex entity ID.</summary>
|
|
||||||
public readonly int end;
|
|
||||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
|
||||||
public RelEnd(int rel, int end)
|
|
||||||
{
|
|
||||||
this.rel = rel;
|
|
||||||
this.end = end;
|
|
||||||
}
|
|
||||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
|
||||||
public void Deconstruct(out int rel, out int end)
|
|
||||||
{
|
|
||||||
rel = this.rel;
|
|
||||||
end = this.end;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
166
src/Utils/Rels.cs
Normal file
166
src/Utils/Rels.cs
Normal file
@ -0,0 +1,166 @@
|
|||||||
|
using DCFApixels.DragonECS.Graphs.Internal;
|
||||||
|
using System;
|
||||||
|
using System.Runtime.CompilerServices;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
|
namespace DCFApixels.DragonECS
|
||||||
|
{
|
||||||
|
[StructLayout(LayoutKind.Sequential, Pack = 4, Size = 8)]
|
||||||
|
[Serializable]
|
||||||
|
public readonly ref struct StartEnd
|
||||||
|
{
|
||||||
|
/// <summary>Start vertex entity ID.</summary>
|
||||||
|
public readonly int start;
|
||||||
|
/// <summary>End vertex entity ID.</summary>
|
||||||
|
public readonly int end;
|
||||||
|
|
||||||
|
#region Properties
|
||||||
|
public bool IsNull
|
||||||
|
{
|
||||||
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
|
get { return start == 0 && end == 0; }
|
||||||
|
}
|
||||||
|
public bool IsLoop
|
||||||
|
{
|
||||||
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
|
get { return start == end; }
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Constructor/Deconstruct
|
||||||
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
|
internal StartEnd(RelationInfo relInfo)
|
||||||
|
{
|
||||||
|
start = relInfo.start;
|
||||||
|
end = relInfo.end;
|
||||||
|
}
|
||||||
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
|
internal StartEnd(int startEntity, int endEntity)
|
||||||
|
{
|
||||||
|
start = startEntity;
|
||||||
|
end = endEntity;
|
||||||
|
}
|
||||||
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
|
public void Deconstruct(out int start, out int end)
|
||||||
|
{
|
||||||
|
start = this.start;
|
||||||
|
end = this.end;
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region operators
|
||||||
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
|
public static bool operator ==(StartEnd a, StartEnd b) { return a.start == b.start && a.end == b.end; }
|
||||||
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
|
public static bool operator !=(StartEnd a, StartEnd b) { return a.start != b.start || a.end != b.end; }
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Other
|
||||||
|
public override bool Equals(object obj) { throw new NotImplementedException(); }
|
||||||
|
public override int GetHashCode() { throw new NotImplementedException(); }
|
||||||
|
|
||||||
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
|
public bool Equals(StartEnd other) { return this == other; }
|
||||||
|
public override string ToString() { return $"arc({start} -> {end})"; }
|
||||||
|
#endregion
|
||||||
|
}
|
||||||
|
public readonly ref struct StartRelEnd
|
||||||
|
{
|
||||||
|
/// <summary>Start vertex entity ID.</summary>
|
||||||
|
public readonly int start;
|
||||||
|
/// <summary>Relation entity ID.</summary>
|
||||||
|
public readonly int rel;
|
||||||
|
/// <summary>End vertex entity ID.</summary>
|
||||||
|
public readonly int end;
|
||||||
|
|
||||||
|
#region Properties
|
||||||
|
public bool IsNull
|
||||||
|
{
|
||||||
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
|
get { return rel == 0 || (start == 0 && end == 0); }
|
||||||
|
}
|
||||||
|
public bool IsLoop
|
||||||
|
{
|
||||||
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
|
get { return start == end; }
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Constructor/Deconstruct
|
||||||
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
|
public StartRelEnd(int start, int rel, int end)
|
||||||
|
{
|
||||||
|
this.start = start;
|
||||||
|
this.rel = rel;
|
||||||
|
this.end = end;
|
||||||
|
}
|
||||||
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
|
public void Deconstruct(out int start, out int rel, out int end)
|
||||||
|
{
|
||||||
|
start = this.start;
|
||||||
|
rel = this.rel;
|
||||||
|
end = this.end;
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region operators
|
||||||
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
|
public static bool operator ==(StartRelEnd a, StartRelEnd b) { return a.start == b.start && a.rel == b.rel && a.end == b.end; }
|
||||||
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
|
public static bool operator !=(StartRelEnd a, StartRelEnd b) { return a.start != b.start || a.rel != b.rel || a.end != b.end; }
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Other
|
||||||
|
public override bool Equals(object obj) { throw new NotImplementedException(); }
|
||||||
|
public override int GetHashCode() { throw new NotImplementedException(); }
|
||||||
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
|
public bool Equals(StartRelEnd other) { return this == other; }
|
||||||
|
public override string ToString() { return $"arc({start} --({rel})-> {end})"; }
|
||||||
|
#endregion
|
||||||
|
}
|
||||||
|
public readonly ref struct RelEnd
|
||||||
|
{
|
||||||
|
/// <summary>Relation entity ID.</summary>
|
||||||
|
public readonly int rel;
|
||||||
|
/// <summary>End vertex entity ID.</summary>
|
||||||
|
public readonly int end;
|
||||||
|
|
||||||
|
#region Properties
|
||||||
|
public bool IsNull
|
||||||
|
{
|
||||||
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
|
get { return rel == 0; }
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Constructor/Deconstruct
|
||||||
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
|
public RelEnd(int rel, int end)
|
||||||
|
{
|
||||||
|
this.rel = rel;
|
||||||
|
this.end = end;
|
||||||
|
}
|
||||||
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
|
public void Deconstruct(out int rel, out int end)
|
||||||
|
{
|
||||||
|
rel = this.rel;
|
||||||
|
end = this.end;
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region operators
|
||||||
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
|
public static bool operator ==(RelEnd a, RelEnd b) { return a.rel == b.rel && a.end == b.end; }
|
||||||
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
|
public static bool operator !=(RelEnd a, RelEnd b) { return a.rel != b.rel || a.end != b.end; }
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Other
|
||||||
|
public override bool Equals(object obj) { throw new NotImplementedException(); }
|
||||||
|
public override int GetHashCode() { throw new NotImplementedException(); }
|
||||||
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
|
public bool Equals(RelEnd other) { return this == other; }
|
||||||
|
public override string ToString() { return $"arc(--({rel})-> {end})"; }
|
||||||
|
#endregion
|
||||||
|
}
|
||||||
|
}
|
11
src/Utils/Rels.cs.meta
Normal file
11
src/Utils/Rels.cs.meta
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: f15f529231efb91419dc996fc78319cf
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
Loading…
Reference in New Issue
Block a user