OpenTTD Source 20250312-master-gcdcc6b491d
LinkGraphJob Class Reference

Class for calculation jobs to be run on link graphs. More...

#include <linkgraphjob.h>

Inheritance diagram for LinkGraphJob:
Pool< Titem, Tindex, Tgrowth_step, Tpool_type, Tcache >::PoolItem<&_link_graph_job_pool >

Data Structures

struct  DemandAnnotation
 Demand between two nodes. More...
 
struct  EdgeAnnotation
 Annotation for a link graph edge. More...
 
struct  NodeAnnotation
 Annotation for a link graph node. More...
 

Public Member Functions

 LinkGraphJob ()
 Bare constructor, only for save/load.
 
 LinkGraphJob (const LinkGraph &orig)
 Create a link graph job from a link graph.
 
 ~LinkGraphJob ()
 Join the link graph job and destroy it.
 
void Init ()
 Initialize the link graph job: Resize nodes and edges and populate them.
 
bool IsJobCompleted () const
 Check if job has actually finished.
 
bool IsJobAborted () const
 Check if job has been aborted.
 
void AbortJob ()
 Abort job.
 
bool IsScheduledToBeJoined () const
 Check if job is supposed to be finished.
 
TimerGameEconomy::Date JoinDate () const
 Get the date when the job should be finished.
 
void ShiftJoinDate (TimerGameEconomy::Date interval)
 Change the join date on date cheating.
 
const LinkGraphSettingsSettings () const
 Get the link graph settings for this component.
 
NodeAnnotationoperator[] (NodeID num)
 Get a node abstraction with the specified id.
 
NodeID Size () const
 Get the size of the underlying link graph.
 
CargoType Cargo () const
 Get the cargo of the underlying link graph.
 
TimerGameEconomy::Date LastCompression () const
 Get the date when the underlying link graph was last compressed.
 
LinkGraphID LinkGraphIndex () const
 Get the ID of the underlying link graph.
 
const LinkGraphGraph () const
 Get a reference to the underlying link graph.
 
- Public Member Functions inherited from Pool< Titem, Tindex, Tgrowth_step, Tpool_type, Tcache >::PoolItem<&_link_graph_job_pool >
void * operator new (size_t size)
 Allocates space for new Titem.
 
void * operator new (size_t size, Tindex index)
 Allocates space for new Titem with given index.
 
void * operator new (size_t, void *ptr)
 Allocates space for new Titem at given memory address.
 
void operator delete (void *p, size_t size)
 Marks Titem as free.
 

Protected Member Functions

void EraseFlows (NodeID from)
 Erase all flows originating at a specific node.
 
void JoinThread ()
 Join the calling thread with this job's thread if threading is enabled.
 
void SpawnThread ()
 Spawn a thread if possible and run the link graph job in the thread.
 

Protected Attributes

const LinkGraph link_graph
 Link graph to by analyzed. Is copied when job is started and mustn't be modified later.
 
const LinkGraphSettings settings
 Copy of _settings_game.linkgraph at spawn time.
 
std::thread thread {}
 Thread the job is running in or a default-constructed thread if it's running in the main thread.
 
TimerGameEconomy::Date join_date = EconomyTime::INVALID_DATE
 Date when the job is to be joined.
 
NodeAnnotationVector nodes {}
 Extra node data necessary for link graph calculation.
 
std::atomic< bool > job_completed = false
 Is the job still running. This is accessed by multiple threads and reads may be stale.
 
std::atomic< bool > job_aborted = false
 Has the job been aborted. This is accessed by multiple threads and reads may be stale.
 

Private Types

typedef std::vector< NodeAnnotationNodeAnnotationVector
 

Friends

class LinkGraphSchedule
 
SaveLoadTable GetLinkGraphJobDesc ()
 Get a SaveLoad array for a link graph job.
 

Additional Inherited Members

- Public Types inherited from Pool< Titem, Tindex, Tgrowth_step, Tpool_type, Tcache >::PoolItem<&_link_graph_job_pool >
typedef struct Pool< Titem, Tindex, Tgrowth_step, Tpool_type, Tcache > Pool
 Type of the pool this item is going to be part of.
 
- Static Public Member Functions inherited from Pool< Titem, Tindex, Tgrowth_step, Tpool_type, Tcache >::PoolItem<&_link_graph_job_pool >
static bool CanAllocateItem (size_t n=1)
 Helper functions so we can use PoolItem::Function() instead of _poolitem_pool.Function()
 
static bool CleaningPool ()
 Returns current state of pool cleaning - yes or no.
 
static bool IsValidID (auto index)
 Tests whether given index can be used to get valid (non-nullptr) Titem.
 
static Titem * Get (auto index)
 Returns Titem with given index.
 
static Titem * GetIfValid (auto index)
 Returns Titem with given index.
 
