mirror of
https://github.com/Cockatrice/Cockatrice.git
synced 2026-07-02 03:23:56 -07:00
Some checks are pending
Build Desktop / Configure (push) Waiting to run
Build Desktop / Debian 13 (push) Blocked by required conditions
Build Desktop / Debian 12 (push) Blocked by required conditions
Build Desktop / Fedora 44 (push) Blocked by required conditions
Build Desktop / Fedora 43 (push) Blocked by required conditions
Build Desktop / Servatrice_Debian 12 (push) Blocked by required conditions
Build Desktop / Ubuntu 26.04 (push) Blocked by required conditions
Build Desktop / Ubuntu 24.04 (push) Blocked by required conditions
Build Desktop / Arch (push) Blocked by required conditions
Build Desktop / macOS 14 (push) Blocked by required conditions
Build Desktop / macOS 15 (push) Blocked by required conditions
Build Desktop / macOS 13 Intel (push) Blocked by required conditions
Build Desktop / macOS 15 Debug (push) Blocked by required conditions
Build Desktop / Windows 10 (push) Blocked by required conditions
Build Docker Image / amd64 & arm64 (push) Waiting to run
* Unify counter clamp arithmetic into shared addClamped() helper - Add addClamped() in new header clamped_arithmetic.h; uses a 64-bit intermediate so the addition cannot overflow int. - Use it in Server_Card::incrementCounter() (clamps [0, MAX_COUNTERS_ON_CARD]) and Server_Counter::incrementCount() (clamps [INT_MIN, INT_MAX]), removing the duplicated overflow-safe logic and its keep-in-sync TODO. - Inline incrementCount() into server_counter.h; server_counter.cpp now holds only the constructor and getInfo(). - Clarify the card-counter bounds comment in trice_limits.h. * Rename MAX_COUNTERS_ON_CARD to MAX_COUNTER_VALUE The constant caps the counter's value, not how many counters can be on the card * Add direct unit tests for addClamped() helper * Harden offsetCardCounter() against signed-int overflow Replace the raw oldValue + offset sum with addClamped(), clamping to [0, MAX_COUNTER_VALUE] without overflow. * Comment update * Remove class names from addClamped() docstring
22 lines
805 B
C++
22 lines
805 B
C++
#ifndef CLAMPED_ARITHMETIC_H
|
|
#define CLAMPED_ARITHMETIC_H
|
|
|
|
#include <QtGlobal>
|
|
#include <cstdint>
|
|
|
|
/**
|
|
* @brief Overflow-safe clamped addition: returns value + delta bounded to [minValue, maxValue].
|
|
*
|
|
* Uses a 64-bit intermediate so the addition cannot overflow int. Shared by the bounded
|
|
* counter arithmetic in both the client and the server.
|
|
*
|
|
* @note Requires minValue <= maxValue. Bounds come from trusted compile-time call sites;
|
|
* qBound() asserts this internally in debug builds.
|
|
*/
|
|
inline int addClamped(int value, int delta, int minValue, int maxValue)
|
|
{
|
|
const auto result = static_cast<int64_t>(value) + static_cast<int64_t>(delta);
|
|
return static_cast<int>(qBound(static_cast<int64_t>(minValue), result, static_cast<int64_t>(maxValue)));
|
|
}
|
|
|
|
#endif // CLAMPED_ARITHMETIC_H
|