/* * $Id: Signal_connect.cpp 82 2008-05-01 16:48:45Z rosiere $ * * [ Description ] * */ #include "Behavioural/include/Signal.h" namespace morpheo { namespace behavioural { #undef FUNCTION #define FUNCTION "Signal::connect" void Signal::connect (Signal * signal_dest) { log_printf(FUNC,Behavioural,FUNCTION,"Begin"); // log_printf(TRACE,Behavioural,FUNCTION,"Connection between : %s with %s",get_name().c_str(),signal_dest->get_name().c_str()); // log_printf(ALL,Behavioural,FUNCTION," * source"); // log_printf(ALL,Behavioural,FUNCTION," * direction : %s",toString(_direction).c_str()); // log_printf(ALL,Behavioural,FUNCTION," * sc_signal : %.8x",_sc_signal); // log_printf(ALL,Behavioural,FUNCTION," * type_info : %s",toString(_type_info).c_str()); // log_printf(ALL,Behavioural,FUNCTION," * destination"); // log_printf(ALL,Behavioural,FUNCTION," * direction : %s",toString(signal_dest->_direction).c_str()); // log_printf(ALL,Behavioural,FUNCTION," * sc_signal : %.8x",signal_dest->_sc_signal); // log_printf(ALL,Behavioural,FUNCTION," * type_info : %s",toString(signal_dest->_type_info).c_str()); TEST_PTR(_sc_signal); TEST_PTR(signal_dest->_sc_signal); if ((_direction == IN ) and (signal_dest->_direction == IN )) switch (_type_info) { case BOOL : {(*(static_cast *>(_sc_signal))) (*(static_cast *>(signal_dest->_sc_signal))); break;} case UINT8_T : {(*(static_cast *>(_sc_signal))) (*(static_cast *>(signal_dest->_sc_signal))); break;} case UINT16_T : {(*(static_cast *>(_sc_signal))) (*(static_cast *>(signal_dest->_sc_signal))); break;} case UINT32_T : {(*(static_cast *>(_sc_signal))) (*(static_cast *>(signal_dest->_sc_signal))); break;} case UINT64_T : {(*(static_cast *>(_sc_signal))) (*(static_cast *>(signal_dest->_sc_signal))); break;} default : {throw (ErrorMorpheo (" Signal \""+_name+"\" : type unknow.")); break;} } else if ((_direction == IN ) and (signal_dest->_direction == OUT)) switch (_type_info) { case BOOL : {(*(static_cast *>(_sc_signal))) (*(static_cast *>(signal_dest->_sc_signal))); break;} case UINT8_T : {(*(static_cast *>(_sc_signal))) (*(static_cast *>(signal_dest->_sc_signal))); break;} case UINT16_T : {(*(static_cast *>(_sc_signal))) (*(static_cast *>(signal_dest->_sc_signal))); break;} case UINT32_T : {(*(static_cast *>(_sc_signal))) (*(static_cast *>(signal_dest->_sc_signal))); break;} case UINT64_T : {(*(static_cast *>(_sc_signal))) (*(static_cast *>(signal_dest->_sc_signal))); break;} default : {throw (ErrorMorpheo (" Signal \""+_name+"\" : type unknow.")); break;} } else if ((_direction == IN ) and (signal_dest->_direction == INTERNAL)) switch (_type_info) { case BOOL : {(*(static_cast *>(_sc_signal))) (*(static_cast *>(signal_dest->_sc_signal))); break;} case UINT8_T : {(*(static_cast *>(_sc_signal))) (*(static_cast *>(signal_dest->_sc_signal))); break;} case UINT16_T : {(*(static_cast *>(_sc_signal))) (*(static_cast *>(signal_dest->_sc_signal))); break;} case UINT32_T : {(*(static_cast *>(_sc_signal))) (*(static_cast *>(signal_dest->_sc_signal))); break;} case UINT64_T : {(*(static_cast *>(_sc_signal))) (*(static_cast *>(signal_dest->_sc_signal))); break;} default : {throw (ErrorMorpheo (" Signal \""+_name+"\" : type unknow.")); break;} } else #ifdef SYSTEMCASS_SPECIFIC if ((_direction == OUT) and (signal_dest->_direction == IN )) switch (_type_info) { case BOOL : {(*(static_cast *>(_sc_signal))) (*(static_cast *>(signal_dest->_sc_signal))); break;} case UINT8_T : {(*(static_cast *>(_sc_signal))) (*(static_cast *>(signal_dest->_sc_signal))); break;} case UINT16_T : {(*(static_cast *>(_sc_signal))) (*(static_cast *>(signal_dest->_sc_signal))); break;} case UINT32_T : {(*(static_cast *>(_sc_signal))) (*(static_cast *>(signal_dest->_sc_signal))); break;} case UINT64_T : {(*(static_cast *>(_sc_signal))) (*(static_cast *>(signal_dest->_sc_signal))); break;} default : {throw (ErrorMorpheo (" Signal \""+_name+"\" : type unknow.")); break;} } else #endif if ((_direction == OUT) and (signal_dest->_direction == OUT)) switch (_type_info) { case BOOL : {(*(static_cast *>(_sc_signal))) (*(static_cast *>(signal_dest->_sc_signal))); break;} case UINT8_T : {(*(static_cast *>(_sc_signal))) (*(static_cast *>(signal_dest->_sc_signal))); break;} case UINT16_T : {(*(static_cast *>(_sc_signal))) (*(static_cast *>(signal_dest->_sc_signal))); break;} case UINT32_T : {(*(static_cast *>(_sc_signal))) (*(static_cast *>(signal_dest->_sc_signal))); break;} case UINT64_T : {(*(static_cast *>(_sc_signal))) (*(static_cast *>(signal_dest->_sc_signal))); break;} default : {throw (ErrorMorpheo (" Signal \""+_name+"\" : type unknow.")); break;} } else if ((_direction == OUT) and (signal_dest->_direction == INTERNAL)) switch (_type_info) { case BOOL : {(*(static_cast *>(_sc_signal))) (*(static_cast *>(signal_dest->_sc_signal))); break;} case UINT8_T : {(*(static_cast *>(_sc_signal))) (*(static_cast *>(signal_dest->_sc_signal))); break;} case UINT16_T : {(*(static_cast *>(_sc_signal))) (*(static_cast *>(signal_dest->_sc_signal))); break;} case UINT32_T : {(*(static_cast *>(_sc_signal))) (*(static_cast *>(signal_dest->_sc_signal))); break;} case UINT64_T : {(*(static_cast *>(_sc_signal))) (*(static_cast *>(signal_dest->_sc_signal))); break;} default : {throw (ErrorMorpheo (" Signal \""+_name+"\" : type unknow.")); break;} } // else // if ((_direction == INTERNAL) and (signal_dest->_direction == IN )) // switch (_type_info) // { // case BOOL : {(*(static_cast *>(_sc_signal))) (*(static_cast *>(signal_dest->_sc_signal))); break;} // case UINT8_T : {(*(static_cast *>(_sc_signal))) (*(static_cast *>(signal_dest->_sc_signal))); break;} // case UINT16_T : {(*(static_cast *>(_sc_signal))) (*(static_cast *>(signal_dest->_sc_signal))); break;} // case UINT32_T : {(*(static_cast *>(_sc_signal))) (*(static_cast *>(signal_dest->_sc_signal))); break;} // case UINT64_T : {(*(static_cast *>(_sc_signal))) (*(static_cast *>(signal_dest->_sc_signal))); break;} // default : {throw (ErrorMorpheo (" Signal \""+_name+"\" : type unknow.")); break;} // } // else // if ((_direction == INTERNAL ) and (signal_dest->_direction == OUT)) // switch (_type_info) // { // case BOOL : {(*(static_cast *>(_sc_signal))) (*(static_cast *>(signal_dest->_sc_signal))); break;} // case UINT8_T : {(*(static_cast *>(_sc_signal))) (*(static_cast *>(signal_dest->_sc_signal))); break;} // case UINT16_T : {(*(static_cast *>(_sc_signal))) (*(static_cast *>(signal_dest->_sc_signal))); break;} // case UINT32_T : {(*(static_cast *>(_sc_signal))) (*(static_cast *>(signal_dest->_sc_signal))); break;} // case UINT64_T : {(*(static_cast *>(_sc_signal))) (*(static_cast *>(signal_dest->_sc_signal))); break;} // default : {throw (ErrorMorpheo (" Signal \""+_name+"\" : type unknow.")); break;} // } // else // if ((_direction == INTERNAL ) and (signal_dest->_direction == INTERNAL)) // switch (_type_info) // { // case BOOL : {(*(static_cast *>(_sc_signal))) (*(static_cast *>(signal_dest->_sc_signal))); break;} // case UINT8_T : {(*(static_cast *>(_sc_signal))) (*(static_cast *>(signal_dest->_sc_signal))); break;} // case UINT16_T : {(*(static_cast *>(_sc_signal))) (*(static_cast *>(signal_dest->_sc_signal))); break;} // case UINT32_T : {(*(static_cast *>(_sc_signal))) (*(static_cast *>(signal_dest->_sc_signal))); break;} // case UINT64_T : {(*(static_cast *>(_sc_signal))) (*(static_cast *>(signal_dest->_sc_signal))); break;} // default : {throw (ErrorMorpheo (" Signal \""+_name+"\" : type unknow.")); break;} // } else throw (ErrorMorpheo (" Signal \""+_name+"\" can't been connected with signal \""+signal_dest->get_name()+"\" : illegal direction ("+toString(_direction)+" with "+toString(signal_dest->_direction)+").")); log_printf(FUNC,Behavioural,FUNCTION,"End"); }; }; // end namespace behavioural }; // end namespace morpheo