OpenTTD Source 20241224-master-gf74b0cf984
|
Integer math functions. More...
#include "strong_typedef_type.hpp"
Go to the source code of this file.
Functions | |
template<typename T > | |
constexpr T | abs (const T a) |
Returns the absolute value of (scalar) variable. | |
template<typename T > | |
constexpr T | Align (const T x, uint n) |
Return the smallest multiple of n equal or greater than x. | |
template<typename T > | |
constexpr T * | AlignPtr (T *x, uint n) |
Return the smallest multiple of n equal or greater than x Applies to pointers only. | |
template<typename T > | |
constexpr T | Clamp (const T a, const T min, const T max) |
Clamp a value between an interval. | |
template<typename T > | |
constexpr T | SoftClamp (const T a, const T min, const T max) |
Clamp a value between an interval. | |
constexpr int | Clamp (const int a, const int min, const int max) |
Clamp an integer between an interval. | |
constexpr uint | ClampU (const uint a, const uint min, const uint max) |
Clamp an unsigned integer between an interval. | |
template<typename To , typename From , std::enable_if_t< std::is_integral< From >::value, int > = 0> | |
constexpr To | ClampTo (From value) |
Clamp the given value down to lie within the requested type. | |
template<typename T > | |
constexpr T | Delta (const T a, const T b) |
Returns the (absolute) difference between two (scalar) variables. | |
template<typename T > | |
constexpr bool | IsInsideBS (const T x, const size_t base, const size_t size) |
Checks if a value is between a window started at some base point. | |
template<typename T , std::enable_if_t< std::disjunction_v< std::is_convertible< T, size_t >, std::is_base_of< StrongTypedefBase, T > >, int > = 0> | |
constexpr bool | IsInsideMM (const T x, const size_t min, const size_t max) noexcept |
Checks if a value is in an interval. | |
template<typename T > | |
constexpr void | Swap (T &a, T &b) |
Type safe swap operation. | |
constexpr uint | ToPercent8 (uint i) |
Converts a "fract" value 0..255 to "percent" value 0..100. | |
constexpr uint | ToPercent16 (uint i) |
Converts a "fract" value 0..65535 to "percent" value 0..100. | |
int | DivideApprox (int a, int b) |
Deterministic approximate division. | |
constexpr uint | CeilDiv (uint a, uint b) |
Computes ceil(a / b) for non-negative a and b. | |
constexpr uint | Ceil (uint a, uint b) |
Computes ceil(a / b) * b for non-negative a and b. | |
constexpr int | RoundDivSU (int a, uint b) |
Computes round(a / b) for signed a and unsigned b. | |
constexpr uint64_t | PowerOfTen (int power) |
Computes ten to the given power. | |
uint32_t | IntSqrt (uint32_t num) |
Compute the integer square root. | |
Integer math functions.
Definition in file math_func.hpp.
|
constexpr |
Returns the absolute value of (scalar) variable.
a | The value we want to unsign |
Definition at line 23 of file math_func.hpp.
Referenced by AircraftController(), AircraftGetEntryPoint(), CalcRaildirsDrawstyle(), ChangeIndustryProduction(), CheckClickOnVehicle(), CheckTrainsLengths(), DeterminePluralForm(), DivideApprox(), LinkGraphOverlay::DrawContent(), BaseGraphWindow::DrawGraph(), TimetableWindow::DrawSummaryPanel(), EnumCheckRoadVehCrashTrain(), Kdtree< T, TxyFunc, CoordT, DistT >::FindNearestRecursive(), FindTrainCollideEnum(), CargoPacket::GetDistance(), GetTunnelBridgeLength(), BaseGraphWindow::GetValuesInterval(), GfxDoDrawLine(), HandleMouseEvents(), HandleWindowDragging(), HeightMapCoastLines(), DiagonalTileIterator::operator++(), CYapfDestinationTileOrStationRailT< Types >::PfCalcEstimate(), CYapfDestinationTileRoadT< Types >::PfCalcEstimate(), CYapfDestinationTileWaterT< Types >::PfCalcEstimate(), PlaceTreeAtSameHeight(), PlaceTreeGroups(), ReportNewsProductionChangeIndustry(), SettingsValueAbsolute(), TerraformTileHeight(), TownHouseChangeInfo(), UpdateViewportPosition(), and VpSelectTilesWithMethod().
|
constexpr |
Return the smallest multiple of n equal or greater than x.
x | The min value |
n | The base of the number we are searching |
Definition at line 37 of file math_func.hpp.
Referenced by TarScanner::AddFile(), AlignPtr(), VideoDriver_Win32GDI::AllocateBackingStore(), CacheSpriteAllocator::AllocatePtr(), DEFINE_POOL_METHOD(), DrawDirtyBlocks(), MakeBMPImage(), OpenGLBackend::Resize(), OpenGLSprite::Update(), and ViewportSign::UpdatePosition().
|
constexpr |
Return the smallest multiple of n equal or greater than x Applies to pointers only.
x | The min value |
n | The base of the number we are searching |
Definition at line 55 of file math_func.hpp.
References Align().
|
constexpr |
Computes ceil(a / b) * b for non-negative a and b.
a | Numerator |
b | Denominator |
Definition at line 331 of file math_func.hpp.
References CeilDiv().
Referenced by ResizeWindow(), and SurveyMemoryToText().
|
constexpr |
Computes ceil(a / b) for non-negative a and b.
a | Numerator |
b | Denominator |
Definition at line 320 of file math_func.hpp.
Referenced by AfterLoadGame(), AircraftController(), NWidgetMatrix::AssignSizePosition(), BuildLandLegend(), CalcPercentVehicleFilled(), CalcRaildirsDrawstyle(), Ceil(), CompanyCheckBankrupt(), StationViewWindow::DrawAcceptedCargo(), StationViewWindow::DrawCargoRatings(), DepotWindow::DrawVehicleInDepot(), NWidgetMainToolbarContainer::GetButtonArrangement(), Train::GetCurveSpeedLimit(), GetLoadAmount(), SmallMapWindow::GetNumberRowsLegend(), GfxDoDrawLine(), InverseRemapCoords2(), MakeTreeTypeButtons(), DepotWindow::OnPaint(), Industry::RecomputeProductionMultipliers(), ReplaceChain(), Map::ScaleBySize(), Map::ScaleBySize1D(), ServerNetworkAdminSocketHandler::SendCompanyInfo(), ServerNetworkAdminSocketHandler::SendCompanyUpdate(), NWidgetMatrix::SetCount(), SurveyMemoryToText(), and UpdateVehicleTimetable().
|
constexpr |
Clamp an integer between an interval.
This function returns a value which is between the given interval of min and max. If the given value is in this interval the value itself is returned otherwise the border of the interval is returned, according which side of the interval was 'left'.
a | The value to clamp/truncate. |
min | The minimum of the interval. |
max | the maximum of the interval. |
Definition at line 129 of file math_func.hpp.
|
constexpr |
Clamp a value between an interval.
This function returns a value which is between the given interval of min and max. If the given value is in this interval the value itself is returned otherwise the border of the interval is returned, according which side of the interval was 'left'.
a | The value to clamp/truncate. |
min | The minimum of the interval. |
max | the maximum of the interval. |
Definition at line 79 of file math_func.hpp.
Referenced by AdjustGUIZoom(), AfterLoadGame(), AirportChangeInfo(), AmbientSoundEffectCallback(), AnimationBase< Tbase, Tspec, Tobj, Textra, GetCallback, Tframehelper >::AnimateTile(), BridgeChangeInfo(), ChangeIndustryProduction(), ClampSmoothScroll(), ClickChangeDateCheat(), ClickChangeMaxHlCheat(), ClickSliderWidget(), CmdTownRating(), Train::ConsistChanged(), CreateEffectVehicleAbove(), DrawRoadVehEngine(), DrawSliderWidget(), RefitWindow::DrawWidget(), EnsureVisibleCaption(), NetworkAskRelayWindow::FindWindowPlacementAndResize(), NetworkAskSurveyWindow::FindWindowPlacementAndResize(), GenerateLandscape(), GenerateTerrainPerlin(), GetAmplitude(), QueryString::GetBoundingRect(), Path::GetCapacityRatio(), Train::GetCurveSpeedLimit(), GetGlobalVariable(), GetPlatformInfo(), GetRoadVehLength(), GetSavegameFormat(), GetServiceIntervalClamped(), VideoDriver::GetSuggestedUIScale(), GetTileHeightBelowAircraft(), VehicleScopeResolver::GetVariable(), HandleCrashedAircraft(), HeightMapCurves(), IndustrytilesChangeInfo(), InitializeWindowViewport(), InverseRemapCoords2(), MakeBMPImage(), MakePCXImage(), MakePNGImage(), IntSettingDesc::MakeValueValid(), GenerateLandscapeWindow::OnClick(), CreateScenarioWindow::OnClick(), NetworkStartServerWindow::OnClick(), CustomCurrencyWindow::OnClick(), BuildBridgeWindow::OnInitialPosition(), SpriteAlignerWindow::OnInvalidateData(), GenerateLandscapeWindow::OnQueryTextFinished(), CreateScenarioWindow::OnQueryTextFinished(), NetworkStartServerWindow::OnQueryTextFinished(), OrdersWindow::OnQueryTextFinished(), CustomCurrencyWindow::OnQueryTextFinished(), MultiCommodityFlow::PushFlow(), RailTypeChangeInfo(), RecomputePrices(), SetAircraftPosition(), SetDateWindow::SetDateWindow(), Scrollbar::SetPosition(), SetPriceBaseMultiplier(), SetSelectionTilesDirty(), ScriptConfig::SetSetting(), SetStartingYear(), GRFConfig::SetValue(), SmallMapWindow::SetZoomLevel(), SoundEffectChangeInfo(), MusicDriver_Win32::Start(), TileHeightOutsideMap(), TileLoop_Town(), TownHouseChangeInfo(), TransmitNotesOff(), Train::UpdateAcceleration(), UpdateGUIZoom(), Scrollbar::UpdateListPositionOnKeyPress(), DisasterVehicle::UpdatePosition(), VehicleEnterDepot(), and VpSelectTilesWithMethod().
|
constexpr |
Clamp the given value down to lie within the requested type.
Specialization of ClampTo for StrongType::Typedef.
For example ClampTo<uint8_t> will return a value clamped to the range of 0 to 255. Anything smaller will become 0, anything larger will become 255.
a | The 64-bit value to clamp. |
Definition at line 167 of file math_func.hpp.
|
constexpr |
Clamp an unsigned integer between an interval.
This function returns a value which is between the given interval of min and max. If the given value is in this interval the value itself is returned otherwise the border of the interval is returned, according which side of the interval was 'left'.
a | The value to clamp/truncate. |
min | The minimum of the interval. |
max | the maximum of the interval. |
Definition at line 150 of file math_func.hpp.
Referenced by CalcClosestStationTile(), ChangeIndustryProduction(), ConvertFromOldCompanyManagerFace(), IntSettingDesc::MakeValueValid(), IndustryViewWindow::OnQueryTextFinished(), VideoDriver::UpdateAutoResolution(), and SavePresetWindow::UpdateWidgetSize().
|
constexpr |
Returns the (absolute) difference between two (scalar) variables.
a | The first scalar |
b | The second scalar |
Definition at line 234 of file math_func.hpp.
Referenced by DisasterTick_Big_Ufo(), DisasterTick_Big_Ufo_Destroyer(), DisasterTick_Ufo(), DistanceManhattan(), DistanceMax(), DistanceMaxPlusManhattan(), DrawTileSelection(), PlaceTreeAtSameHeight(), and VpSelectTilesWithMethod().
int DivideApprox | ( | int | a, |
int | b | ||
) |
Deterministic approximate division.
Cancels out division errors stemming from the integer nature of the division over multiple runs.
a | Dividend. |
b | Divisor. |
Definition at line 22 of file math_func.cpp.
References abs().
Referenced by StationViewWindow::BuildCargoList(), and StationViewWindow::EstimateDestinations().
uint32_t IntSqrt | ( | uint32_t | num | ) |
Compute the integer square root.
num | Radicand. |
Definition at line 42 of file math_func.cpp.
Referenced by CanalMaintenanceCost(), RailMaintenanceCost(), RoadMaintenanceCost(), SignalMaintenanceCost(), and StationMaintenanceCost().
|
constexpr |
Checks if a value is between a window started at some base point.
This function checks if the value x is between the value of base and base+size. If x equals base this returns true. If x equals base+size this returns false.
x | The value to check |
base | The base value of the interval |
size | The size of the interval |
Definition at line 252 of file math_func.hpp.
Referenced by AirportGetNearestTown(), CmdPlantTree(), OrthogonalTileArea::Contains(), ConvertSdlKeycodeIntoMy(), DrawTileSelection(), ScriptDebugWindow::DrawWidget(), FindStationsNearby(), FindWindowFromPt(), OrdersWindow::GetOrderFromPt(), GetSlopePixelZOutsideMap(), NWidgetNewGRFDisplay::GetWidgetFromPos(), NWidgetCore::GetWidgetFromPos(), NWidgetContainer::GetWidgetFromPos(), NWidgetStacked::GetWidgetFromPos(), NWidgetMatrix::GetWidgetFromPos(), NWidgetBackground::GetWidgetFromPos(), NewGRFInspectWindow::HasVariableParameter(), Scrollbar::IsVisible(), MoveBuoysToWaypoints(), IndustryViewWindow::OnClick(), NetworkContentListWindow::OnClick(), SpriteAlignerWindow::OnClick(), TransparenciesWindow::OnClick(), TranslateXYToTileCoord(), and ViewportAddLandscape().
|
constexprnoexcept |
Checks if a value is in an interval.
Returns true if a value is in the interval of [min, max).
x | The value to check |
min | The minimum of the interval |
max | The maximum of the interval |
Definition at line 268 of file math_func.hpp.
Referenced by AddChildSpriteToFoundation(), AddDateIntroducedRailTypes(), AddDateIntroducedRoadTypes(), AfterLoadGame(), Map::Allocate(), CmdPlantTree(), RoadVehicle::Crash(), DeleteLastRoadVeh(), NetworkClientListWindow::DrawCompany(), GoalListWindow::DrawListColumn(), SmallMapWindow::DrawVehicles(), GraphLegendWindow::DrawWidget(), PerformanceRatingDetailWindow::DrawWidget(), LinkGraphLegendWindow::DrawWidget(), BuildSignalWindow::DrawWidget(), BuildRailDepotWindow::DrawWidget(), BuildRoadDepotWindow::DrawWidget(), SubsidyListWindow::DrawWidget(), FileList::FindItem(), MissingGlyphSearcher::FindMissingGlyphs(), FormatString(), GenerateCompanyName(), NetworkClientListWindow::GetButtonAtPoint(), QueryString::GetCharAtPosition(), Layouter::GetCharAtPosition(), GetClosestWaterDistance(), GetHalftileFoundationCorner(), IConsoleWindow::GetTextCharacterAtPosition(), GetTownRoadType(), HasRoadTypeAvail(), IsNonContinuousFoundation(), IsPtInWindowViewport(), IsSpecialRailFoundation(), IsValidCorner(), CITYChunkHandler::Load(), PLYRChunkHandler::LoadCheck(), MapGRFStringID(), ReplaceVehicleWindow::OnClick(), BuildVehicleWindow::OnClick(), CheatWindow::OnClick(), GSConfigWindow::OnClick(), GraphLegendWindow::OnClick(), PerformanceRatingDetailWindow::OnClick(), SelectGameWindow::OnClick(), LinkGraphLegendWindow::OnClick(), NewGRFParametersWindow::OnClick(), ScriptSettingsWindow::OnClick(), ScriptDebugWindow::OnClick(), ScenarioEditorLandscapeGenerationWindow::OnClick(), SmallMapWindow::OnMouseWheel(), LinkGraphLegendWindow::OnTooltip(), NetworkClientListWindow::OnTooltip(), PlaceTreeGroupAroundTile(), Vehicle::PreDestructor(), RemapOldStringID(), SwitchNewGRFBlitter(), TTDPStringIDToOTTDStringIDMapping(), Vehicle::UpdateVisualEffect(), LinkGraphLegendWindow::UpdateWidgetSize(), BuildSignalWindow::UpdateWidgetSize(), BuildRailDepotWindow::UpdateWidgetSize(), and BuildRoadDepotWindow::UpdateWidgetSize().
|
constexpr |
Computes ten to the given power.
power | The power of ten to get. |
Definition at line 358 of file math_func.hpp.
Referenced by FormatString().
|
constexpr |
Computes round(a / b) for signed a and unsigned b.
a | Numerator |
b | Denominator |
Definition at line 342 of file math_func.hpp.
Referenced by IndustryViewWindow::DrawInfo(), DrawLayoutLine(), DrawStringMultiLine(), ScenarioEditorLandscapeGenerationWindow::DrawWidget(), TownViewWindow::DrawWidget(), HandleScrollbarScrolling(), IndustryViewWindow::OnClick(), IndustryViewWindow::OnQueryTextFinished(), and UpdateTownGrowCounter().
|
constexpr |
Clamp a value between an interval.
This function returns a value which is between the given interval of min and max. If the given value is in this interval the value itself is returned otherwise the border of the interval is returned, according which side of the interval was 'left'.
a | The value to clamp/truncate. |
min | The minimum of the interval. |
max | the maximum of the interval. |
Definition at line 102 of file math_func.hpp.
Referenced by QueryWindow::FindWindowPlacementAndResize(), and TooltipsWindow::OnInitialPosition().
|
constexpr |
Type safe swap operation.
a | variable to swap with b |
b | variable to swap with a |
Definition at line 283 of file math_func.hpp.
Referenced by AfterLoadGame(), BuildRailClick_Remove(), CalcHeightdiff(), CmdBuildAirport(), CmdBuildBridge(), GenerateCompanyColour(), GetNearbyTile(), GetPlatformInfo(), FlowStat::GetVia(), IsInRangeInclusive(), AirportSpec::IsWithinMapBounds(), AIConfigWindow::OnClick(), BuildRailStationWindow::OnPaint(), OrthogonalTileArea::OrthogonalTileArea(), PlaceRail_Station(), ReverseTrainSwapVeh(), FlowStat::SwapShares(), and UpdateTileSelection().
|
constexpr |
Converts a "fract" value 0..65535 to "percent" value 0..100.
i | value to convert, range 0..65535 |
Definition at line 306 of file math_func.hpp.
Referenced by DrawVehiclePurchaseInfo(), VehicleDetailsWindow::DrawWidget(), and ProcessConditionalOrder().
|
constexpr |
Converts a "fract" value 0..255 to "percent" value 0..100.
i | value to convert, range 0..255 |
Definition at line 295 of file math_func.hpp.
Referenced by StationViewWindow::DrawCargoRatings(), IndustryViewWindow::DrawInfo(), IndustryDirectoryWindow::GetCargoTransportedPercentsIfValid(), and IndustryDirectoryWindow::GetIndustryString().