
#include "SegmentedExecutive/include/Segment.hh"

Trick::Segment::Segment( std::string in_name ) : segment_name(in_name) {} ;

Trick::Segment::Segment( std::string in_name ,
 std::string enter_job_class_str ,
 std::string exit_job_class_str ) :
  segment_name(in_name) {
    set_enter_job_class_name(enter_job_class_str) ;
    set_exit_job_class_name(exit_job_class_str) ;
} ;

std::string Trick::Segment::get_segment_name() {
    return segment_name ;
}

void Trick::Segment::set_segment_name(std::string in_segment_name) {
    segment_name = in_segment_name ;
}

void Trick::Segment::set_enter_job_class_name(std::string job_class_name) {
    enter_job_class_name = job_class_name ;
    job_queues[enter_job_class_name] = &enter_jobs ;
}

void Trick::Segment::set_exit_job_class_name(std::string job_class_name) {
    exit_job_class_name = job_class_name ;
    job_queues[exit_job_class_name] = &exit_jobs ;
}

// Call the enter_jobs when entering this segment.
int Trick::Segment::enter( std::string prev_segment __attribute__((unused)) ) {
    return enter_jobs.execute_all_jobs() ;
}

// Call the exit_jobs when exiting this segment.
int Trick::Segment::exit( std::string next_segment __attribute__((unused)) ) {
    return exit_jobs.execute_all_jobs() ;
}

std::map < std::string , Trick::ScheduledJobQueue * > & Trick::Segment::get_job_queues() {
    return job_queues ;
}

