OpenTTD
Macros | Functions | Variables
bitmath_func.hpp File Reference

Functions related to bit mathematics. More...

Go to the source code of this file.

Macros

#define SETBITS(x, y)   ((x) |= (y))
 Sets several bits in a variable.
#define CLRBITS(x, y)   ((x) &= ~(y))
 Clears several bits in a variable.
#define FIND_FIRST_BIT(x)   _ffb_64[(x)]
 Returns the first non-zero bit in a 6-bit value (from right).
#define FOR_EACH_SET_BIT_EX(Tbitpos_type, bitpos_var, Tbitset_type, bitset_value)
 Do an operation for each set bit in a value.
#define FOR_EACH_SET_BIT(bitpos_var, bitset_value)   FOR_EACH_SET_BIT_EX(uint, bitpos_var, uint, bitset_value)
 Do an operation for each set set bit in a value.

Functions

template<typename T >
static uint GB (const T x, const uint8 s, const uint8 n)
 Fetch n bits from x, started at bit s.
template<typename T , typename U >
static T SB (T &x, const uint8 s, const uint8 n, const U d)
 Set n bits in x starting at bit s to d.
template<typename T , typename U >
static T AB (T &x, const uint8 s, const uint8 n, const U i)
 Add i to n bits of x starting at bit s.
template<typename T >
static bool HasBit (const T x, const uint8 y)
 Checks if a bit in a value is set.
template<typename T >
static T SetBit (T &x, const uint8 y)
 Set a bit in a variable.
template<typename T >
static T ClrBit (T &x, const uint8 y)
 Clears a bit in a variable.
template<typename T >
static T ToggleBit (T &x, const uint8 y)
 Toggles a bit in a variable.
static uint8 FindFirstBit2x64 (const int value)
 Finds the position of the first non-zero bit in an integer.
uint8 FindFirstBit (uint32 x)
 Search the first set bit in a 32 bit variable.
uint8 FindLastBit (uint64 x)
 Search the last set bit in a 64 bit variable.
template<typename T >
static T KillFirstBit (T value)
 Clear the first bit in an integer.
template<typename T >
static uint CountBits (T value)
 Counts the number of set bits in a variable.
template<typename T >
static bool HasExactlyOneBit (T value)
 Test whether value has exactly 1 bit set.
template<typename T >
static bool HasAtMostOneBit (T value)
 Test whether value has at most 1 bit set.
template<typename T >
static T ROL (const T x, const uint8 n)
 ROtate x Left by n.
template<typename T >
static T ROR (const T x, const uint8 n)
 ROtate x Right by n.
static uint32 BSWAP32 (uint32 x)
 Perform a 32 bits endianness bitswap on x.
static uint16 BSWAP16 (uint16 x)
 Perform a 16 bits endianness bitswap on x.

Variables

const uint8 _ffb_64 [64]
 Lookup table to check which bit is set in a 6 bit variable.

Detailed Description

Functions related to bit mathematics.

Definition in file bitmath_func.hpp.

Macro Definition Documentation

#define CLRBITS (   x,
 
)    ((x) &= ~(y))
#define FIND_FIRST_BIT (   x)    _ffb_64[(x)]

Returns the first non-zero bit in a 6-bit value (from right).

Returns the position of the first bit that is not zero, counted from the LSB. Ie, 110100 returns 2, 000001 returns 0, etc. When x == 0 returns 0.

Parameters
xThe 6-bit value to check the first zero-bit
Returns
The first position of a bit started from the LSB or 0 if x is 0.

Definition at line 202 of file bitmath_func.hpp.

Referenced by CmdBuildRoadStop(), FindFirstBit2x64(), FindFirstTrack(), FloodHalftile(), RemoveFirstTrack(), TrackBitsToTrack(), and TrainController().

#define FOR_EACH_SET_BIT (   bitpos_var,
  bitset_value 
)    FOR_EACH_SET_BIT_EX(uint, bitpos_var, uint, bitset_value)

Do an operation for each set set bit in a value.

This macros is used to do an operation for each set bit in a variable. The first parameter is a variable that is used as the bit position counter. The second parameter is an expression of the bits we need to iterate over. This expression will be evaluated once.

Parameters
bitpos_varThe position counter variable.
bitset_valueThe value which we check for set bits.

Definition at line 361 of file bitmath_func.hpp.

Referenced by DrawStationTile(), TownAuthorityWindow::GetNthSetBit(), CompanyStationsWindow::OnClick(), TileLoop_Water(), and TranslateRefitMask().

#define FOR_EACH_SET_BIT_EX (   Tbitpos_type,
  bitpos_var,
  Tbitset_type,
  bitset_value 
)
Value:
for ( \
Tbitset_type ___FESBE_bits = (bitpos_var = (Tbitpos_type)0, bitset_value); \
___FESBE_bits != (Tbitset_type)0; \
___FESBE_bits = (Tbitset_type)(___FESBE_bits >> 1), bitpos_var++ \
) \
if ((___FESBE_bits & 1) != 0)

Do an operation for each set bit in a value.

This macros is used to do an operation for each set bit in a variable. The second parameter is a variable that is used as the bit position counter. The fourth parameter is an expression of the bits we need to iterate over. This expression will be evaluated once.

Parameters
Tbitpos_typeType of the position counter variable.
bitpos_varThe position counter variable.
Tbitset_typeType of the bitset value.
bitset_valueThe bitset value which we check for bits.
See Also
FOR_EACH_SET_BIT

Definition at line 340 of file bitmath_func.hpp.

#define SETBITS (   x,
 
)    ((x) |= (y))

Function Documentation

template<typename T , typename U >
static T AB ( T &  x,
const uint8  s,
const uint8  n,
const U  i 
)
inlinestatic

Add i to n bits of x starting at bit s.

This adds the value of i on n bits of x starting at bit s. The parameters x, s, i are similar to GB. Besides, \ a x must be a variable as the result are saved there. An overflow does not affect the following bits of the given bit window and is simply ignored.

