# porter/libsrc/porter/protocol/seqnum.h

# 1 ファイル

## 1.1 porter/libsrc/porter/protocol/seqnum.h

通番管理モジュールの内部ヘッダー。

### 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 を返します。