Class EventSequenceNumber

Namespace
Cratis.Chronicle.Events
Assembly
Cratis.Chronicle.dll

Represents the sequence number within an event log for an event.

public record EventSequenceNumber : ConceptAs<ulong>, IComparable<ConceptAs<ulong>>, IComparable<ulong>, IComparable, IEquatable<ConceptAs<ulong>>, IEquatable<EventSequenceNumber>
Inheritance
EventSequenceNumber
Implements
Inherited Members
Extension Methods

Constructors

EventSequenceNumber(EventSequenceNumber)

protected EventSequenceNumber(EventSequenceNumber original)

Parameters

original EventSequenceNumber

EventSequenceNumber(ulong)

Represents the sequence number within an event log for an event.

public EventSequenceNumber(ulong Value)

Parameters

Value ulong

The sequence number.

Fields

BeforeFirst

Gets the value representing the position before the first event.

public static readonly EventSequenceNumber BeforeFirst

Field Value

EventSequenceNumber

Remarks

A concurrency scope carrying this number expects no event matching its narrowing to exist yet. Unavailable cannot say that, because it also means "no sequence number was supplied at all", so a scope a strategy resolved against an empty narrowing would be indistinguishable from a scope that asked for nothing. This value distinguishes the two, and the kernel validates it as "no event matching this scope may exist". Unlike Max and Unavailable this is not a wire value and must not become one. A scope crosses the wire saying it expects no matching event in a field of its own, carrying Unavailable as its number, so that a kernel or client on either side of a version mismatch that has never heard of the expectation falls back to skipping the check rather than comparing a real tail against a number nothing can exceed.

First

Gets the first sequence number.

public static readonly EventSequenceNumber First

Field Value

EventSequenceNumber

Max

Gets the max sequence number.

public static readonly EventSequenceNumber Max

Field Value

EventSequenceNumber

Remarks

The sentinels are wire values, shared with the kernel's own copy of this type - ConcurrencyScope.NotSet is built from this one on both sides, and a scope crosses the wire as a raw number. Changing a sentinel here without changing it there makes the same named value mean two different things on the two ends.

Unavailable

Gets the value when the sequence number is unavailable.

public static readonly EventSequenceNumber Unavailable

Field Value

EventSequenceNumber

Properties

EqualityContract

protected override Type EqualityContract { get; }

Property Value

Type

IsActualValue

Check if the EventSequenceNumber is an actual value representing a sequence number.

public bool IsActualValue { get; }

Property Value

bool

True if it can, false if not.

Remarks

Values such as Unavailable, Max and BeforeFirst are not actual values. They are system values used for special purposes.

IsBeforeFirst

Check if the EventSequenceNumber is the position before the first event.

public bool IsBeforeFirst { get; }

Property Value

bool

IsUnavailable

Check if the EventSequenceNumber is unavailable.

public bool IsUnavailable { get; }

Property Value

bool

Methods

Deconstruct(out ulong)

public void Deconstruct(out ulong Value)

Parameters

Value ulong

Equals(EventSequenceNumber?)

public virtual bool Equals(EventSequenceNumber? other)

Parameters

other EventSequenceNumber

Returns

bool

Equals(ConceptAs<ulong>?)

public override sealed bool Equals(ConceptAs<ulong>? other)

Parameters

other ConceptAs<ulong>

Returns

bool

Equals(object?)

public override bool Equals(object? obj)

Parameters

obj object

Returns

bool

GetHashCode()

public override int GetHashCode()

Returns

int

Next()

Get the next EventSequenceNumber.

public EventSequenceNumber Next()

Returns

EventSequenceNumber

The next EventSequenceNumber.

PrintMembers(StringBuilder)

protected override bool PrintMembers(StringBuilder builder)

Parameters

builder StringBuilder

Returns

bool

Operators

operator +(EventSequenceNumber, EventSequenceNumber)

Adds a event sequence number with another event sequence number.

public static EventSequenceNumber operator +(EventSequenceNumber left, EventSequenceNumber right)

Parameters

left EventSequenceNumber

EventSequenceNumber to add from.

right EventSequenceNumber

EventSequenceNumber to add.

Returns

EventSequenceNumber

new event sequence number.

operator +(EventSequenceNumber, int)

Adds a event sequence number with a value.

public static EventSequenceNumber operator +(EventSequenceNumber left, int right)

Parameters

left EventSequenceNumber

EventSequenceNumber to add from.

right int

Value to add.

Returns

EventSequenceNumber

new event sequence number.

operator +(EventSequenceNumber, ulong)

Adds a event sequence number with a value.

public static EventSequenceNumber operator +(EventSequenceNumber left, ulong right)

Parameters

left EventSequenceNumber

EventSequenceNumber to add from.

right ulong

Value to add.

Returns

EventSequenceNumber

new event sequence number.

operator ==(EventSequenceNumber?, EventSequenceNumber?)

public static bool operator ==(EventSequenceNumber? left, EventSequenceNumber? right)

Parameters

left EventSequenceNumber
right EventSequenceNumber

Returns

bool

implicit operator EventSequenceNumber(ulong)

Implicitly convert from ulong to EventSequenceNumber.

public static implicit operator EventSequenceNumber(ulong value)

Parameters

value ulong

Value to convert from.

Returns

EventSequenceNumber

A converted EventSequenceNumber.

operator !=(EventSequenceNumber?, EventSequenceNumber?)

public static bool operator !=(EventSequenceNumber? left, EventSequenceNumber? right)

Parameters

left EventSequenceNumber
right EventSequenceNumber

Returns

bool

operator -(EventSequenceNumber, EventSequenceNumber)

Adds a event sequence number with a value.

public static EventSequenceNumber operator -(EventSequenceNumber left, EventSequenceNumber right)

Parameters

left EventSequenceNumber

EventSequenceNumber to add from.

right EventSequenceNumber

EventSequenceNumber to subtract.

Returns

EventSequenceNumber

new event sequence number.

operator -(EventSequenceNumber, int)

Adds a event sequence number with a value.

public static EventSequenceNumber operator -(EventSequenceNumber left, int right)

Parameters

left EventSequenceNumber

EventSequenceNumber to subtract from.

right int

Value to add.

Returns

EventSequenceNumber

new event sequence number.

operator -(EventSequenceNumber, ulong)

Adds a event sequence number with a value.

public static EventSequenceNumber operator -(EventSequenceNumber left, ulong right)

Parameters

left EventSequenceNumber

EventSequenceNumber to subtract from.

right ulong

Value to add.

Returns

EventSequenceNumber

new event sequence number.