static size_t GetPoolSize ()
 Returns first unused index.
 
static size_t GetNumItems ()
 Returns number of valid items in the pool.
 
static void PostDestructor (size_t index)
 Dummy function called after destructor of each member.
 
static Pool::IterateWrapper< Titem > Iterate (size_t from=0)
 Returns an iterable ensemble of all valid Titem.
 
- Data Fields inherited from Pool< Titem, Tindex, Tgrowth_step, Tpool_type, Tcache >::PoolItem<&_link_graph_job_pool >
Tindex index
 Index of this pool item.
 

Detailed Description

Class for calculation jobs to be run on link graphs.

Definition at line 29 of file linkgraphjob.h.

Member Typedef Documentation

◆ NodeAnnotationVector

typedef std::vector<NodeAnnotation> LinkGraphJob::NodeAnnotationVector
private

Definition at line 156 of file linkgraphjob.h.

Constructor & Destructor Documentation

◆ LinkGraphJob() [1/2]

LinkGraphJob::LinkGraphJob ( )
inline

Bare constructor, only for save/load.

link_graph, join_date and actually settings have to be brutally const-casted in order to populate them.

Definition at line 179 of file linkgraphjob.h.

◆ LinkGraphJob() [2/2]

LinkGraphJob::LinkGraphJob ( const LinkGraph orig)

Create a link graph job from a link graph.

The link graph will be copied so that the calculations don't interfer with the normal operations on the original. The job is immediately started.

Parameters
origOriginal LinkGraph to be copied.

Definition at line 35 of file linkgraphjob.cpp.

◆ ~LinkGraphJob()

Member Function Documentation

◆ AbortJob()

void LinkGraphJob::AbortJob ( )
inline

Abort job.

The job may exit early at the next available opportunity. After this method has been called the state of the job is undefined, and the only valid operation is to join the thread and discard the job data.

Definition at line 206 of file linkgraphjob.h.

◆ Cargo()

CargoType LinkGraphJob::Cargo ( ) const
inline

Get the cargo of the underlying link graph.

Returns
Cargo.

Definition at line 249 of file linkgraphjob.h.

References LinkGraph::Cargo().

Referenced by DemandCalculator::DemandCalculator(), MultiCommodityFlow::Dijkstra(), and ~LinkGraphJob().

◆ EraseFlows()

void LinkGraphJob::EraseFlows ( NodeID  from)
protected

Erase all flows originating at a specific node.

Parameters
fromNode to erase flows for.

Definition at line 48 of file linkgraphjob.cpp.

References Size().

Referenced by ~LinkGraphJob().

◆ Graph()

const LinkGraph & LinkGraphJob::Graph ( ) const
inline

Get a reference to the underlying link graph.

Only use this for save/load.

Returns
Link graph.

Definition at line 267 of file linkgraphjob.h.

References link_graph.

Referenced by AfterLoadLinkGraphs().

◆ Init()

void LinkGraphJob::Init ( )

Initialize the link graph job: Resize nodes and edges and populate them.

This is done after the constructor so that we can do it in the calculation thread without delaying the main game.

Definition at line 182 of file linkgraphjob.cpp.

References link_graph, LinkGraph::nodes, nodes, and Size().

Referenced by InitHandler::Run().

◆ IsJobAborted()

bool LinkGraphJob::IsJobAborted ( ) const
inline

Check if job has been aborted.

This is allowed to spuriously return false incorrectly, but is not allowed to incorrectly return true.

Returns
True if job has been aborted.

Definition at line 198 of file linkgraphjob.h.

Referenced by MCF1stPass::MCF1stPass(), MCF2ndPass::MCF2ndPass(), LinkGraphSchedule::Run(), and ~LinkGraphJob().

◆ IsJobCompleted()

bool LinkGraphJob::IsJobCompleted ( ) const
inline

Check if job has actually finished.

This is allowed to spuriously return an incorrect value.

Returns
True if job has actually finished.

Definition at line 191 of file linkgraphjob.h.

Referenced by LinkGraphSchedule::IsJoinWithUnfinishedJobDue().

◆ IsScheduledToBeJoined()

bool LinkGraphJob::IsScheduledToBeJoined ( ) const
inline

Check if job is supposed to be finished.

Returns
True if job should be finished by now, false if not.

Definition at line 212 of file linkgraphjob.h.

References TimerGameEconomy::date.

Referenced by LinkGraphSchedule::IsJoinWithUnfinishedJobDue(), and LinkGraphSchedule::JoinNext().

◆ JoinDate()

TimerGameEconomy::Date LinkGraphJob::JoinDate ( ) const
inline

Get the date when the job should be finished.

Returns
Join date.

Definition at line 218 of file linkgraphjob.h.

References join_date.

Referenced by FlowMapper::Run().

◆ JoinThread()

