
# Conflicts: # .github/workflows/ci-build.yml # .github/workflows/release-linux.yml # .github/workflows/release-macos.yml # .github/workflows/release-source.yml # .github/workflows/release.yml # CMakeLists.txt # COMPILING.md # src/ai/ai_core.cpp # src/ai/ai_gui.cpp # src/bridge_gui.cpp # src/company_gui.cpp # src/console_cmds.cpp # src/core/CMakeLists.txt # src/core/smallmap_type.hpp # src/disaster_vehicle.h # src/effectvehicle_base.h # src/fontcache.cpp # src/game/game_core.cpp # src/game/game_gui.cpp # src/gamelog.cpp # src/gamelog_internal.h # src/group_gui.cpp # src/linkgraph/linkgraph.h # src/misc.cpp # src/network/core/config.h # src/network/core/udp.cpp # src/network/network_chat_gui.cpp # src/network/network_content_gui.cpp # src/network/network_gui.cpp # src/newgrf.cpp # src/newgrf_gui.cpp # src/newgrf_profiling.cpp # src/newgrf_profiling.h # src/object_gui.cpp # src/openttd.cpp # src/openttd.h # src/order_gui.cpp # src/os/windows/font_win32.cpp # src/rail_gui.cpp # src/road.cpp # src/road_gui.cpp # src/saveload/afterload.cpp # src/saveload/saveload.h # src/script/api/script_controller.cpp # src/script/api/script_roadtypelist.cpp # src/script/script_config.cpp # src/script/script_config.hpp # src/script/script_instance.cpp # src/script/script_scanner.cpp # src/script/squirrel.cpp # src/script/squirrel_helper.hpp # src/settings_gui.cpp # src/settings_internal.h # src/settings_type.h # src/table/settings/network_private_settings.ini # src/timetable_gui.cpp # src/vehicle.cpp # src/vehicle_base.h # src/window_gui.h
47 lines
1.3 KiB
C++
47 lines
1.3 KiB
C++
/** @file demands.h Declaration of demand calculating link graph handler. */
|
|
|
|
#ifndef DEMANDS_H
|
|
#define DEMANDS_H
|
|
|
|
#include "linkgraphjob_base.h"
|
|
|
|
/**
|
|
* Calculate the demands. This class has a state, but is recreated for each
|
|
* call to of DemandHandler::Run.
|
|
*/
|
|
class DemandCalculator {
|
|
public:
|
|
DemandCalculator(LinkGraphJob &job);
|
|
|
|
private:
|
|
int32 max_distance; ///< Maximum distance possible on the map.
|
|
int32 mod_dist; ///< Distance modifier, determines how much demands decrease with distance.
|
|
int32 accuracy; ///< Accuracy of the calculation.
|
|
|
|
template<class Tscaler>
|
|
void CalcDemand(LinkGraphJob &job, const std::vector<bool> &reachable_nodes, Tscaler scaler);
|
|
|
|
template<class Tscaler>
|
|
void CalcMinimisedDistanceDemand(LinkGraphJob &job, const std::vector<bool> &reachable_nodes, Tscaler scaler);
|
|
};
|
|
|
|
/**
|
|
* Stateless, thread safe demand handler. Doesn't do anything but call DemandCalculator.
|
|
*/
|
|
class DemandHandler : public ComponentHandler {
|
|
public:
|
|
|
|
/**
|
|
* Call the demand calculator on the given component.
|
|
* @param job Component to calculate the demands for.
|
|
*/
|
|
virtual void Run(LinkGraphJob &job) const { DemandCalculator c(job); }
|
|
|
|
/**
|
|
* Virtual destructor has to be defined because of virtual Run().
|
|
*/
|
|
virtual ~DemandHandler() = default;
|
|
};
|
|
|
|
#endif /* DEMANDS_H */
|