Files
2025-08-19 12:45:50 +02:00

55 lines
1.6 KiB
C#

// UDT Sequence Number 0 - (2^31 - 1)
// seqcmp: compare two seq#, considering the wraping
// seqlen: length from the 1st to the 2nd seq#, including both
// seqoff: offset from the 2nd to the 1st seq#
// incseq: increase the seq# by 1
// decseq: decrease the seq# by 1
// incseq: increase the seq# by a given offset
using System;
namespace UdtSharp
{
static class SequenceNumber
{
public static int seqcmp(int seq1, int seq2)
{
return (Math.Abs(seq1 - seq2) < m_iSeqNoTH) ? (seq1 - seq2) : (seq2 - seq1);
}
public static int seqlen(int seq1, int seq2)
{
return (seq1 <= seq2) ? (seq2 - seq1 + 1) : (seq2 - seq1 + m_iMaxSeqNo + 2);
}
public static int seqoff(int seq1, int seq2)
{
if (Math.Abs(seq1 - seq2) < m_iSeqNoTH)
return seq2 - seq1;
if (seq1 < seq2)
return seq2 - seq1 - m_iMaxSeqNo - 1;
return seq2 - seq1 + m_iMaxSeqNo + 1;
}
public static int incseq(int seq)
{
return (seq == m_iMaxSeqNo) ? 0 : seq + 1;
}
public static int decseq(int seq)
{
return (seq == 0) ? m_iMaxSeqNo : seq - 1;
}
public static int incseq(int seq, int inc)
{
return (m_iMaxSeqNo - seq >= inc) ? seq + inc : seq - m_iMaxSeqNo + inc - 1;
}
public static int m_iSeqNoTH = 0x3FFFFFFF; // threshold for comparing seq. no.
public static int m_iMaxSeqNo = 0x7FFFFFFF; // maximum sequence number used in UDT
}
}