Note
Parameter x must be a variable as the result is saved there.
Parameters
xThe variable to add some bits at some position
sThe start position of the addition
nThe size/window for the addition
Precondition
n < sizeof(T) * 8
s + n <= sizeof(T) * 8
Parameters
iThe value to add at the given start position in the given window.
Returns
The new value of x

Definition at line 85 of file bitmath_func.hpp.

Referenced by IncHouseConstructionTick(), and IncreaseRoadWorksCounter().

static uint16 BSWAP16 ( uint16  x)
inlinestatic

Perform a 16 bits endianness bitswap on x.

Parameters
xthe variable to bitswap
Returns
the bitswapped value.

Definition at line 395 of file bitmath_func.hpp.

static uint32 BSWAP32 ( uint32  x)
inlinestatic
template<typename T >
static T ClrBit ( T &  x,
const uint8  y 
)
inlinestatic

Clears a bit in a variable.

This function clears a bit in a variable. The variable is changed and the value is also returned. Parameter y defines the bit to clear and starts at the LSB with 0.

Parameters
xThe variable to clear the bit
yThe bit position to clear
Precondition
y < sizeof(T) * 8
Returns
The new value of the old value with the bit cleared

Definition at line 153 of file bitmath_func.hpp.

Referenced by AfterLoadGame(), AircraftHandleDestTooFar(), RoadStop::AllocateBay(), RoadStop::AllocateDriveThroughBay(), Vehicle::BeginLoading(), CargoChangeInfo(), ChangeOwnershipOfCompanyItems(), GroundVehicle< RoadVehicle, VEH_ROAD >::ClearArticulatedPart(), RoadStop::ClearDriveThrough(), GroundVehicle< RoadVehicle, VEH_ROAD >::ClearEngine(), GroundVehicle< RoadVehicle, VEH_ROAD >::ClearFreeWagon(), GroundVehicle< RoadVehicle, VEH_ROAD >::ClearFrontEngine(), GroundVehicle< RoadVehicle, VEH_ROAD >::ClearMultiheaded(), ClearSingleBridgeMiddle(), ClearSnow(), GroundVehicle< RoadVehicle, VEH_ROAD >::ClearWagon(), CmdAutofillTimetable(), CmdBuildBridge(), CmdBuildRailroadTrack(), CmdSetTimetableStart(), CmdSignalTrackHelper(), Train::ConsistChanged(), ConvertOldMultiheadToNew(), CopyGRFConfigList(), GroundVehicle< RoadVehicle, VEH_ROAD >::Crash(), Vehicle::DeleteUnreachedImplicitOrders(), DrawRailCatenaryRailway(), FeatureTownName(), FinaliseEngineArray(), FindSubsidyTownCargoRoute(), FixOldVehicles(), Vehicle::HandlePathfindingResult(), LoadNewGRF(), LoadSpriteTables(), LoadUnloadVehicle(), RoadStop::MakeDriveThrough(), MapSpriteMappingRecolour(), SelectCompanyLiveryWindow::OnInvalidateData(), ParamSet(), PrepareUnload(), ReadSpriteLayout(), ReadSpriteLayoutSprite(), LinkRefresher::RefreshLinks(), RemoveFirstTrack(), RemoveFirstTrackdir(), ReverseTrainDirection(), StationHandleBigTick(), StationMonthlyLoop(), SwapTrainFlags(), ToggleInvisibilityWithTransparency(), TryPathReserve(), UpdateTownGrowRate(), UpdateVehicleTimetable(), GroundVehicle< RoadVehicle, VEH_ROAD >::UpdateZPositionAndInclination(), and VehicleEnterDepot().

template<typename T >
static uint CountBits ( value)
inlinestatic
uint8 FindFirstBit ( uint32  x)

Search the first set bit in a 32 bit variable.

This algorithm is a static implementation of a log congruence search algorithm. It checks the first half if there is a bit set search there further. And this way further. If no bit is set return 0.

Parameters
xThe value to search
Returns
The position of the first bit set

Definition at line 39 of file bitmath_func.cpp.

Referenced by AllocateMap(), CalculateRefitMasks(), and ExploreSegment().

static uint8 FindFirstBit2x64 ( const int  value)
inlinestatic

Finds the position of the first non-zero bit in an integer.

This function returns the position of the first bit set in the integer. It does only check the bits of the bitmask 0x3F3F (0011111100111111) and checks only the bits of the bitmask 0x3F00 if and only if the lower part 0x00FF is 0. This results the bits at 0x00C0 must be also zero to check the bits at 0x3F00.

Parameters
valueThe value to check the first bits
Returns
The position of the first bit which is set
See Also
FIND_FIRST_BIT

Definition at line 218 of file bitmath_func.hpp.

References FIND_FIRST_BIT.

Referenced by CYapfBaseT< Types >::AddMultipleNodes(), FindFirstTrackdir(), NPFRoadVehicleChooseTrack(), CYapfCostRoadT< Types >::PfCalcCost(), CYapfCostRailT< Types >::PfCalcCost(), CYapfOriginTileT< Types >::PfSetStartupNodes(), RemoveFirstTrackdir(), RoadFindPathToDest(), and YapfRoadVehicleChooseTrack().

uint8 FindLastBit ( uint64  x)

Search the last set bit in a 64 bit variable.

This algorithm is a static implementation of a log congruence search algorithm. It checks the second half if there is a bit set search there further. And this way further. If no bit is set return 0.

Parameters
xThe value to search
Returns
The position of the last bit set

Definition at line 67 of file bitmath_func.cpp.

Referenced by BaseGraphWindow::DrawGraph().

template<typename T >
static uint GB ( const T  x,
const uint8  s,
const uint8  n 
)
inlinestatic

Fetch n bits from x, started at bit s.

This function can be used to fetch n bits from the value x. The s value set the start position to read. The start position is count from the LSB and starts at 0. The result starts at a LSB, as this isn't just an and-bitmask but also some bit-shifting operations. GB(0xFF, 2, 1) will so return 0x01 (0000 0001) instead of 0x04 (0000 0100).

Parameters
xThe value to read some bits.
sThe start position to read some bits.
nThe number of bits to read.
Precondition
n < sizeof(T) * 8
s + n <= sizeof(T) * 8
Returns
The selected bits, aligned to a LSB.

Definition at line 34 of file bitmath_func.hpp.

Referenced by AfterLoadGame(), AirportChangeInfo(), AmbientSoundEffectCallback(), AnimationBase< IndustryAnimationBase, IndustryTileSpec, Industry, int, GetSimpleIndustryCallback >::AnimateTile(), Buffer::AppendUtf8(), AreCompanyManagerFaceBitsValid(), BmpRead1(), BmpRead24(), BmpRead4(), BmpRead4Rle(), BmpRead8(), BuildObject(), BuildTownHouse(), CcAddVehicleNewGroup(), CcBuildIndustry(), CcRoadStop(), AnimationBase< IndustryAnimationBase, IndustryTileSpec, Industry, int, GetSimpleIndustryCallback >::ChangeAnimationFrame(), ChangeIndustryProduction(), ChangeTrainDirRandomly(), CmdAddVehicleGroup(), CmdAlterGroup(), CmdAutofillTimetable(), CmdBuildAirport(), CmdBuildBridge(), CmdBuildDock(), CmdBuildIndustry(), CmdBuildObject(), CmdBuildRailStation(), CmdBuildRailWaypoint(), CmdBuildRoadStop(), CmdBuildSingleSignal(), CmdBuildVehicle(), CmdChangeBankBalance(), CmdChangeServiceInt(), CmdChangeTimetable(), CmdClearArea(), CmdCloneOrder(), CmdCompanyCtrl(), CmdCreateGoal(), CmdCreateStoryPage(), CmdCreateStoryPageElement(), CmdCreateSubsidy(), CmdCustomNewsItem(), CmdDeleteOrder(), CmdGoalQuestion(), CmdInsertOrder(), CmdLandscapeClear(), CmdLevelLand(), CmdModifyOrder(), CmdMoveOrder(), CmdMoveRailVehicle(), CmdOrderRefit(), CmdPlantTree(), CmdRefitVehicle(), CmdRemoveRoadStop(), CmdSellVehicle(), CmdSendVehicleToDepot(), CmdSetAutoReplace(), CmdSetCompanyColour(), CmdSetStoryPageDate(), CmdSetStoryPageTitle(), CmdSetTimetableStart(), CmdSetVehicleOnTime(), CmdSetVehicleVisibility(), CmdShowStoryPage(), CmdSignalTrackHelper(), CmdSkipToOrder(), CmdStartStopVehicle(), CmdTerraformLand(), CmdTownCargoGoal(), CmdTownGrowthRate(), CmdUpdateStoryPageElement(), Convert8bitBooleanCallback(), ConvertFromOldCompanyManagerFace(), Blitter_32bppAnim::CopyFromBuffer(), CopyFromOldName(), CreateNewIndustry(), DecodeMonitorCargoType(), DecodeMonitorCompany(), DecodeMonitorIndustry(), DecodeMonitorTown(), Disaster_CoalMine_Init(), DisasterTick_Aircraft(), DisasterTick_Big_Ufo_Destroyer(), DisasterTick_Submarine(), DisasterTick_Zeppeliner(), DoCommandP(), DoCreateNewIndustry(), Blitter_32bppOptimized::Draw(), Blitter_32bppAnim::Draw(), DrawCommonTileSeq(), DrawCommonTileSeqInGUI(), DrawMatrix(), DrawNewObjectTileInGUI(), DrawSprite(), DrawSpriteViewport(), DrawTileLayout(), BuildObjectWindow::DrawWidget(), BuildRailStationWindow::DrawWidget(), BuildRailWaypointWindow::DrawWidget(), AIInfo::DummyConstructor(), Extract(), FeatureTownName(), UnmappedChoiceList::Flush(), FormatString(), GamelogPrint(), AI::GameLoop(), GenerateCompanyColour(), GenerateLandscape(), GenerateTrees(), GenRandomRoadBits(), GetAiPurchaseCallbackResult(), GetBridgeAxis(), GetBridgeType(), GetCargoSuffix(), GetCleanHouseType(), GetCleanIndustryGfx(), GetClearCounter(), GetClearDensity(), GetCompanyManagerFaceBits(), GetCompanyManagerFaceSprite(), Order::GetConditionComparator(), Order::GetConditionValue(), Order::GetConditionVariable(), GetCountAndDistanceOfClosestInstance(), GetCrossingRoadAxis(), Order::GetDepotActionType(), Order::GetDepotOrderType(), GetDisallowedRoadDirections(), GetDistanceFromNearbyHouse(), GetFeatureIndex(), GetFeatureNum(), GetFence(), GetFieldType(), GetHouseBuildingStage(), GetHouseConstructionTick(), GetHouseProcessingTime(), GetHouseTriggers(), GetIndustryConstructionCounter(), GetIndustryConstructionStage(), GetIndustryTriggers(), GetLiftDestination(), GetLiftPosition(), GetLoadAmount(), Order::GetLoadType(), GetLockDirection(), GetLockPart(), GetNearbyTile(), Waypoint::GetNewGRFVariable(), GetNextArticulatedPart(), Order::GetNonStopType(), GetPresentSignals(), GetRailDepotDirection(), GetRailReservationTrackBits(), GetRailTileType(), GetRailType(), RailTypeScopeResolver::GetRandomBits(), GetRawClearGround(), GetRefitCostFactor(), GetRoadBits(), GetRoadDepotDirection(), GetRoadOwner(), GetRoadside(), GetRoadTileType(), GetRoadTypes(), VehicleResolverObject::GetScope(), GetShipDepotAxis(), GetShipDepotPart(), GetSignalStates(), GetStationTileRandomBits(), GetStationType(), Order::GetStopLocation(), GetTileOwner(), GetTileType(), GetTrackBits(), GetTreeCount(), GetTreeCounter(), GetTreeDensity(), GetTreeGround(), GetTreeGrowth(), GetTropicZone(), GetTunnelBridgeDirection(), GetTunnelBridgeTransportType(), Order::GetType(), SpriteFontCache::GetUnicodeGlyph(), Order::GetUnloadType(), GRFParameterInfo::GetValue(), IndustriesScopeResolver::GetVariable(), TownScopeResolver::GetVariable(), VehicleScopeResolver::GetVariable(), HouseScopeResolver::GetVariable(), StationScopeResolver::GetVariable(), GetWaterClass(), GetWaterTileType(), GfxFillRect(), GlobalVarChangeInfo(), HandleAutoSignalPlacement(), HandleCrashedAircraft(), HandleCrashedTrain(), RoadStop::HasFreeBay(), HeightMapNormalize(), IncHouseConstructionTick(), IncreaseRoadWorksCounter(), IndustriesChangeInfo(), IndustrytilesChangeInfo(), IsBridgeAbove(), Load_VEHS(), LoadChunk(), MakeCzechTownName(), MapNewGRFIndustryType(), Order::MapOldOrder(), MaybeCrashAirplane(), MirrorRoadBits(), MoveWaypointsToBaseStations(), BuildObjectWindow::OnClick(), BuildRailStationWindow::OnClick(), BuildRailWaypointWindow::OnClick(), TimetableWindow::OnInvalidateData(), OrdersWindow::OnInvalidateData(), VehicleListWindow::OnInvalidateData(), Order::Order(), Blitter_32bppAnim::PaletteAnimate(), ParamSet(), PlaceTree(), PlaceTreeAtSameHeight(), PlaceTreeGroups(), Packet::PrepareToSend(), ReadSpriteLayoutSprite(), ResetRestoreAllTransparency(), DeterministicSpriteGroup::Resolve(), River_Hash(), RotateRoadBits(), ScaleAllCompanyManagerFaceBits(), SeedChance(), Packet::Send_uint16(), Packet::Send_uint32(), Packet::Send_uint64(), SetHouseType(), SetIndustryGfx(), BuildObjectWindow::SetStringParameters(), SpriteFontCache::SetUnicodeGlyph(), SetWaterClassDependingOnSurroundings(), Vehicle::ShowVisualEffect(), SlCalcConvFileLen(), SlCalcConvMemLen(), SpawnAdvancedVisualEffect(), SoundDriver_Win32::Start(), StartTextRefStackUsage(), StartupOneEngine(), StationMonthlyLoop(), TileHash2Bit(), TileLoop_Town(), TownHouseChangeInfo(), TrainCheckIfLineEnds(), TranslateTTDPatchCodes(), TryBuildLightHouse(), VehicleListIdentifier::UnpackIfValid(), UnpackVersion4Order(), UpdateCursorSize(), Vehicle::UpdateVisualEffect(), Utf8Decode(), Utf8Encode(), Utf8EncodedCharLen(), VehicleFromPos(), VehicleFromPosXY(), VehicleRandomBits(), ViewportAddVehicles(), and LanguageWriter::WriteLang().