void LinkGraphJob::JoinThread ( )
protected

Join the calling thread with this job's thread if threading is enabled.

Definition at line 76 of file linkgraphjob.cpp.

References thread.

Referenced by ~LinkGraphJob().

◆ LastCompression()

TimerGameEconomy::Date LinkGraphJob::LastCompression ( ) const
inline

Get the date when the underlying link graph was last compressed.

Returns
Compression date.

Definition at line 255 of file linkgraphjob.h.

References LinkGraph::LastCompression().

Referenced by FlowMapper::Run().

◆ LinkGraphIndex()

LinkGraphID LinkGraphJob::LinkGraphIndex ( ) const
inline

Get the ID of the underlying link graph.

Returns
Link graph ID.

Definition at line 261 of file linkgraphjob.h.

References Pool< Titem, Tindex, Tgrowth_step, Tpool_type, Tcache >::PoolItem< Tpool >::index.

Referenced by LinkGraphSchedule::JoinNext().

◆ operator[]()

NodeAnnotation & LinkGraphJob::operator[] ( NodeID  num)
inline

Get a node abstraction with the specified id.

Parameters
numID of the node.
Returns
the Requested node.

Definition at line 237 of file linkgraphjob.h.

References nodes.

◆ Settings()

const LinkGraphSettings & LinkGraphJob::Settings ( ) const
inline

Get the link graph settings for this component.

Returns
Settings.

Definition at line 230 of file linkgraphjob.h.

References settings.

Referenced by DemandCalculator::DemandCalculator(), MCF1stPass::MCF1stPass(), MCF2ndPass::MCF2ndPass(), and FlowMapper::Run().

◆ ShiftJoinDate()

void LinkGraphJob::ShiftJoinDate ( TimerGameEconomy::Date  interval)
inline

Change the join date on date cheating.

Parameters
intervalNumber of days to add.

Definition at line 224 of file linkgraphjob.h.

◆ Size()

NodeID LinkGraphJob::Size ( ) const
inline

◆ SpawnThread()

void LinkGraphJob::SpawnThread ( )
protected

Spawn a thread if possible and run the link graph job in the thread.

If that's not possible run the job right now in the current thread.

Definition at line 59 of file linkgraphjob.cpp.

References LinkGraphSchedule::Run(), StartNewThread(), and thread.

Referenced by LinkGraphSchedule::SpawnNext().

Friends And Related Symbol Documentation

◆ GetLinkGraphJobDesc

SaveLoadTable GetLinkGraphJobDesc ( )
friend

Get a SaveLoad array for a link graph job.

The settings struct is derived from the global settings saveload array. The exact entries are calculated when the function is called the first time. It's necessary to keep a copy of the settings for each link graph job so that you can change the settings while in-game and still not mess with current link graph runs. Of course the settings have to be saved and loaded, too, to avoid desyncs.

Returns
Array of SaveLoad structs.

Definition at line 180 of file linkgraph_sl.cpp.

◆ LinkGraphSchedule

friend class LinkGraphSchedule
friend

Definition at line 159 of file linkgraphjob.h.

Field Documentation

◆ job_aborted

std::atomic<bool> LinkGraphJob::job_aborted = false
protected

Has the job been aborted. This is accessed by multiple threads and reads may be stale.

Definition at line 168 of file linkgraphjob.h.

◆ job_completed

std::atomic<bool> LinkGraphJob::job_completed = false
protected

Is the job still running. This is accessed by multiple threads and reads may be stale.

Definition at line 167 of file linkgraphjob.h.

Referenced by LinkGraphSchedule::Run().

◆ join_date

TimerGameEconomy::Date LinkGraphJob::join_date = EconomyTime::INVALID_DATE
protected

Date when the job is to be joined.

Definition at line 165 of file linkgraphjob.h.

Referenced by JoinDate().

◆ link_graph

const LinkGraph LinkGraphJob::link_graph
protected

Link graph to by analyzed. Is copied when job is started and mustn't be modified later.

Definition at line 162 of file linkgraphjob.h.

Referenced by Graph(), Init(), and ~LinkGraphJob().

◆ nodes

NodeAnnotationVector LinkGraphJob::nodes {}
protected

Extra node data necessary for link graph calculation.

Definition at line 166 of file linkgraphjob.h.

Referenced by Init(), operator[](), and ~LinkGraphJob().

◆ settings

const LinkGraphSettings LinkGraphJob::settings
protected

Copy of _settings_game.linkgraph at spawn time.

Definition at line 163 of file linkgraphjob.h.

Referenced by Settings().

◆ thread

std::thread LinkGraphJob::thread {}
protected

Thread the job is running in or a default-constructed thread if it's running in the main thread.

Definition at line 164 of file linkgraphjob.h.

Referenced by JoinThread(), and SpawnThread().


The documentation for this class was generated from the following files: