Code/General/TagSetBuilder.cs
using Sandbox;
using System.Collections.Generic;
namespace ExtendedBox.General;
public sealed class TagSetBuilder
{
private readonly List<string> _tags = [];
public static TagSetBuilder Create(params string[] tags)
{
TagSetBuilder builder = new();
builder.Add(tags);
return builder;
}
public static TagSetBuilder Create(IEnumerable<string> tags)
{
TagSetBuilder builder = new();
builder.Add(tags);
return builder;
}
public TagSetBuilder Add(params string[] tags)
{
_tags.AddRange(tags);
return this;
}
public TagSetBuilder Add(IEnumerable<string> tags)
{
_tags.AddRange(tags);
return this;
}
public TagSetBuilder Toggle(params string[] tags)
{
foreach(var tag in tags)
{
if(!_tags.Remove(tag))
_tags.Add(tag);
}
return this;
}
public TagSetBuilder Toggle(IEnumerable<string> tags)
{
foreach(var tag in tags)
{
if(!_tags.Remove(tag))
_tags.Add(tag);
}
return this;
}
public TagSetBuilder Remove(IEnumerable<string> tags)
{
foreach(var tag in tags)
_tags.Remove(tag);
return this;
}
public TagSetBuilder Remove(params string[] tags)
{
foreach(var tag in tags)
_tags.Remove(tag);
return this;
}
public TagSetBuilder Clear()
{
_tags.Clear();
return this;
}
public TagSet Build()
{
TagSet tagSet = [];
foreach(var tag in _tags)
tagSet.Add(tag);
return tagSet;
}
}