template<typename T >
static bool HasAtMostOneBit ( value)
inlinestatic

Test whether value has at most 1 bit set.

Parameters
valuethe value to test.
Returns
does value have at most 1 bit set?

Definition at line 288 of file bitmath_func.hpp.

Referenced by DrawRoadBits(), and ShowRefitOptionsList().

template<typename T >
static bool HasBit ( const T  x,
const uint8  y 
)
inlinestatic

Checks if a bit in a value is set.

This function checks if a bit inside a value is set or not. The y value specific the position of the bit, started at the LSB and count from 0.

Parameters
xThe value to check
yThe position of the bit to check, started from the LSB
Precondition
y < sizeof(T) * 8
Returns
True if the bit is set, false else.

Definition at line 105 of file bitmath_func.hpp.

Referenced by AcceptEnginePreview(), AddArticulatedParts(), NewGRFWindow::AddGRFToActive(), LinkGraph::AddNode(), AfterLoadGame(), AfterLoadRoadStops(), AfterLoadVehicles(), AircraftHandleDestTooFar(), AircraftVehicleChangeInfo(), RoadStop::AllocateBay(), AnimationBase< IndustryAnimationBase, IndustryTileSpec, Industry, int, GetSimpleIndustryCallback >::AnimateTile(), Vehicle::BeginLoading(), TimetableWindow::BuildArrivalDepartureList(), GameOptionsWindow::BuildDropDownList(), BuildObject(), RefitWindow::BuildRefitList(), BuildReplacementVehicle(), CompanyStationsWindow::BuildStationsList(), BuildTownHouse(), CalcPercentVehicleFilled(), CalculateRefitMasks(), CanBuildVehicleInfrastructure(), CFollowTrackT< Ttr_type_, VehicleType, T90deg_turns_allowed_, Tmask_reserved_tracks >::CanEnterNewTile(), CanEnterTile(), CanRemoveRoadWithStop(), CanStationTileHavePylons(), CanStationTileHaveWires(), CargoFilter(), CcRoadStop(), ChangeIndustryProduction(), ChangeOwnershipOfCompanyItems(), CheckAllowRemoveTunnelBridge(), CheckAutoreplaceValidity(), CheckBuildableTile(), CheckFlatLandRailStation(), CheckFlatLandRoadStop(), CheckIfIndustryTilesAreFree(), RoadStop::Entry::CheckIntegrity(), CheckRoadBlockedForOvertaking(), BuildRailStationWindow::CheckSelectedSize(), CleanIndustryTileTable(), RoadStop::ClearDriveThrough(), CmdAddVehicleGroup(), CmdAlterGroup(), CmdAutofillTimetable(), CmdBuildAirport(), CmdBuildBridge(), CmdBuildDock(), CmdBuildIndustry(), CmdBuildLongRoad(), CmdBuildObject(), CmdBuildRailStation(), CmdBuildRailVehicle(), CmdBuildRailWaypoint(), CmdBuildRoad(), CmdBuildRoadStop(), CmdBuildRoadVehicle(), CmdBuildSingleRail(), CmdBuildSingleSignal(), CmdBuyCompany(), CmdChangeServiceInt(), CmdClearArea(), CmdCloneVehicle(), CmdConvertRail(), CmdDoTownAction(), CmdForceTrainProceed(), CmdFoundTown(), CmdLevelLand(), CmdMassStartStopVehicle(), CmdMoveRailVehicle(), CmdRailTrackHelper(), CmdRefitVehicle(), CmdRemoveFromRailStation(), CmdRemoveFromRailWaypoint(), CmdRemoveLongRoad(), CmdRemoveRoadStop(), CmdReverseTrainDirection(), CmdSellRailWagon(), CmdSetAutoReplace(), CmdSetGroupReplaceProtection(), CmdSetTimetableStart(), CmdSignalTrackHelper(), CmdStartStopVehicle(), CompaniesGenStatistics(), Train::ConsistChanged(), ConvertFromOldCompanyManagerFace(), ConvertOldMultiheadToNew(), BaseConsist::CopyConsistPropertiesFrom(), CountArticulatedParts(), Train::Crash(), CreateGroupFromGroupID(), CreateNewIndustryHelper(), Vehicle::DeleteUnreachedImplicitOrders(), DeliverGoods(), Engine::DetermineCapacity(), DisasterTick_Aircraft(), DisasterTick_Helicopter_Rotors(), DisasterTick_Submarine(), DisasterTick_Ufo(), DisasterTick_Zeppeliner(), DoCreateNewIndustry(), BaseSettingEntry::Draw(), NWidgetScrollbar::Draw(), StationViewWindow::DrawAcceptedCargo(), DrawBridgeMiddle(), DrawCanalWater(), DrawCommonTileSeq(), DrawCommonTileSeqInGUI(), DrawCompanyManagerFace(), DrawEngineList(), BaseGraphWindow::DrawGraph(), IndustryViewWindow::DrawInfo(), DrawRailCatenaryOnBridge(), DrawRailCatenaryRailway(), TownAuthorityWindow::DrawRatings(), DrawRoadBits(), DrawSprite(), DrawSpriteViewport(), DrawStationTile(), DrawTile_TunnelBridge(), DrawWaterLock(), TransparenciesWindow::DrawWidget(), GraphLegendWindow::DrawWidget(), BuildObjectWindow::DrawWidget(), TownViewWindow::DrawWidget(), TimetableWindow::DrawWidget(), CompanyStationsWindow::DrawWidget(), BuildIndustryWindow::DrawWidget(), SelectCompanyLiveryWindow::DrawWidget(), TownDirectoryWindow::DrawWidget(), CompanyInfrastructureWindow::DrawWidget(), VehicleViewWindow::DrawWidget(), ErrorUnknownCallbackResult(), FeatureTownName(), FillGRFDetails(), FillNewGRFVehicleCache(), SignList::FilterSignList(), FinalisePriceBaseMultipliers(), FindGRFConfig(), FindSubsidyCargoDestination(), FindSubsidyIndustryCargoRoute(), FindTrainOnTrackEnum(), FixTTOEngines(), FormatString(), Train::GetAccelerationStatus(), GetAcceptanceMask(), GetArticulatedRefitMasks(), GetArticulatedVehicleCargoesAndRefits(), GetBestFittingSubType(), GetCanalSpriteOffset(), GetCapacityOfArticulatedParts(), GetCargoSubtypeText(), GetCargoSuffix(), GetCompanyRailtypes(), GetCompanyRoadtypes(), GetDriveableTrackdirBits(), GetEngineLiveryScheme(), RoadStop::GetEntry(), GetFoundation_Town(), GetGlobalVariable(), FreeTypeFontCache::GetGlyph(), Train::GetImage(), GetIndustryProbabilityCallback(), GetLoadAmount(), GetMaskOfTownActions(), GetNewCargoTypeForReplace(), GetNextArticulatedPart(), Airport::GetNumHangars(), NewGRFWindow::GetPalette(), Train::GetPoweredPartPower(), GetPreviewCompany(), GetRailReservationTrackBits(), GetRailStationAxis(), GetRailTypeDropDownList(), GetRefitCostFactor(), GetSingleSignalState(), GroundVehicle< RoadVehicle, VEH_ROAD >::GetSlopeResistance(), GetTileSingleEntry(), GetTLG(), CompanyInfrastructureWindow::GetTotalMaintenanceCost(), BaseGraphWindow::GetValuesInterval(), IndustriesScopeResolver::GetVariable(), HouseScopeResolver::GetVariable(), StationScopeResolver::GetVariable(), GetWaterTileType(), Train::GetWeight(), GRFLoadConfig(), GroundSpritePaletteTransform(), HandleBankruptcyTakeover(), Vehicle::HandleBreakdown(), Vehicle::HandleLoading(), Vehicle::HandlePathfindingResult(), LinkRefresher::HandleRefit(), HandleSavegameLoadCrash(), HandleScrollbarScrolling(), HasCPUIDFlag(), HasCrossingReservation(), HasDepotReservation(), HasGrfMiscBit(), HasPowerOnRail(), HasRailCatenary(), HasRailtypeAvail(), GoodsEntry::HasRating(), HasStationReservation(), HasTileRoadType(), HasTrack(), HasTunnelBridgeReservation(), HasTunnelBridgeSnowOrDesert(), HeightMapCoastLines(), HeightMapCurves(), HeightMapSmoothCoasts(), IndustriesChangeInfo(), IndustryTemporarilyRefusesCargo(), IsArticulatedEngine(), Vehicle::IsArticulatedPart(), IsArticulatedVehicleRefittable(), IsBridge(), IsCompatibleRail(), IsCrossingBarred(), NWidgetCore::IsDisabled(), Engine::IsEnabled(), GroundVehicle< RoadVehicle, VEH_ROAD >::IsEngine(), IsEngineBuildable(), IsEngineRefittable(), RoadStop::IsEntranceBusy(), ObjectSpec::IsEverAvailable(), RoadStop::IsFreeBay(), GroundVehicle< RoadVehicle, VEH_ROAD >::IsFreeWagon(), Vehicle::IsFrontEngine(), IsGoodGRFConfigList(), Engine::IsHidden(), NWidgetCore::IsHighlighted(), IsHouseCompleted(), IsIndustryCompleted(), IsInvisibilitySet(), IsLoggableGrfConfig(), NWidgetCore::IsLowered(), GroundVehicle< RoadVehicle, VEH_ROAD >::IsMultiheaded(), IsOnSnow(), IsSignalPresent(), IsSnowTile(), IsStationAvailable(), IsStationTileBlocked(), IsTransparencySet(), Order::IsTravelTimetabled(), IsTunnel(), IsUphillTrackdir(), IsValidCompanyManagerFace(), GroundVehicle< RoadVehicle, VEH_ROAD >::IsWagon(), Order::IsWaitTimetabled(), RoadStop::Leave(), LiftHasDestination(), LoadNewGRF(), LoadNewGRFFile(), LoadUnloadVehicle(), MakeDefaultName(), MakeManyOfMany(), MakeRoadNormal(), MapNewGRFIndustryType(), MapSpriteMappingRecolour(), MarkTrainAsStuck(), MonitorMonitorsIndustry(), MoveWaypointsToBaseStations(), Vehicle::NeedsServicing(), NetworkAfterNewGRFScan(), NetworkCompanyIsPassworded(), NewVehicleAvailable(), NPFGetFlag(), OskWindow::OnClick(), TimetableWindow::OnClick(), SelectCompanyLiveryWindow::OnClick(), NewGRFWindow::OnClick(), BuildRailStationWindow::OnClick(), SelectCompanyLiveryWindow::OnDropdownSelect(), TimetableWindow::OnInvalidateData(), GenerateLandscapeWindow::OnInvalidateData(), SelectCompanyLiveryWindow::OnInvalidateData(), NewGRFWindow::OnInvalidateData(), VehicleListWindow::OnInvalidateData(), TownAuthorityWindow::OnPaint(), TimetableWindow::OnPaint(), BuildRailStationWindow::OnPaint(), SelectCompanyManagerFaceWindow::OnPaint(), SignList::OwnerVisibilityFilter(), ParamSet(), PerformStationTileSlopeCheck(), PlayVehicleSound(), PopupMainCompanyToolbMenu(), LinkRefresher::PredictNextOrder(), NewGRFSpriteLayout::PrepareLayout(), PrepareUnload(), NewGRFSpriteLayout::ProcessRegisters(), RailNoLevelCrossings(), RailVehicleChangeInfo(), RandomCompanyManagerFaceBits(), ReadSpriteLayout(), ReadSpriteLayoutSprite(), RoadStop::Entry::Rebuild(), LinkGraphOverlay::RebuildCache(), RefitVehicle(), LinkRefresher::RefreshLinks(), RemoveRoad(), ResetCustomIndustries(), ResetIndustries(), ResetNewGRFErrors(), StationResolverObject::ResolveReal(), ReverseTrainDirection(), RoadFindPathToDest(), RoadVehicleChangeInfo(), RunVehicleDayProc(), ScaleAllCompanyManagerFaceBits(), NetworkUDPSocketHandler::SendNetworkGameInfo(), ServerNetworkGameSocketHandler::SendNewGRFCheck(), LinkGraphLegendWindow::SetOverlay(), BuildObjectWindow::SetStringParameters(), GenerateLandscapeWindow::SetStringParameters(), SelectCompanyLiveryWindow::SetStringParameters(), SetYearEngineAgingStops(), ShipVehicleChangeInfo(), ShowDropDownMenu(), ShowMissingContentWindow(), ShowNewGrfVehicleError(), Vehicle::ShowVisualEffect(), SlReadSimpleGamma(), SpawnAdvancedVisualEffect(), SpriteLayoutPaletteTransform(), StartupOneEngine(), CompanyStationsWindow::StationRatingMinSorter(), SubtractMoneyFromAnyCompany(), SwapTrainFlags(), SwitchNewGRFBlitter(), TileLoop_Town(), TileLoop_Water(), ToolbarOptionsClick(), TownDirectoryWindow::TownRatingSorter(), TrackOverlapsTracks(), TrainController(), TrainExitDir(), TriggerIndustryProduction(), TriggerObjectAnimation(), TriggerObjectTileAnimation(), TriggerStationRandomisation(), TriggerWatchedCargoCallbacks(), TryPathReserve(), OrdersWindow::UpdateAutoRefitState(), UpdateObjectColours(), OskWindow::UpdateOskState(), UpdateStationAcceptance(), UpdateVehicleTimetable(), Vehicle::UpdateVisualEffect(), SelectCompanyLiveryWindow::UpdateWidgetSize(), CompanyInfrastructureWindow::UpdateWidgetSize(), GroundVehicle< RoadVehicle, VEH_ROAD >::UpdateZPosition(), IndustrySpec::UsesSmoothEconomy(), Utf8Decode(), VehicleLengthChanged(), VerifyAutoreplaceRefitForOrders(), GRFConfig::~GRFConfig(), and RoadStop::~RoadStop().

