remove EcsWhereResult

This commit is contained in:
Mikhail 2023-06-02 03:33:33 +08:00
parent 7951cf27a8
commit 1c5ce4561b
2 changed files with 12 additions and 37 deletions

View File

@ -170,23 +170,23 @@ namespace DCFApixels.DragonECS
#endregion #endregion
#region Where Query #region Where Query
public EcsWhereResult<TSubject> WhereFor<TSubject>(EcsReadonlyGroup sourceGroup, out TSubject subject) where TSubject : EcsSubject public EcsReadonlyGroup WhereFor<TSubject>(EcsReadonlyGroup sourceGroup, out TSubject subject) where TSubject : EcsSubject
{ {
var executor = GetExecutor<EcsWhereExecutor<TSubject>>(); var executor = GetExecutor<EcsWhereExecutor<TSubject>>();
subject = executor.Subject; subject = executor.Subject;
return executor.ExecuteFor(sourceGroup); return executor.ExecuteFor(sourceGroup);
} }
public EcsWhereResult<TSubject> WhereFor<TSubject>(EcsReadonlyGroup sourceGroup) where TSubject : EcsSubject public EcsReadonlyGroup WhereFor<TSubject>(EcsReadonlyGroup sourceGroup) where TSubject : EcsSubject
{ {
return GetExecutor<EcsWhereExecutor<TSubject>>().ExecuteFor(sourceGroup); return GetExecutor<EcsWhereExecutor<TSubject>>().ExecuteFor(sourceGroup);
} }
public EcsWhereResult<TSubject> Where<TSubject>(out TSubject subject) where TSubject : EcsSubject public EcsReadonlyGroup Where<TSubject>(out TSubject subject) where TSubject : EcsSubject
{ {
var executor = GetExecutor<EcsWhereExecutor<TSubject>>(); var executor = GetExecutor<EcsWhereExecutor<TSubject>>();
subject = executor.Subject; subject = executor.Subject;
return executor.Execute(); return executor.Execute();
} }
public EcsWhereResult<TSubject> Where<TSubject>() where TSubject : EcsSubject public EcsReadonlyGroup Where<TSubject>() where TSubject : EcsSubject
{ {
return GetExecutor<EcsWhereExecutor<TSubject>>().Execute(); return GetExecutor<EcsWhereExecutor<TSubject>>().Execute();
} }

View File

@ -7,7 +7,9 @@
private long _executeVersion; private long _executeVersion;
#if (DEBUG && !DISABLE_DEBUG) || ENABLE_DRAGONECS_ASSERT_CHEKS
private EcsProfilerMarker _executeWhere = new EcsProfilerMarker("Where"); private EcsProfilerMarker _executeWhere = new EcsProfilerMarker("Where");
#endif
#region Properties #region Properties
public TSubject Subject => _subject; public TSubject Subject => _subject;
@ -27,47 +29,20 @@
#endregion #endregion
#region Methods #region Methods
public EcsWhereResult<TSubject> Execute() => ExecuteFor(_subject.World.Entities); public EcsReadonlyGroup Execute() => ExecuteFor(_subject.World.Entities);
public EcsWhereResult<TSubject> ExecuteFor(EcsReadonlyGroup sourceGroup) public EcsReadonlyGroup ExecuteFor(EcsReadonlyGroup sourceGroup)
{ {
#if (DEBUG && !DISABLE_DEBUG) || ENABLE_DRAGONECS_ASSERT_CHEKS
using (_executeWhere.Auto()) using (_executeWhere.Auto())
#endif
{ {
#if (DEBUG && !DISABLE_DEBUG) || ENABLE_DRAGONECS_ASSERT_CHEKS #if (DEBUG && !DISABLE_DEBUG) || ENABLE_DRAGONECS_ASSERT_CHEKS
if (sourceGroup.IsNull) throw new System.ArgumentNullException();//TODO составить текст исключения. if (sourceGroup.IsNull) throw new System.ArgumentNullException();//TODO составить текст исключения.
#endif #endif
_subject.GetIteratorFor(sourceGroup).CopyTo(_filteredGroup); _subject.GetIteratorFor(sourceGroup).CopyTo(_filteredGroup);
return new EcsWhereResult<TSubject>(this, _filteredGroup.Readonly); return _filteredGroup.Readonly;
} }
} }
#endregion #endregion
} }
#region WhereExecuter Results
public readonly ref struct EcsWhereResult<TSubject> where TSubject : EcsSubject
{
public readonly TSubject s;
private readonly EcsWhereExecutor<TSubject> _executer;
public readonly EcsReadonlyGroup group;
private readonly long _version;
public bool IsRelevant => _version == _executer.ExecuteVersion;
public EcsWhereResult(EcsWhereExecutor<TSubject> executer, EcsReadonlyGroup group)
{
_executer = executer;
_version = executer.ExecuteVersion;
s = executer.Subject;
this.group = group;
}
public EcsGroup.Enumerator GetEnumerator()
{
#if (DEBUG && !DISABLE_DEBUG) || ENABLE_DRAGONECS_ASSERT_CHEKS
if (!IsRelevant) throw new System.InvalidOperationException();//TODO составить текст исключения.
#endif
return group.GetEnumerator();
}
public override string ToString()
{
return group.ToString();
}
}
#endregion
} }