LRDE Tiger Compiler  1.34a $Id: 7fef12e1f5fa43449d667a0eec1d837c40fc1202 $
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
task::TaskRegister Class Reference

Register Tasks. More...

#include <task-register.hh>

Collaboration diagram for task::TaskRegister:

Public Types

typedef std::list< Task const * > tasks_list_type
 Ordered list of tasks.
typedef std::map< int, Task
const * > 
tasks_by_key_type
 Associate an integer key to a task.

Public Member Functions

const tasks_by_key_typetask_keys_get () const
 Access to task_keys_ (read-only)
Tasks registering.
void register_task (const Task &task)
 Register task task.
void enable_task (const std::string &task_name, const char *arg=nullptr)
 Register the task task_name for execution.
int nb_of_task_to_execute_get ()
 Return the number of tasks to execute.
Display TaskRegister content.
std::ostream & print_task_list (std::ostream &ostr)
 Display registered Tasks.
std::ostream & print_task_graph (std::ostream &ostr)
 Display task graph.
std::ostream & print_task_order (std::ostream &ostr)
 Display registered Tasks execution order.
Using registered Tasks.

}

void execute ()
 Execute tasks, checking dependencies.
Time management.
const misc::timertimer_get () const
 Access to the tasks timer.

Private Types

typedef std::map< const
std::string, Task const * > 
tasks_by_name_type
 Associate a task name to a task.

Private Member Functions

 TaskRegister (const TaskRegister &)
TaskRegisteroperator= (const TaskRegister &)

Private Attributes

tasks_by_name_type task_list_
 'string to task' map.
tasks_by_key_type task_keys_
 'key to task' map.
tasks_list_type task_order_
 'ordered for execution' tasks list.
misc::timer timer_
 Tasks timer.

Ctor & dtor.

 TaskRegister ()
 Construct a TaskRegister.
static TaskRegisterinstance ()
 Access to the unique TaskRegister.

Task reordering.

void resolve_dependencies (const Task &task)
 Resolve dependencies between tasks.
char * parse_arg (int argc, char *argv[])
 Parse argv and determine which tasks to execute.

Detailed Description

Register Tasks.

The purpose of the TaskRegister class is to collect tasks and organize their execution using their dependencies (like 'make'). For modeling details, see Design Patterns: singleton.

Member Typedef Documentation

typedef std::map<int, Task const*> task::TaskRegister::tasks_by_key_type

Associate an integer key to a task.

typedef std::map<const std::string, Task const*> task::TaskRegister::tasks_by_name_type
private

Associate a task name to a task.

typedef std::list<Task const*> task::TaskRegister::tasks_list_type

Ordered list of tasks.

Constructor & Destructor Documentation

task::TaskRegister::TaskRegister ( const TaskRegister )
private
task::TaskRegister::TaskRegister ( )
private

Construct a TaskRegister.

Member Function Documentation

void task::TaskRegister::enable_task ( const std::string &  task_name,
const char *  arg = nullptr 
)
void task::TaskRegister::execute ( )

Execute tasks, checking dependencies.

References misc::timer::pop(), misc::timer::push(), task_order_, and timer_.

Referenced by main().

int task::TaskRegister::nb_of_task_to_execute_get ( )

Return the number of tasks to execute.

References task_order_.

TaskRegister& task::TaskRegister::operator= ( const TaskRegister )
private
char * task::TaskRegister::parse_arg ( int  argc,
char *  argv[] 
)

Parse argv and determine which tasks to execute.

Call 'argp ()'.

References task::parse_opt(), program_args_doc, program_bug_address, program_doc, program_version, and task_list_.

Referenced by main().

std::ostream & task::TaskRegister::print_task_graph ( std::ostream &  ostr)
std::ostream & task::TaskRegister::print_task_list ( std::ostream &  ostr)

Display registered Tasks.

References task_list_.

Referenced by task::tasks::tasks_list().

std::ostream & task::TaskRegister::print_task_order ( std::ostream &  ostr)

Display registered Tasks execution order.

References task_order_.

Referenced by task::tasks::tasks_selection().

void task::TaskRegister::register_task ( const Task task)
void task::TaskRegister::resolve_dependencies ( const Task task)
private

Resolve dependencies between tasks.

Resolve dependencies on tasks registered for execution. Make a depth first searh of implicit tasks graph, check cycles and build an ordered list of tasks.

References task::Task::dependencies_get(), enable_task(), misc::error::failure, misc::has(), task::Task::name_get(), program_name, task::Task::resolve_dependencies(), task_error, task_list_, and task_order_.

Referenced by enable_task().

const TaskRegister::tasks_by_key_type & task::TaskRegister::task_keys_get ( ) const

Access to task_keys_ (read-only)

References task_keys_.

Referenced by task::parse_opt().

const misc::timer & task::TaskRegister::timer_get ( ) const
inline

Access to the tasks timer.

References timer_.

Referenced by main().

Member Data Documentation

tasks_by_key_type task::TaskRegister::task_keys_
private

'key to task' map.

Referenced by register_task(), and task_keys_get().

tasks_by_name_type task::TaskRegister::task_list_
private
tasks_list_type task::TaskRegister::task_order_
private

'ordered for execution' tasks list.

Referenced by enable_task(), execute(), nb_of_task_to_execute_get(), print_task_order(), and resolve_dependencies().

misc::timer task::TaskRegister::timer_
private

Tasks timer.

Referenced by execute(), and timer_get().


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