diff --git a/src/EcsWorld.cs b/src/EcsWorld.cs index 20433dd..5fba16a 100644 --- a/src/EcsWorld.cs +++ b/src/EcsWorld.cs @@ -170,23 +170,23 @@ namespace DCFApixels.DragonECS #endregion #region Where Query - public EcsWhereResult WhereFor(EcsReadonlyGroup sourceGroup, out TSubject subject) where TSubject : EcsSubject + public EcsReadonlyGroup WhereFor(EcsReadonlyGroup sourceGroup, out TSubject subject) where TSubject : EcsSubject { var executor = GetExecutor>(); subject = executor.Subject; return executor.ExecuteFor(sourceGroup); } - public EcsWhereResult WhereFor(EcsReadonlyGroup sourceGroup) where TSubject : EcsSubject + public EcsReadonlyGroup WhereFor(EcsReadonlyGroup sourceGroup) where TSubject : EcsSubject { return GetExecutor>().ExecuteFor(sourceGroup); } - public EcsWhereResult Where(out TSubject subject) where TSubject : EcsSubject + public EcsReadonlyGroup Where(out TSubject subject) where TSubject : EcsSubject { var executor = GetExecutor>(); subject = executor.Subject; return executor.Execute(); } - public EcsWhereResult Where() where TSubject : EcsSubject + public EcsReadonlyGroup Where() where TSubject : EcsSubject { return GetExecutor>().Execute(); } diff --git a/src/Executors/EcsWhereExecutor.cs b/src/Executors/EcsWhereExecutor.cs index e29288a..df9efb7 100644 --- a/src/Executors/EcsWhereExecutor.cs +++ b/src/Executors/EcsWhereExecutor.cs @@ -7,7 +7,9 @@ private long _executeVersion; +#if (DEBUG && !DISABLE_DEBUG) || ENABLE_DRAGONECS_ASSERT_CHEKS private EcsProfilerMarker _executeWhere = new EcsProfilerMarker("Where"); +#endif #region Properties public TSubject Subject => _subject; @@ -27,47 +29,20 @@ #endregion #region Methods - public EcsWhereResult Execute() => ExecuteFor(_subject.World.Entities); - public EcsWhereResult ExecuteFor(EcsReadonlyGroup sourceGroup) + public EcsReadonlyGroup Execute() => ExecuteFor(_subject.World.Entities); + public EcsReadonlyGroup ExecuteFor(EcsReadonlyGroup sourceGroup) { +#if (DEBUG && !DISABLE_DEBUG) || ENABLE_DRAGONECS_ASSERT_CHEKS using (_executeWhere.Auto()) +#endif { #if (DEBUG && !DISABLE_DEBUG) || ENABLE_DRAGONECS_ASSERT_CHEKS if (sourceGroup.IsNull) throw new System.ArgumentNullException();//TODO составить текст исключения. #endif _subject.GetIteratorFor(sourceGroup).CopyTo(_filteredGroup); - return new EcsWhereResult(this, _filteredGroup.Readonly); + return _filteredGroup.Readonly; } } - #endregion +#endregion } - - #region WhereExecuter Results - public readonly ref struct EcsWhereResult where TSubject : EcsSubject - { - public readonly TSubject s; - private readonly EcsWhereExecutor _executer; - public readonly EcsReadonlyGroup group; - private readonly long _version; - public bool IsRelevant => _version == _executer.ExecuteVersion; - public EcsWhereResult(EcsWhereExecutor 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 }