IIdGenerator
IIdGenerator provides unique identifiers.
/// <summary>Generates unique identities</summary>
public interface IIdGenerator
{
/// <summary>Identity type.</summary>
Type Type { get; }
/// <summary>Uniqueness level</summary>
Scope Uniqueness { get; }
/// <summary>Uniqueness scope</summary>
enum Scope
{
/// <summary>Unique id for the generator instance</summary>
Instance,
/// <summary>Unique id for the process</summary>
Process,
/// <summary>Unique id for the computer</summary>
System,
/// <summary>Globally unique id</summary>
Global,
/// <summary>Universally unique id</summary>
Universal
}
/// <summary>Try create next unique identity.</summary>
/// <returns>False if out of unique ids.</returns>
bool TryGetNext(out object value);
/// <summary>Get next identity</summary>
/// <exception cref="InvalidOperationException">If no more identities are available.</exception>
object Next { get; }
}
/// <summary>Generates unique identities</summary>
public interface IIdGenerator<T> : IIdGenerator
{
/// <summary>Has more unique ids.</summary>
bool HasMore { get; }
/// <summary>Try create next unique identity.</summary>
/// <returns>False if out of unique ids.</returns>
bool TryGetNext(out T value);
/// <summary>Get next identity</summary>
/// <exception cref="InvalidOperationException">If no more identities are available.</exception>
new T Next { get; }
}
IIdGenerator.Next creates next id.
WriteLine(IdGenerators.Integer.Next); // "0"
IdGenerators.Integer creates 2 billion int numbers incrementially.
WriteLine(IdGenerators.Integer.Next); // "1"
IdGenerators.Long creates incremental long numbers.
WriteLine(IdGenerators.Long.Next); // "0"
IdGenerators.Guid creates guid ids.
WriteLine(IdGenerators.Guid.Next); // "2623ff82-be3f-4f29-944e-d07d6b6f1df3"
Full Example
Full example
using Avalanche.Utilities;
using static System.Console;
class idgenerator
{
public static void Run()
{
// <00>
WriteLine(IdGenerators.Integer.Next); // "0"
// </00>
// <01>
WriteLine(IdGenerators.Integer.Next); // "1"
// </01>
// <02>
WriteLine(IdGenerators.Long.Next); // "0"
// </02>
// <03>
WriteLine(IdGenerators.Guid.Next); // "2623ff82-be3f-4f29-944e-d07d6b6f1df3"
// </03>
}
}