- u_async.c: process immediate_queue BEFORE epoll_wait in uasync_poll - stcp_link.c: defensive NULL etcp_conn/etcp_link in stcp_link_close - utun_instance.c: move stcp_server_list_destroy_all to Phase J (before ETCP), add deferred drain in both Phase J and L - stcp.h/c: STCP_HS_ENC_CLIENT 6→38, STCP_HS_ENC_SERVER 7→39, exchange ed25519_pubkey in both handshake directions - etcp_connections.c: copy peer_ed25519 from STCP to ETCP_CONN in etcp_link_enter_ready_tcp; guard link->etcp in tcp_link_close_cb - chat_sync.c: fix lk->conn NULL dereference for TCP links - test_stcp.c: update stcp_server_create/stcp_client_connect callsites - tools/chat_tcp_test: change transport udp→tcp
42 lines
1.2 KiB
C
42 lines
1.2 KiB
C
/* sliding_window_min.h */
|
|
#ifndef SLIDING_WINDOW_MIN_H
|
|
#define SLIDING_WINDOW_MIN_H
|
|
|
|
#include <stddef.h> /* для size_t */
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
typedef struct SlidingWindowMin SlidingWindowMin;
|
|
|
|
/**
|
|
* Создаёт новую структуру скользящего минимума.
|
|
* @param window_size размер окна (должен быть > 0)
|
|
* @return указатель на структуру или NULL при ошибке выделения памяти
|
|
*/
|
|
SlidingWindowMin* swm_create(int window_size);
|
|
|
|
/**
|
|
* Уничтожает структуру и освобождает всю динамически выделенную память.
|
|
*/
|
|
void swm_destroy(SlidingWindowMin* swm);
|
|
|
|
/**
|
|
* Добавляет новое значение в окно.
|
|
* После вызова swm_get_min() сразу вернёт минимум последних min(window_size, добавленных) значений.
|
|
*/
|
|
void swm_add(SlidingWindowMin* swm, int val);
|
|
|
|
/**
|
|
* Возвращает текущий минимум в окне.
|
|
* Если окно пустое — возвращает INT_MAX.
|
|
*/
|
|
int swm_get_min(const SlidingWindowMin* swm);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif /* SLIDING_WINDOW_MIN_H */
|