[*] update ToArray add ToCollection for collections

This commit is contained in:
Mikhail 2024-08-31 14:51:13 +08:00
parent e271c77cab
commit ca232ac33b
2 changed files with 76 additions and 5 deletions

View File

@ -90,6 +90,10 @@ namespace DCFApixels.DragonECS
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public int[] ToArray() { return _source.ToArray(); }
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public int ToArray(ref int[] dynamicBuffer) { return _source.ToArray(ref dynamicBuffer); }
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public void ToCollection(ICollection<int> collection) { _source.ToCollection(collection); }
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public EcsGroup.Enumerator GetEnumerator() { return _source.GetEnumerator(); }
[MethodImpl(MethodImplOptions.AggressiveInlining)]
@ -387,13 +391,32 @@ namespace DCFApixels.DragonECS
{
return new EcsSpan(WorldID, _dense, 1, _count);
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public int[] ToArray()
{
int[] result = new int[_count];
Array.Copy(_dense, 1, result, 0, _count);
return result;
}
public int ToArray(ref int[] dynamicBuffer)
{
if (dynamicBuffer.Length < _count)
{
Array.Resize(ref dynamicBuffer, ArrayUtility.NormalizeSizeToPowerOfTwo(_count));
}
int i = 0;
foreach (var e in this)
{
dynamicBuffer[i++] = e;
}
return i;
}
public void ToCollection(ICollection<int> collection)
{
foreach (var e in this)
{
collection.Add(e);
}
}
#endregion
#region Set operations

View File

@ -1,5 +1,6 @@
using DCFApixels.DragonECS.Internal;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Runtime.CompilerServices;
@ -78,13 +79,32 @@ namespace DCFApixels.DragonECS
}
#endregion
#region Slice/ToArry
#region Slice/ToArray
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public EcsSpan Slice(int start) { return new EcsSpan(_worldID, _values.Slice(start)); }
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public EcsSpan Slice(int start, int length) { return new EcsSpan(_worldID, _values.Slice(start, length)); }
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public int[] ToArray() { return _values.ToArray(); }
public int ToArray(ref int[] dynamicBuffer)
{
if (dynamicBuffer.Length < _values.Length)
{
Array.Resize(ref dynamicBuffer, ArrayUtility.NormalizeSizeToPowerOfTwo(_values.Length));
}
int i = 0;
foreach (var e in this)
{
dynamicBuffer[i++] = e;
}
return i;
}
public void ToCollection(ICollection<int> collection)
{
foreach (var e in this)
{
collection.Add(e);
}
}
#endregion
#region operators
@ -199,8 +219,36 @@ namespace DCFApixels.DragonECS
public EcsLongsSpan Slice(int start, int length) { return new EcsLongsSpan(_source.Slice(start, length)); }
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public EcsSpan ToSpan() { return _source; }
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public int[] ToArray() { return _source.ToArray(); }
public entlong[] ToArray()
{
entlong[] result = new entlong[_source.Count];
int i = 0;
foreach (var e in this)
{
result[i++] = e;
}
return result;
}
public int ToArray(ref entlong[] dynamicBuffer)
{
if (dynamicBuffer.Length < _source.Count)
{
Array.Resize(ref dynamicBuffer, ArrayUtility.NormalizeSizeToPowerOfTwo(_source.Count));
}
int i = 0;
foreach (var e in this)
{
dynamicBuffer[i++] = e;
}
return i;
}
public void ToCollection(ICollection<entlong> collection)
{
foreach (var e in this)
{
collection.Add(e);
}
}
#endregion
#region operators