#/*THIS IS A T4 FILE - see t4_text_templating.md for what it is and how to run codegen*/#>
<#@ template debug="True" #>
<#@ output extension=".gen.cs" #>
<#@ assembly name="System.Core" #>
using System;
using Unity.Collections.LowLevel.Unsafe;
namespace Unity.Collections.LowLevel.Unsafe
{
///
/// Provides extension methods for sets.
///
public unsafe static class HashSetExtensions
{
<#
{
foreach (var ContainerType in new[] {
( new[] { "NativeHashSet", "Count" } ),
( new[] { "NativeParallelHashSet", "Count()" } ),
}) {
foreach (var OtherContainerType in new[] {
( "UnsafeHashSet" ),
( "UnsafeHashSet.ReadOnly" ),
( "UnsafeParallelHashSet" ),
( "UnsafeParallelHashSet.ReadOnly" ),
( "UnsafeList" ),
}) {
#>
///
/// Removes the values from this set which are also present in another collection.
///
/// The type of values.
/// The set to remove values from.
/// The collection to compare with.
public static void ExceptWith(this ref <#=ContainerType[0]#> container, <#=OtherContainerType#> other)
where T : unmanaged, IEquatable
{
foreach (var item in other)
{
container.Remove(item);
}
}
///
/// Removes the values from this set which are absent in another collection.
///
/// The type of values.
/// The set to remove values from.
/// The collection to compare with.
public static void IntersectWith(this ref <#=ContainerType[0]#> container, <#=OtherContainerType#> other)
where T : unmanaged, IEquatable
{
var result = new UnsafeList(container.<#=ContainerType[1]#>, Allocator.Temp);
foreach (var item in other)
{
if (container.Contains(item))
{
result.Add(item);
}
}
container.Clear();
container.UnionWith(result);
result.Dispose();
}
///
/// Adds all values from a collection to this set.
///
/// The type of values.
/// The set to add values to.
/// The collection to copy values from.
public static void UnionWith(this ref <#=ContainerType[0]#> container, <#=OtherContainerType#> other)
where T : unmanaged, IEquatable
{
foreach (var item in other)
{
container.Add(item);
}
}
<#}}}#>
<#
{
foreach (var ContainerType in new[] {
( new[] { "UnsafeHashSet", "Count" } ),
( new[] { "UnsafeParallelHashSet", "Count()" } ),
}) {
foreach (var OtherContainerType in new[] {
( "FixedList128Bytes" ),
( "FixedList32Bytes" ),
( "FixedList4096Bytes" ),
( "FixedList512Bytes" ),
( "FixedList64Bytes" ),
( "NativeArray" ),
( "NativeHashSet" ),
( "NativeHashSet.ReadOnly" ),
( "UnsafeHashSet"),
( "UnsafeHashSet.ReadOnly"),
( "NativeParallelHashSet" ),
( "NativeParallelHashSet.ReadOnly" ),
( "UnsafeParallelHashSet" ),
( "UnsafeParallelHashSet.ReadOnly" ),
( "NativeList" ),
( "UnsafeList" ),
}) {
#>
///
/// Removes the values from this set which are also present in another collection.
///
/// The type of values.
/// The set to remove values from.
/// The collection to compare with.
public static void ExceptWith(this ref <#=ContainerType[0]#> container, <#=OtherContainerType#> other)
where T : unmanaged, IEquatable
{
foreach (var item in other)
{
container.Remove(item);
}
}
///
/// Removes the values from this set which are absent in another collection.
///
/// The type of values.
/// The set to remove values from.
/// The collection to compare with.
public static void IntersectWith(this ref <#=ContainerType[0]#> container, <#=OtherContainerType#> other)
where T : unmanaged, IEquatable
{
var result = new UnsafeList(container.<#=ContainerType[1]#>, Allocator.Temp);
foreach (var item in other)
{
if (container.Contains(item))
{
result.Add(item);
}
}
container.Clear();
container.UnionWith(result);
result.Dispose();
}
///
/// Adds all values from a collection to this set.
///
/// The type of values.
/// The set to add values to.
/// The collection to copy values from.
public static void UnionWith(this ref <#=ContainerType[0]#> container, <#=OtherContainerType#> other)
where T : unmanaged, IEquatable
{
foreach (var item in other)
{
container.Add(item);
}
}
<#}}}#>
}
}