mirror of
https://github.com/Cockatrice/Cockatrice.git
synced 2026-07-05 21:13:55 -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
48 lines
1.9 KiB
C++
48 lines
1.9 KiB
C++
#ifndef TRICE_LIMITS_H
|
|
#define TRICE_LIMITS_H
|
|
|
|
//! \todo Split trice_limits.h into focused single-purpose headers: string_limits.h,
|
|
//! dice_limits.h, counter_limits.h.
|
|
|
|
#include <QString>
|
|
|
|
// max size for short strings, like names and things that are generally a single phrase
|
|
constexpr int MAX_NAME_LENGTH = 0xff;
|
|
// max size for chat messages and text contents
|
|
constexpr int MAX_TEXT_LENGTH = 0xfff;
|
|
// max size for deck files and pictures
|
|
constexpr int MAX_FILE_LENGTH = 0x1fffff; // about 2 megabytes
|
|
|
|
constexpr uint MINIMUM_DIE_SIDES = 2;
|
|
constexpr uint MAXIMUM_DIE_SIDES = 1000000;
|
|
constexpr uint MINIMUM_DICE_TO_ROLL = 1;
|
|
constexpr uint MAXIMUM_DICE_TO_ROLL = 100;
|
|
|
|
/**
|
|
* @brief Upper bound for a bounded counter's value: [0, MAX_COUNTER_VALUE].
|
|
*
|
|
* Caps an individual counter's VALUE (e.g. a +1/+1 counter at 999), not how many counters
|
|
* something holds. Applies to counters that are constrained to a non-negative display range,
|
|
* such as card counters and commander tax. Unbounded counters (e.g. a player's life total)
|
|
* do not use this limit and may go negative, saturating only at the int range.
|
|
*
|
|
* The max of 999 is a display constraint (3-digit rendering) and a reasonable gameplay limit.
|
|
* The server enforces these bounds; the client may also check them for UX optimization.
|
|
*/
|
|
constexpr int MAX_COUNTER_VALUE = 999;
|
|
|
|
// optimized functions to get qstrings that are at most that long
|
|
static inline QString nameFromStdString(const std::string &_string)
|
|
{
|
|
return QString::fromUtf8(_string.data(), std::min(int(_string.size()), MAX_NAME_LENGTH));
|
|
}
|
|
static inline QString textFromStdString(const std::string &_string)
|
|
{
|
|
return QString::fromUtf8(_string.data(), std::min(int(_string.size()), MAX_TEXT_LENGTH));
|
|
}
|
|
static inline QString fileFromStdString(const std::string &_string)
|
|
{
|
|
return QString::fromUtf8(_string.data(), std::min(int(_string.size()), MAX_FILE_LENGTH));
|
|
}
|
|
|
|
#endif // TRICE_LIMITS_H
|