OpenTTD Source  20241120-master-g6d3adc6169
LinkGraphSchedule Class Reference

Public Member Functions

void SpawnNext ()
 Start the next job in the schedule.
 
bool IsJoinWithUnfinishedJobDue () const
 Check if the next job is supposed to be finished, but has not yet completed. More...
 
void JoinNext ()
 Join the next finished job, if available.
 
void SpawnAll ()
 Start all threads in the running list. More...
 
void ShiftDates (TimerGameEconomy::Date interval)
 Shift all dates (join dates and edge annotations) of link graphs and link graph jobs by the number of days given. More...
 
void Queue (LinkGraph *lg)
 Queue a link graph for execution. More...
 
void Unqueue (LinkGraph *lg)
 Remove a link graph from the execution queue. More...
 

Static Public Member Functions

static void Run (LinkGraphJob *job)
 Run all handlers for the given Job. More...
 
static void Clear ()
 Clear all link graphs and jobs from the schedule.
 

Static Public Attributes

static const uint SPAWN_JOIN_TICK = 21
 Tick when jobs are spawned or joined every day.
 
static LinkGraphSchedule instance
 Static instance of LinkGraphSchedule. More...
 

Protected Attributes

std::array< std::unique_ptr< ComponentHandler >, 6 > handlers {}
 Handlers to be run for each job.
 
GraphList schedule
 Queue for new jobs.
 
JobList running
 Currently running jobs.
 

Private Types

typedef std::list< LinkGraph * > GraphList
 
typedef std::list< LinkGraphJob * > JobList
 

Private Member Functions

 LinkGraphSchedule ()
 Create a link graph schedule and initialize its handlers.
 
 ~LinkGraphSchedule ()
 Delete a link graph schedule and its handlers.
 

Friends

SaveLoadTable GetLinkGraphScheduleDesc ()
 Get a SaveLoad array for the link graph schedule. More...
 

Detailed Description

Definition at line 36 of file linkgraphschedule.h.

Member Function Documentation

◆ IsJoinWithUnfinishedJobDue()

bool LinkGraphSchedule::IsJoinWithUnfinishedJobDue ( ) const

Check if the next job is supposed to be finished, but has not yet completed.

Returns
True if job should be finished by now but is still running, false if not.

Definition at line 58 of file linkgraphschedule.cpp.

References LinkGraphJob::IsJobCompleted(), LinkGraphJob::IsScheduledToBeJoined(), and running.

Referenced by StateGameLoop_LinkGraphPauseControl().

◆ Queue()

void LinkGraphSchedule::Queue ( LinkGraph lg)
inline

◆ Run()

void LinkGraphSchedule::Run ( LinkGraphJob job)
static

Run all handlers for the given Job.

Parameters
jobPointer to a link graph job.

Definition at line 87 of file linkgraphschedule.cpp.

References handlers, instance, LinkGraphJob::IsJobAborted(), and LinkGraphJob::job_completed.

Referenced by LinkGraphJob::SpawnThread().

◆ ShiftDates()

void LinkGraphSchedule::ShiftDates ( TimerGameEconomy::Date  interval)

Shift all dates (join dates and edge annotations) of link graphs and link graph jobs by the number of days given.

Parameters
intervalNumber of days to be added or subtracted.

Definition at line 135 of file linkgraphschedule.cpp.

References Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_link_graph_job_pool >::Iterate(), and Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_link_graph_pool >::Iterate().

Referenced by ClickChangeDateCheat(), and SetStartingYear().

◆ SpawnAll()

void LinkGraphSchedule::SpawnAll ( )

Start all threads in the running list.

This is only useful for save/load. Usually threads are started when the job is created.

Definition at line 111 of file linkgraphschedule.cpp.

References running.

Referenced by AfterLoadLinkGraphs().

◆ Unqueue()

void LinkGraphSchedule::Unqueue ( LinkGraph lg)
inline

Remove a link graph from the execution queue.

Parameters
lgLink graph to be removed.

Definition at line 77 of file linkgraphschedule.h.

Referenced by JoinNext().

Friends And Related Function Documentation

◆ GetLinkGraphScheduleDesc

SaveLoadTable GetLinkGraphScheduleDesc ( )
friend

Get a SaveLoad array for the link graph schedule.

Returns
SaveLoad array for the link graph schedule.

Definition at line 219 of file linkgraph_sl.cpp.

Field Documentation

◆ instance

LinkGraphSchedule LinkGraphSchedule::instance
static

Static instance of LinkGraphSchedule.

Note: This instance is created on task start. Lazy creation on first usage results in a data race between the CDist threads.

Definition at line 52 of file linkgraphschedule.h.

Referenced by AfterLoad_LinkGraphPauseControl(), AfterLoadLinkGraphs(), Clear(), ClickChangeDateCheat(), LGRSChunkHandler::FixPointers(), LGRSChunkHandler::Load(), OnTick_LinkGraph(), Run(), SetStartingYear(), and StateGameLoop_LinkGraphPauseControl().


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