add relation count methods

rev2
cosmonaut 2023-11-02 12:15:21 -07:00
parent d3c4c12605
commit 6f50e78188
2 changed files with 28 additions and 0 deletions

View File

@ -25,8 +25,12 @@ public abstract class EntityComponentReader
protected ReverseSpanEnumerator<EntityId> OutRelations<T>(in EntityId entity) where T : unmanaged => World.OutRelations<T>(entity);
protected EntityId OutRelationSingleton<T>(in EntityId entity) where T : unmanaged => World.OutRelationSingleton<T>(entity);
protected bool HasOutRelation<T>(in EntityId entity) where T : unmanaged => World.HasOutRelation<T>(entity);
protected int OutRelationCount<T>(in EntityId entity) where T : unmanaged => World.OutRelationCount<T>(entity);
protected EntityId NthOutRelation<T>(in EntityId entity, int n) where T : unmanaged => World.NthOutRelation<T>(entity, n);
protected ReverseSpanEnumerator<EntityId> InRelations<T>(in EntityId entity) where T : unmanaged => World.InRelations<T>(entity);
protected EntityId InRelationSingleton<T>(in EntityId entity) where T : unmanaged => World.InRelationSingleton<T>(entity);
protected bool HasInRelation<T>(in EntityId entity) where T : unmanaged => World.HasInRelation<T>(entity);
protected int InRelationCount<T>(in EntityId entity) where T : unmanaged => World.InRelationCount<T>(entity);
protected EntityId NthInRelation<T>(in EntityId entity, int n) where T : unmanaged => World.NthInRelation<T>(entity, n);
}

View File

@ -407,6 +407,18 @@ public class World : IDisposable
return relationStorage.HasOutRelation(entity);
}
public int OutRelationCount<T>(in EntityId entity) where T : unmanaged
{
var relationStorage = GetRelationStorage<T>();
return relationStorage.OutRelationCount(entity);
}
public EntityId NthOutRelation<T>(in EntityId entity, int n) where T : unmanaged
{
var relationStorage = GetRelationStorage<T>();
return relationStorage.OutNth(entity, n);
}
public ReverseSpanEnumerator<EntityId> InRelations<T>(EntityId entity) where T : unmanaged
{
var relationStorage = GetRelationStorage<T>();
@ -425,6 +437,18 @@ public class World : IDisposable
return relationStorage.HasInRelation(entity);
}
public int InRelationCount<T>(in EntityId entity) where T : unmanaged
{
var relationStorage = GetRelationStorage<T>();
return relationStorage.InRelationCount(entity);
}
public EntityId NthInRelation<T>(in EntityId entity, int n) where T : unmanaged
{
var relationStorage = GetRelationStorage<T>();
return relationStorage.InNth(entity, n);
}
// used as a fast path by Archetype.ClearAll and snapshot restore
internal void FreeEntity(EntityId entityId)
{