#ifdef SYSTEMC
/*
 * $Id$
 *
 * [ Description ]
 * 
 */

#include "Behavioural/Generic/Sort/include/Sort.h"

namespace morpheo                    {
namespace behavioural {
namespace generic {
namespace sort {


#undef  FUNCTION
#define FUNCTION "Sort::genMealy"
  void Sort::genMealy (void)
  {
    log_printf(FUNC,Sort,FUNCTION,"Begin");

    sort_t array [_param->_nb_input];

    // Push input in a array
    for (uint32_t i=0; i<_param->_nb_input; i++)
      {
	array[i].index = i;
	array[i].val   = PORT_READ ( in_INPUT_VAL  [i]);
	array[i].data  = PORT_READ ( in_INPUT_DATA [i]);
      }

    // Sort array
    //if (_param->_ascending == true)
    std::stable_sort(array, array+_param->_nb_input);

    // Write output
    for (uint32_t i=0; i<_param->_nb_output; i++)
      {
	PORT_WRITE (out_OUTPUT_VAL   [i],array[i].val  );
	if (_param->_have_port_index_out)
        PORT_WRITE (out_OUTPUT_INDEX [i],array[i].index);
	if (_param->_have_port_data_out)
      	PORT_WRITE (out_OUTPUT_DATA  [i],array[i].data );
      }

    log_printf(FUNC,Sort,FUNCTION,"End");
  };

}; // end namespace sort
}; // end namespace generic

}; // end namespace behavioural
}; // end namespace morpheo              
#endif