template<typename T >
static bool HasExactlyOneBit ( value)
inlinestatic

Test whether value has exactly 1 bit set.

Parameters
valuethe value to test.
Returns
does value have exactly 1 bit set?

Definition at line 276 of file bitmath_func.hpp.

Referenced by CheckFlatLandRoadStop(), CheckRoadSlope(), CmdBuildBridge(), CmdBuildRoad(), CmdBuildRoadStop(), CmdBuildSingleRail(), and CmdBuildTunnel().

template<typename T >
static T KillFirstBit ( value)
inlinestatic

Clear the first bit in an integer.

This function returns a value where the first bit (from LSB) is cleared. So, 110100 returns 110000, 000001 returns 000000, etc.

Parameters
valueThe value to clear the first bit
Returns
The new value with the first bit cleared

Definition at line 241 of file bitmath_func.hpp.

Referenced by CYapfBaseT< Types >::AddMultipleNodes(), CheckAllowRemoveRoad(), CheckNextTrainTile(), CmdBuildSingleSignal(), ExtendTrainReservation(), IsSafeWaitingPosition(), CYapfCostRoadT< Types >::PfCalcCost(), CYapfCostRailT< Types >::PfCalcCost(), CYapfOriginTileT< Types >::PfSetStartupNodes(), RoadFindPathToDest(), TrackBitsToTrack(), and TracksOverlap().

