porter/libsrc/porter/protocol/seqnum.c

1 ファイル

1.1 porter/libsrc/porter/protocol/seqnum.c

通番管理モジュール。

1.1.1 作者

c-modernization-kit sample team

1.1.2 バージョン

1.0.0

1.1.3 日付

2026/03/04

1.1.4 著作権

Copyright (C) CompanyName, Ltd. 2026. All rights reserved.

2 関数

2.1 seqnum_init

void seqnum_init ( uint32_t *seq, uint32_t initial )

通番を初期化します。

2.1.1 引数

  • seq [out] 初期化する通番へのポインタ。
  • initial [in] 初期値。

2.2 seqnum_next

uint32_t seqnum_next ( uint32_t *seq )

通番を 1 進めて次の値を返します。

uint32_t の最大値に達した場合は 0 に折り返します。

2.2.1 引数

  • seq [in,out] 通番へのポインタ。

2.2.2 戻り値

インクリメント後の通番。seq が NULL の場合は 0 を返します。

2.3 seqnum_is_newer

int seqnum_is_newer ( uint32_t a, uint32_t b )

通番 a が通番 b より新しいかどうかを判定します。

uint32_t 折り返しを考慮した比較を行います。
差が UINT32_MAX / 2 以下の場合に「a が新しい」と判定します。

2.3.1 引数

  • a [in] 比較対象の通番 A。
  • b [in] 比較対象の通番 B。

2.3.2 戻り値

a が b より新しい場合は 1、そうでない場合は 0 を返します。

2.4 seqnum_in_window

int seqnum_in_window ( uint32_t seq, uint32_t base, uint16_t window_size )

通番 seq がウィンドウ [base, base + window_size) に含まれるか判定します。

2.4.1 引数

  • seq [in] 判定する通番。
  • base [in] ウィンドウ先頭の通番。
  • window_size [in] ウィンドウサイズ (パケット数)。

2.4.2 戻り値

ウィンドウ内の場合は 1、ウィンドウ外の場合は 0 を返します。