Some checks failed
Publish NuGet Packages / publish (pull_request) Failing after 1m5s
- Updated `.gitignore` to include `.vscode/` and clarified comments. - Introduced `SafeHandle` for managing memory alignment and safe access. - Refactored `UnsafeArray<T>` to add bounds checking and alignment logic. - Added `IUnsafeHashCollection<T>` for specialized hash-based collections. - Refactored `UnsafeHashMap<TKey, TValue>` and `UnsafeHashSet<T>` to use `HashMapHelper<TKey>` with alignment support. - Made `UnsafeSlotMap<T>` methods `readonly` for immutability. - Enhanced `HashMapHelper<TKey>` with alignment-aware buffer management and validation. - Updated benchmarks to use `UnsafeArray<Vector256<int>>` and added capacity checks. - Incremented assembly version to `1.1.3` in `Misaki.HighPerformance.LowLevel.csproj`. - Updated `Program.cs` to run `CollectionBenchmark` and demonstrate safe disposal handling.
92 lines
2.9 KiB
C#
92 lines
2.9 KiB
C#
using Misaki.HighPerformance.LowLevel.Buffer;
|
|
|
|
namespace Misaki.HighPerformance.LowLevel.Collections.Contracts;
|
|
|
|
public unsafe interface IUnsafeCollection : IDisposable
|
|
{
|
|
/// <summary>
|
|
/// Indicates whether the object has been created. Returns true if the object is created, otherwise false.
|
|
/// </summary>
|
|
bool IsCreated
|
|
{
|
|
get;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Removes all elements from the collection. The collection will be empty after this operation.
|
|
/// </summary>
|
|
void Clear();
|
|
|
|
/// <summary>
|
|
/// Returns a pointer to an unmanaged memory location. This pointer can be used for low-level memory operations.
|
|
/// </summary>
|
|
/// <returns>The method returns a void pointer to the unsafe memory location.</returns>
|
|
void* GetUnsafePtr();
|
|
}
|
|
|
|
public interface IUnsafeCollection<T> : IUnsafeCollection, IEnumerable<T>
|
|
where T : unmanaged
|
|
{
|
|
/// <summary>
|
|
/// Gets the number of elements in a collection. The value is read-only.
|
|
/// </summary>
|
|
int Count
|
|
{
|
|
get;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Changes the size of a collection to the specified value.
|
|
/// </summary>
|
|
/// <remarks>This is to adjust the element count of the collection, not the size of the underlying buffer in memory.</remarks>
|
|
/// <param name="newSize">Specifies the new size to which the collection should be adjusted.</param>
|
|
/// <param name="option">Specifies allocation options that may affect how memory is managed during the resize operation.</param>
|
|
void Resize(int newSize, AllocationOption option);
|
|
}
|
|
|
|
public interface IUnsafeHashCollection<T> : IEnumerable<T>, IDisposable
|
|
where T : unmanaged
|
|
{
|
|
/// <summary>
|
|
/// Indicates whether the object has been created. Returns true if the object is created, otherwise false.
|
|
/// </summary>
|
|
bool IsCreated
|
|
{
|
|
get;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Gets the number of elements in a collection. The value is read-only.
|
|
/// </summary>
|
|
int Count
|
|
{
|
|
get;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Removes all elements from the collection. The collection will be empty after this operation.
|
|
/// </summary>
|
|
void Clear();
|
|
|
|
/// <summary>
|
|
/// Changes the size of a collection to the specified value.
|
|
/// </summary>
|
|
/// <remarks>This is to adjust the element count of the collection, not the size of the underlying buffer in memory.</remarks>
|
|
/// <param name="newSize">Specifies the new size to which the collection should be adjusted.</param>
|
|
/// <param name="option">Specifies allocation options that may affect how memory is managed during the resize operation.</param>
|
|
void Resize(int newSize, AllocationOption option);
|
|
}
|
|
|
|
public interface IUnTypedCollection : IUnsafeCollection
|
|
{
|
|
/// <summary>
|
|
/// The total size of the buffer in bytes.
|
|
/// </summary>
|
|
uint Size
|
|
{
|
|
get;
|
|
}
|
|
|
|
ref T GetElementAt<T>(uint index)
|
|
where T : unmanaged;
|
|
} |