template<typename T >
static T ROL ( const T  x,
const uint8  n 
)
inlinestatic

ROtate x Left by n.

Note
Assumes a byte has 8 bits
Parameters
xThe value which we want to rotate
nThe number how many we want to rotate
Precondition
n < sizeof(T) * 8
Returns
A bit rotated number

Definition at line 303 of file bitmath_func.hpp.

Referenced by StringData::HashStr(), VerifyOldNameChecksum(), and StringData::VersionHashStr().

template<typename T >
static T ROR ( const T  x,
const uint8  n 
)
inlinestatic

ROtate x Right by n.

Note
Assumes a byte has 8 bits
Parameters
xThe value which we want to rotate
nThe number how many we want to rotate
Precondition
n < sizeof(T) * 8
Returns
A bit rotated number

Definition at line 318 of file bitmath_func.hpp.

Referenced by Randomizer::Next().

template<typename T , typename U >
static T SB ( T &  x,
const uint8  s,
const uint8  n,
const U  d 
)
inlinestatic

Set n bits in x starting at bit s to d.

This function sets n bits from x which started as bit s to the value of d. The parameters x, s and n works the same as the parameters of GB. The result is saved in x again. Unused bits in the window provided by n are set to 0 if the value of d isn't "big" enough. This is not a bug, its a feature.

