mirror of
https://github.com/nasa/trick.git
synced 2024-12-19 13:17:55 +00:00
19025d77ad
Reorganized. Created a new top level include directory that will hold all of Trick's header files. Moved all of the Trick headers to this directory. Created a libexec directory that holds all of the executables that users don't need to execute directly. Changed all of the executables remaining in bin to start with "trick-". In the sim_services directories changed all source files to find the Trick headers in their new location. Since all of the include files are gone in sim_services, removed the src directories as well, moving all of the source files up a level. Moved the makefiles, docs, man, and other architecture independent files into a top level share directory. Renamed lib_${TRICK_HOST_CPU} to lib64 or lib depending on the platform we're currently on. refs #63
217 lines
7.9 KiB
C++
217 lines
7.9 KiB
C++
/*
|
|
PURPOSE:
|
|
(Class to hold queue of scheduled jobs)
|
|
*/
|
|
|
|
#ifndef SCHEDULEDJOBQUEUE_HH
|
|
#define SCHEDULEDJOBQUEUE_HH
|
|
|
|
#include <string>
|
|
|
|
#include "trick/JobData.hh"
|
|
|
|
namespace Trick {
|
|
|
|
/**
|
|
* The ScheduledJobQueue is specifically for the scheduled jobs. It does not
|
|
* allocate memory during normal cycling through jobs and is considerably
|
|
* faster than the generalized priority_queue.
|
|
*
|
|
* @author Robert W. Bailey
|
|
* @author many other Trick developers of the past who did not add their names.
|
|
* @author Alexander S. Lin
|
|
*/
|
|
|
|
class ScheduledJobQueue {
|
|
|
|
friend class ScheduledJobQueueTest ;
|
|
|
|
public:
|
|
|
|
/**
|
|
* @brief This is the constructor of the class. It initializes
|
|
* the most member data to 0, or TRICK_MAX_LONG_LONG for next_job_time
|
|
*/
|
|
ScheduledJobQueue() ;
|
|
|
|
/**
|
|
* @brief This is the destructor of the class. It frees list.
|
|
*/
|
|
~ScheduledJobQueue() ;
|
|
|
|
/**
|
|
* @brief Adds a new job into list. The exact placement of job is dependent on
|
|
* job_class, phase , sim_object order , and finally job order in sim object.
|
|
* @param in_job - Job to add to the list
|
|
* @return always 0.
|
|
*/
|
|
int push(JobData * in_job ) ;
|
|
|
|
/**
|
|
* @brief Adds a new job into list ignoring the sim_object id. This is useful for
|
|
* schedulers that redefine the order sim_objects are processed and are only
|
|
* concerned with phase ordering.
|
|
* @param in_job - Job to add to the list
|
|
* @return always 0.
|
|
*/
|
|
int push_ignore_sim_object(JobData * in_job ) ;
|
|
|
|
/**
|
|
* @brief Removes a job from the list if present.
|
|
* @param in_job - Job to remove to the list
|
|
* @return always 0.
|
|
*/
|
|
int remove(JobData * in_job ) ;
|
|
|
|
/**
|
|
* @brief Gets the curr_index.
|
|
* @return curr_index.
|
|
*/
|
|
unsigned int get_curr_index() ;
|
|
|
|
/**
|
|
* @brief Sets the curr_index to value.
|
|
* @param value - Value of index.
|
|
* @return always 0.
|
|
*/
|
|
int set_curr_index( unsigned int ii ) ;
|
|
|
|
/**
|
|
* @brief Resets the curr_index data member to 0.
|
|
* @return always 0.
|
|
*/
|
|
int reset_curr_index() ;
|
|
|
|
/**
|
|
* @brief Returns the size of the queue
|
|
* @return the number of elements in the queue.
|
|
*/
|
|
unsigned int size() ;
|
|
|
|
/**
|
|
* @brief Tests if the list is empty or not.
|
|
* @return 0 if the list is empty or 1 if the list has at least one job.
|
|
*/
|
|
bool empty() ;
|
|
|
|
/**
|
|
* @brief Clears the list of jobs.
|
|
* @return 0
|
|
*/
|
|
int clear() ;
|
|
|
|
/**
|
|
* @brief Clears the list of jobs.
|
|
* @return 0
|
|
*/
|
|
int execute_all_jobs() ;
|
|
|
|
/**
|
|
* @brief Write all job information out as scheduled jobs in a format suitable for S_job_execution
|
|
* @return 0
|
|
*/
|
|
int write_sched_queue( FILE * fp ) ;
|
|
|
|
/**
|
|
* @brief Write all job information out as non scheduled jobs in a format suitable for S_job_execution
|
|
* @return 0
|
|
*/
|
|
int write_non_sched_queue( FILE * fp ) ;
|
|
|
|
/**
|
|
* @brief Adds the incoming instrumentation job before target job if specified, or all jobs in list.
|
|
* Will reallocate list to accommodate additional instrumentation jobs.
|
|
* @param instrumentation_job - name of the instrument job
|
|
* @param target_job - name of the target job, empty string means all jobs are to be instrumented
|
|
* @param in_event - instrumentation data to be stored with instrument job
|
|
* @return number of insertions made
|
|
*/
|
|
int instrument_before(JobData * instrumentation_job) ;
|
|
|
|
/**
|
|
* @brief Adds the incoming instrumentation job after target job if specified, or all jobs in the list.
|
|
* Will reallocate list to accommodate additional instrumentation jobs.
|
|
* @param instrumentation_job - name of the instrument job
|
|
* @param target_job - name of the target job, empty string means all jobs are to be instrumented
|
|
* @param in_event - instrumentation data to be stored with instrument job
|
|
* @return number of insertions made
|
|
*/
|
|
int instrument_after(JobData * instrumentation_job) ;
|
|
|
|
/**
|
|
* @brief Removes all jobs in the list that match the name job_name.
|
|
* If in_event is specified, only remove this event's instrument job.
|
|
* @param job_name - name of the instrument job
|
|
* @param in_event - instrumentation data to be stored with instrument job
|
|
* @return always 0
|
|
*/
|
|
int instrument_remove(std::string job_name) ;
|
|
|
|
/**
|
|
* @brief Gets the job pointed to by current_index, the top of the list.
|
|
* @return top job in the list, or NULL if the list is empty.
|
|
*/
|
|
JobData * top() ;
|
|
|
|
/**
|
|
* @brief Gets the job pointed to by current_index, the top of the list.
|
|
* Increments current_index to advance to next job.
|
|
* @return top job in the list, or NULL if the list is empty or the end of list reached.
|
|
*/
|
|
JobData * get_next_job() ;
|
|
|
|
/**
|
|
* @brief Finds the next job where the next job call time equals the incoming time.
|
|
* @param time - the requested time next job call time
|
|
* @return next job in list who's next call time matches incoming time, or NULL if no match found.
|
|
*/
|
|
JobData * find_next_job(long long time ) ;
|
|
|
|
/**
|
|
* @brief Finds the next job where the next job call time equals the incoming time. Does not
|
|
* update any information so find_next_job can still find the job returned by this function.
|
|
* @param time - the requested time next job call time
|
|
* @return next job in list who's next call time matches incoming time, or NULL if no match found.
|
|
*/
|
|
JobData * find_job(long long time ) ;
|
|
|
|
/**
|
|
* @brief Sets the next_job_call_time to the incoming time
|
|
* @param in_time - the requested next job call time
|
|
* @return always 0
|
|
*/
|
|
int set_next_job_call_time(long long in_time ) ;
|
|
|
|
/**
|
|
* @brief Returns the next_job_time tracked while looping through jobs with find_next_job(long long)
|
|
* @return next job call time in tics. Design [@ref d_schedqueue_getnextcalltime_0]
|
|
*/
|
|
long long get_next_job_call_time() ;
|
|
|
|
/**
|
|
* @brief tests the current job next job call time against the current time and the overall next job call
|
|
* time. Sets the overall next job call time to the current job's time if it is lower
|
|
* @return always 0
|
|
*/
|
|
int test_next_job_call_time(Trick::JobData * curr_job, long long time_tics) ;
|
|
|
|
private:
|
|
|
|
/** number of jobs in list */
|
|
unsigned int list_size ;
|
|
|
|
/** Simple reallocable list of JobData pointers. */
|
|
JobData ** list ; /* ** This list is allocated outside of the memory manager. */
|
|
|
|
/** current index to top job in list */
|
|
unsigned int curr_index ;
|
|
|
|
/** next lowest job call time as tracked by calls to find_next_job(long long) */
|
|
long long next_job_time ;
|
|
} ;
|
|
|
|
}
|
|
|
|
#endif
|
|
|