mirror of
https://github.com/DCFApixels/DragonECS.git
synced 2025-09-18 18:14:37 +08:00
refactoring
This commit is contained in:
parent
51bf6092c5
commit
02d2c646cc
@ -400,7 +400,7 @@ namespace DCFApixels.DragonECS
|
|||||||
{
|
{
|
||||||
if (++_count >= _dense.Length)
|
if (++_count >= _dense.Length)
|
||||||
{
|
{
|
||||||
Array.Resize(ref _dense, ArrayUtility.NormalizeSizeToPowerOfTwo(_count << 1));
|
Array.Resize(ref _dense, ArrayUtility.NextPow2(_count << 1));
|
||||||
}
|
}
|
||||||
_dense[_count] = entityID;
|
_dense[_count] = entityID;
|
||||||
|
|
||||||
@ -531,7 +531,7 @@ namespace DCFApixels.DragonECS
|
|||||||
{
|
{
|
||||||
if (minSize >= _dense.Length)
|
if (minSize >= _dense.Length)
|
||||||
{
|
{
|
||||||
Array.Resize(ref _dense, ArrayUtility.NormalizeSizeToPowerOfTwo_ClampOverflow(minSize));
|
Array.Resize(ref _dense, ArrayUtility.NextPow2_ClampOverflow(minSize));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -618,7 +618,7 @@ namespace DCFApixels.DragonECS
|
|||||||
{
|
{
|
||||||
if (dynamicBuffer.Length < _count)
|
if (dynamicBuffer.Length < _count)
|
||||||
{
|
{
|
||||||
Array.Resize(ref dynamicBuffer, ArrayUtility.NormalizeSizeToPowerOfTwo(_count));
|
Array.Resize(ref dynamicBuffer, ArrayUtility.NextPow2(_count));
|
||||||
}
|
}
|
||||||
int i = 0;
|
int i = 0;
|
||||||
foreach (var e in this)
|
foreach (var e in this)
|
||||||
|
@ -97,7 +97,7 @@ namespace DCFApixels.DragonECS
|
|||||||
{
|
{
|
||||||
if (dynamicBuffer.Length < _values.Length)
|
if (dynamicBuffer.Length < _values.Length)
|
||||||
{
|
{
|
||||||
Array.Resize(ref dynamicBuffer, ArrayUtility.NormalizeSizeToPowerOfTwo(_values.Length));
|
Array.Resize(ref dynamicBuffer, ArrayUtility.NextPow2(_values.Length));
|
||||||
}
|
}
|
||||||
int i = 0;
|
int i = 0;
|
||||||
foreach (var e in this)
|
foreach (var e in this)
|
||||||
@ -246,7 +246,7 @@ namespace DCFApixels.DragonECS
|
|||||||
{
|
{
|
||||||
if (dynamicBuffer.Length < _source.Count)
|
if (dynamicBuffer.Length < _source.Count)
|
||||||
{
|
{
|
||||||
Array.Resize(ref dynamicBuffer, ArrayUtility.NormalizeSizeToPowerOfTwo(_source.Count));
|
Array.Resize(ref dynamicBuffer, ArrayUtility.NextPow2(_source.Count));
|
||||||
}
|
}
|
||||||
int i = 0;
|
int i = 0;
|
||||||
foreach (var e in this)
|
foreach (var e in this)
|
||||||
|
@ -198,12 +198,12 @@ namespace DCFApixels.DragonECS
|
|||||||
|
|
||||||
_poolsMediator = new PoolsMediator(this);
|
_poolsMediator = new PoolsMediator(this);
|
||||||
|
|
||||||
int poolsCapacity = ArrayUtility.NormalizeSizeToPowerOfTwo(config.PoolsCapacity);
|
int poolsCapacity = ArrayUtility.NextPow2(config.PoolsCapacity);
|
||||||
_pools = new IEcsPoolImplementation[poolsCapacity];
|
_pools = new IEcsPoolImplementation[poolsCapacity];
|
||||||
_poolSlots = new PoolSlot[poolsCapacity];
|
_poolSlots = new PoolSlot[poolsCapacity];
|
||||||
ArrayUtility.Fill(_pools, _nullPool);
|
ArrayUtility.Fill(_pools, _nullPool);
|
||||||
|
|
||||||
int entitiesCapacity = ArrayUtility.NormalizeSizeToPowerOfTwo(config.EntitiesCapacity);
|
int entitiesCapacity = ArrayUtility.NextPow2(config.EntitiesCapacity);
|
||||||
_entityDispenser = new IdDispenser(entitiesCapacity, 0, OnEntityDispenserResized);
|
_entityDispenser = new IdDispenser(entitiesCapacity, 0, OnEntityDispenserResized);
|
||||||
|
|
||||||
_executorCoures = new Dictionary<(Type, object), IQueryExecutorImplementation>(config.PoolComponentsCapacity);
|
_executorCoures = new Dictionary<(Type, object), IQueryExecutorImplementation>(config.PoolComponentsCapacity);
|
||||||
|
@ -92,58 +92,33 @@ namespace DCFApixels.DragonECS.Internal
|
|||||||
Array.Copy(array, array.Length - rightHeadLength, result, array.Length - rightHeadLength, rightHeadLength); // copy right head
|
Array.Copy(array, array.Length - rightHeadLength, result, array.Length - rightHeadLength, rightHeadLength); // copy right head
|
||||||
array = result;
|
array = result;
|
||||||
}
|
}
|
||||||
private static int GetHighBitNumber(uint bits)
|
|
||||||
{
|
public static int NextPow2(int v)
|
||||||
if (bits == 0)
|
|
||||||
{
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
int bit = 0;
|
|
||||||
if ((bits & 0xFFFF0000) != 0)
|
|
||||||
{
|
|
||||||
bits >>= 16;
|
|
||||||
bit |= 16;
|
|
||||||
}
|
|
||||||
if ((bits & 0xFF00) != 0)
|
|
||||||
{
|
|
||||||
bits >>= 8;
|
|
||||||
bit |= 8;
|
|
||||||
}
|
|
||||||
if ((bits & 0xF0) != 0)
|
|
||||||
{
|
|
||||||
bits >>= 4;
|
|
||||||
bit |= 4;
|
|
||||||
}
|
|
||||||
if ((bits & 0xC) != 0)
|
|
||||||
{
|
|
||||||
bits >>= 2;
|
|
||||||
bit |= 2;
|
|
||||||
}
|
|
||||||
if ((bits & 0x2) != 0)
|
|
||||||
{
|
|
||||||
bit |= 1;
|
|
||||||
}
|
|
||||||
return bit;
|
|
||||||
}
|
|
||||||
public static int NormalizeSizeToPowerOfTwo(int minSize)
|
|
||||||
{
|
{
|
||||||
unchecked
|
unchecked
|
||||||
{
|
{
|
||||||
return 1 << (GetHighBitNumber((uint)minSize - 1u) + 1);
|
v--;
|
||||||
|
v |= v >> 1;
|
||||||
|
v |= v >> 2;
|
||||||
|
v |= v >> 4;
|
||||||
|
v |= v >> 8;
|
||||||
|
v |= v >> 16;
|
||||||
|
return ++v;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
public static int NormalizeSizeToPowerOfTwo_ClampOverflow(int minSize)
|
public static int NextPow2_ClampOverflow(int v)
|
||||||
{
|
{
|
||||||
unchecked
|
unchecked
|
||||||
{
|
{
|
||||||
int hibit = (GetHighBitNumber((uint)minSize - 1u) + 1);
|
const int NO_SIGN_HIBIT = 0x40000000;
|
||||||
if (hibit >= 32)
|
if ((v & NO_SIGN_HIBIT) != 0)
|
||||||
{
|
{
|
||||||
return int.MaxValue;
|
return int.MaxValue;
|
||||||
}
|
}
|
||||||
return 1 << hibit;
|
return NextPow2(v);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void Fill<T>(T[] array, T value, int startIndex = 0, int length = -1)
|
public static void Fill<T>(T[] array, T value, int startIndex = 0, int length = -1)
|
||||||
{
|
{
|
||||||
if (length < 0)
|
if (length < 0)
|
||||||
|
@ -247,7 +247,7 @@ namespace DCFApixels.DragonECS.Internal
|
|||||||
[MethodImpl(MethodImplOptions.NoInlining)]
|
[MethodImpl(MethodImplOptions.NoInlining)]
|
||||||
private void Upsize_Internal(int minSize)
|
private void Upsize_Internal(int minSize)
|
||||||
{
|
{
|
||||||
Resize(ArrayUtility.NormalizeSizeToPowerOfTwo_ClampOverflow(minSize));
|
Resize(ArrayUtility.NextPow2_ClampOverflow(minSize));
|
||||||
}
|
}
|
||||||
private void Resize(int newSize)
|
private void Resize(int newSize)
|
||||||
{
|
{
|
||||||
|
@ -26,7 +26,7 @@ namespace DCFApixels.DragonECS.Internal
|
|||||||
set
|
set
|
||||||
{
|
{
|
||||||
if (value <= _items.Length) { return; }
|
if (value <= _items.Length) { return; }
|
||||||
value = ArrayUtility.NormalizeSizeToPowerOfTwo(value);
|
value = ArrayUtility.NextPow2(value);
|
||||||
Array.Resize(ref _items, value);
|
Array.Resize(ref _items, value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -53,7 +53,7 @@ namespace DCFApixels.DragonECS.Internal
|
|||||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
public StructList(int capacity)
|
public StructList(int capacity)
|
||||||
{
|
{
|
||||||
_items = new T[ArrayUtility.NormalizeSizeToPowerOfTwo(capacity)];
|
_items = new T[ArrayUtility.NextPow2(capacity)];
|
||||||
_count = 0;
|
_count = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -266,7 +266,7 @@ namespace DCFApixels.DragonECS
|
|||||||
_maskBit = EcsMaskChunck.FromID(componentTypeID);
|
_maskBit = EcsMaskChunck.FromID(componentTypeID);
|
||||||
|
|
||||||
_mapping = new int[world.Capacity];
|
_mapping = new int[world.Capacity];
|
||||||
_items = new T[ArrayUtility.NormalizeSizeToPowerOfTwo(world.Configs.GetWorldConfigOrDefault().PoolComponentsCapacity)];
|
_items = new T[ArrayUtility.NextPow2(world.Configs.GetWorldConfigOrDefault().PoolComponentsCapacity)];
|
||||||
_recycledItems = new int[world.Configs.GetWorldConfigOrDefault().PoolRecycledComponentsCapacity];
|
_recycledItems = new int[world.Configs.GetWorldConfigOrDefault().PoolRecycledComponentsCapacity];
|
||||||
}
|
}
|
||||||
void IEcsPoolImplementation.OnWorldResize(int newSize)
|
void IEcsPoolImplementation.OnWorldResize(int newSize)
|
||||||
|
Loading…
Reference in New Issue
Block a user