Note
Parameter x must be a variable as the result is saved there.
To avoid unexpected results the value of d should not use more space as the provided space of n bits (log2)
Parameters
xThe variable to change some bits
sThe start position for the new bits
nThe size/window for the new bits
dThe actually new bits to save in the defined position.
Precondition
n < sizeof(T) * 8
s + n <= sizeof(T) * 8
Returns
The new value of x

Definition at line 60 of file bitmath_func.hpp.

Referenced by AfterLoadGame(), AircraftVehicleChangeInfo(), ClearEnginesHiddenFlagOfCompany(), CmdSetVehicleVisibility(), CmdSignalTrackHelper(), NWidgetMatrix::Draw(), EncodeCargoIndustryMonitor(), EncodeCargoTownMonitor(), RoadStop::Enter(), GenericPlaceSignals(), GetGlobalVariable(), GetPlatformInfo(), NWidgetMatrix::GetWidgetFromPos(), HaltLift(), HandleAutoSignalPlacement(), IndustriesChangeInfo(), IndustryProductionCallback(), LoadUnloadVehicle(), MakeBridgeRamp(), MakeField(), MakeLockTile(), MakeObject(), MakeRailTunnel(), MakeRoadCrossing(), MakeRoadDepot(), MakeRoadNormal(), MakeRoadTunnel(), MakeShipDepot(), MakeShore(), MakeStation(), MakeTree(), MakeWater(), MoveBuoysToWaypoints(), NetworkServerUpdateCompanyPassworded(), NPFSetFlag(), SelectStationWindow< T >::OnClick(), PlaceAirport(), PlaceRoadStop(), RailVehicleChangeInfo(), ReadSpriteLayoutSprite(), ResetIndustryConstructionStage(), RoadVehicleChangeInfo(), SetClearCounter(), SetClearDensity(), SetCompanyManagerFaceBits(), Order::SetConditionComparator(), Order::SetConditionValue(), Order::SetConditionVariable(), SetCrossingBarred(), SetCrossingReservation(), Order::SetDepotActionType(), Order::SetDepotOrderType(), SetDepotReservation(), SetDisallowedRoadDirections(), RoadStop::SetEntranceBusy(), SetFence(), SetFieldType(), SetHasSignals(), SetHouseCompleted(), SetHouseProcessingTime(), SetHouseTriggers(), SetHouseType(), SetIndustryCompleted(), SetIndustryConstructionCounter(), SetIndustryConstructionStage(), SetIndustryGfx(), SetIndustryTriggers(), SetLiftDestination(), SetLiftPosition(), Order::SetLoadType(), Order::SetNonStopType(), SetPresentSignals(), SetRailStationReservation(), SetRailType(), SetRoadBits(), SetRoadOwner(), SetRoadside(), SetRoadTypes(), SetSignalStates(), SetStationTileRandomBits(), Order::SetStopLocation(), GRFConfig::SetSuitablePalette(), SetTileOwner(), SetTileType(), SetTrackBits(), SetTrackReservation(), Order::SetTravelTimetabled(), SetTreeCounter(), SetTreeGroundDensity(), SetTreeGrowth(), SetTropicZone(), SetTunnelBridgeReservation(), SetTunnelBridgeSnowOrDesert(), Order::SetUnloadType(), NWidgetMatrix::SetupSmallestSize(), GRFParameterInfo::SetValue(), Order::SetWaitTimetabled(), SetWaterClass(), ShipVehicleChangeInfo(), StationMonthlyLoop(), TerminateRoadWorks(), TownHouseChangeInfo(), UpdateStationAcceptance(), Vehicle::UpdateVisualEffect(), and VerifyOldNameChecksum().

template<typename T >
static T SetBit ( T &  x,
const uint8  y 
)
inlinestatic

Set a bit in a variable.

This function sets a bit in a variable. The variable is changed and the value is also returned. Parameter y defines the bit and starts at the LSB with 0.

Parameters
xThe variable to set a bit
yThe bit position to set
Precondition
y < sizeof(T) * 8
Returns
The new value of the old value with the bit set

