mirror of https://github.com/SixLabors/ImageSharp
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
71 lines
2.5 KiB
71 lines
2.5 KiB
// Copyright (c) Six Labors and contributors.
|
|
// Licensed under the Apache License, Version 2.0.
|
|
|
|
using System;
|
|
using System.Buffers;
|
|
using System.IO;
|
|
using System.Runtime.CompilerServices;
|
|
using System.Runtime.InteropServices;
|
|
|
|
namespace SixLabors.Memory
|
|
{
|
|
internal static class BufferExtensions
|
|
{
|
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
|
public static Span<T> GetSpan<T>(this IMemoryOwner<T> buffer)
|
|
=> buffer.Memory.Span;
|
|
|
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
|
public static int Length<T>(this IMemoryOwner<T> buffer)
|
|
=> buffer.GetSpan().Length;
|
|
|
|
/// <summary>
|
|
/// Gets a <see cref="Span{T}"/> to an offseted position inside the buffer.
|
|
/// </summary>
|
|
/// <param name="buffer">The buffer</param>
|
|
/// <param name="start">The start</param>
|
|
/// <returns>The <see cref="Span{T}"/></returns>
|
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
|
public static Span<T> Slice<T>(this IMemoryOwner<T> buffer, int start)
|
|
{
|
|
return buffer.GetSpan().Slice(start);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Gets a <see cref="Span{T}"/> to an offsetted position inside the buffer.
|
|
/// </summary>
|
|
/// <param name="buffer">The buffer</param>
|
|
/// <param name="start">The start</param>
|
|
/// <param name="length">The length of the slice</param>
|
|
/// <returns>The <see cref="Span{T}"/></returns>
|
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
|
public static Span<T> Slice<T>(this IMemoryOwner<T> buffer, int start, int length)
|
|
{
|
|
return buffer.GetSpan().Slice(start, length);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Clears the contents of this buffer.
|
|
/// </summary>
|
|
/// <param name="buffer">The buffer</param>
|
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
|
public static void Clear<T>(this IMemoryOwner<T> buffer)
|
|
{
|
|
buffer.GetSpan().Clear();
|
|
}
|
|
|
|
public static ref T GetReference<T>(this IMemoryOwner<T> buffer)
|
|
where T : struct =>
|
|
ref MemoryMarshal.GetReference(buffer.GetSpan());
|
|
|
|
public static void Read(this Stream stream, IManagedByteBuffer buffer)
|
|
{
|
|
stream.Read(buffer.Array, 0, buffer.Length());
|
|
}
|
|
|
|
public static void Write(this Stream stream, IManagedByteBuffer buffer)
|
|
{
|
|
stream.Write(buffer.Array, 0, buffer.Length());
|
|
}
|
|
}
|
|
}
|