in accord-core/src/main/java/accord/primitives/SaveStatus.java [262:337]
public static SaveStatus get(Status status, Known known)
{
if (known.isInvalidated())
return Invalidated;
if (status.compareTo(Status.PreCommitted) < 0)
{
if (known.isExecuteAtKnown())
{
switch (status)
{
case NotDefined: return PreCommitted;
case PreAccepted: return PreCommittedWithDefinition;
case AcceptedMedium:
case AcceptedSlow:
case AcceptedInvalidate:
known = known.with(DepsUnknown);
// if the decision is known, we're really PreCommitted
}
}
else
{
switch (status)
{
case NotDefined: return NotDefined;
case PreAccepted:
return known.is(NoVote) ? PreAccepted : known.is(DepsUnknown) ? PreAcceptedWithVote : PreAcceptedWithDeps;
case AcceptedMedium:
if (!known.isDefinitionKnown()) return AcceptedMedium;
if (!known.hasPrivilegedVote()) return AcceptedMediumWithDefinition;
return AcceptedMediumWithDefAndVote;
case AcceptedSlow:
if (!known.isDefinitionKnown()) return AcceptedSlow;
if (!known.hasPrivilegedVote()) return AcceptedSlowWithDefinition;
return AcceptedSlowWithDefAndVote;
case AcceptedInvalidate:
return known.isDefinitionKnown() ? AcceptedInvalidateWithDefinition : AcceptedInvalidate;
// if the decision is known, we're really PreCommitted
}
}
}
switch (status)
{
default: throw new AssertionError("Unexpected status: " + status);
case AcceptedMedium:
case AcceptedSlow:
case AcceptedInvalidate:
case PreCommitted:
if (!known.isDefinitionKnown())
{
switch (known.deps())
{
case DepsProposedFixed: return PreCommittedWithFixedDeps;
case DepsProposed: return PreCommittedWithDeps;
default: return PreCommitted;
}
}
switch (known.deps())
{
default: throw new AssertionError("Unexpected DepsKnown: " + known.deps());
case DepsErased:
case DepsUnknown:
case DepsFromCoordinator: return PreCommittedWithDefinition; // TODO (required): consider if this is correct
case DepsProposedFixed: return PreCommittedWithDefAndFixedDeps;
case DepsProposed: return PreCommittedWithDefAndDeps;
case DepsKnown:
case DepsCommitted:
}
case Committed: return known.deps() == DepsKnown ? Stable : Committed;
case Stable: return Stable;
case PreApplied: return PreApplied;
case Applied: return Applied;
case Invalidated: return Invalidated;
}
}