Definition at line 123 of file bitmath_func.hpp.

Referenced by AcceptEnginePreview(), AddChildSpriteScreen(), AddSortableSpriteToDraw(), AfterLoadGame(), AircraftHandleDestTooFar(), AircraftVehicleChangeInfo(), BuildStationPart(), BuildTownHouse(), CalculateRefitMasks(), CargoChangeInfo(), ChangeOwnershipOfCompanyItems(), ChangeTownRating(), CheckIfTrainNeedsService(), RoadStop::ClearDriveThrough(), CmdAutofillTimetable(), CmdBuildAircraft(), CmdBuildRailVehicle(), CmdBuildRoadVehicle(), CmdBuildShip(), CmdCloneVehicle(), CmdRemoveRailroadTrack(), CmdRemoveRoadStop(), CmdRemoveSignalTrack(), CmdSignalTrackHelper(), CmdStartStopVehicle(), Train::ConsistChanged(), ConvertFromOldCompanyManagerFace(), ConvertOldMultiheadToNew(), BaseConsist::CopyConsistPropertiesFrom(), CopyGRFConfigList(), DeliverGoods(), DisplayVehicleSortDropDown(), SettingsPage::Draw(), StationViewWindow::DrawAcceptedCargo(), DrawBridgeMiddle(), DrawCommonTileSeq(), DrawRailCatenaryRailway(), DrawStationCoverageAreaText(), EncodeCargoIndustryMonitor(), EnginesDailyLoop(), RoadStop::Enter(), ErrorUnknownCallbackResult(), FinaliseEngineArray(), FixOldVehicles(), RoadStop::FreeBay(), GetArticulatedVehicleCargoesAndRefits(), GetAvailableVehicleCargoTypes(), GetCompanyRoadtypes(), GetCountAndDistanceOfClosestInstance(), GetGlobalVariable(), GetMaskOfAllowedCurrencies(), Airport::GetNumHangars(), HouseScopeResolver::GetVariable(), StationScopeResolver::GetVariable(), GRFLoadConfig(), GRFUnsafe(), HandleBankruptcyTakeover(), ClientNetworkUDPSocketHandler::HandleIncomingNetworkGameInfoGRFConfig(), Vehicle::HandlePathfindingResult(), IndustriesChangeInfo(), InitializeSortedCargoSpecs(), InsertOrder(), IsGoodGRFConfigList(), Vehicle::LeaveStation(), LoadNewGRF(), LoadUnloadVehicle(), LookupManyOfMany(), MakeDefaultName(), RoadStop::MakeDriveThrough(), MakeSnow(), Order::MapOldOrder(), MapSpriteMappingRecolour(), MarkTrainAsStuck(), NewVehicleAvailable(), CompanyStationsWindow::OnClick(), TimetableWindow::OnClick(), GenerateLandscapeWindow::OnClick(), PaymentRatesGraphWindow::OnClick(), GraphLegendWindow::OnInvalidateData(), ParamSet(), PlaceRoadStop(), LinkRefresher::PredictNextOrder(), NewGRFSpriteLayout::PrepareLayout(), PrepareUnload(), RailTypeChangeInfo(), RailVehicleChangeInfo(), ReadSpriteLayoutSprite(), LinkRefresher::RefreshLinks(), RoadVehicleChangeInfo(), ScrollbarClickPositioning(), Vehicle::SendToDepot(), GroundVehicle< RoadVehicle, VEH_ROAD >::SetArticulatedPart(), SetBridgeMiddle(), GroundVehicle< RoadVehicle, VEH_ROAD >::SetEngine(), GroundVehicle< RoadVehicle, VEH_ROAD >::SetFreeWagon(), GroundVehicle< RoadVehicle, VEH_ROAD >::SetFrontEngine(), SetLiftDestination(), GroundVehicle< RoadVehicle, VEH_ROAD >::SetMultiheaded(), SmallMapWindow::SetOverlayCargoMask(), SettingsDisableElrail(), SetupCargoForClimate(), GroundVehicle< RoadVehicle, VEH_ROAD >::SetWagon(), ShipVehicleChangeInfo(), ShowNewGrfVehicleError(), SwapTrainFlags(), ToggleInvisibilityWithTransparency(), TownActionBuildStatue(), TownHouseChangeInfo(), TranslateRefitMask(), TriggerStationRandomisation(), TriggerWatchedCargoCallbacks(), UpdateOrderDest(), LinkGraphLegendWindow::UpdateOverlayCargoes(), LinkGraphLegendWindow::UpdateOverlayCompanies(), BaseGraphWindow::UpdateStatistics(), UpdateTownCargoes(), UpdateTownGrowRate(), UpdateVehicleTimetable(), Vehicle::UpdateVisualEffect(), and GroundVehicle< RoadVehicle, VEH_ROAD >::UpdateZPositionAndInclination().

template<typename T >
static T ToggleBit ( T &  x,
const uint8  y 
)
inlinestatic

Toggles a bit in a variable.

This function toggles a bit in a variable. The variable is changed and the value is also returned. Parameter y defines the bit to toggle and starts at the LSB with 0.

Parameters
xThe variable to toggle the bit
yThe bit position to toggle
Precondition
y < sizeof(T) * 8
Returns
The new value of the old value with the bit toggled

Definition at line 183 of file bitmath_func.hpp.

Referenced by CmdBuildObject(), CmdRailTrackHelper(), CmdReverseTrainDirection(), CmdSignalTrackHelper(), BaseConsist::CopyConsistPropertiesFrom(), MenuClickSettings(), GraphLegendWindow::OnClick(), OskWindow::OnClick(), CompanyStationsWindow::OnClick(), GenerateLandscapeWindow::OnClick(), SelectCompanyLiveryWindow::OnClick(), PaymentRatesGraphWindow::OnClick(), PerformStationTileSlopeCheck(), ReverseTrainDirection(), ToggleInvisibility(), ToggleSnow(), ToggleTransparency(), ToggleTransparencyLock(), and Vehicle::UpdateVisualEffect().