tradutorPortGlosa.cpp 2.66 KB
/**
 * edit:
 * @author Erickson Silva
 * @date 14/10/2013
 *
 */

/**
 * Essa classe converte portugues para Glosa
 *
 * @author Derzu Omaia
 * @date 21/10/2009
 *
 */
#include "tradutorPortGlosa.h"

namespace Tradutor {
	TradutorPortGlosa::TradutorPortGlosa() {
            listeners = new list<ListenerTradutor*>();
            pyTradutor = new PyTradutor();         
            // Inicia o mutex
            mutex = (pthread_mutex_t *) malloc( sizeof(pthread_mutex_t) );
            pthread_mutex_init(mutex, NULL);
            PRINTL(util::_DEBUG, "Translator Done!\n");
    }


	TradutorPortGlosa::~TradutorPortGlosa() {
            delete listeners;
            delete pyTradutor;
            if (mutex) {
                int ret = pthread_mutex_destroy(mutex);
                if (ret)
                    PRINTL(util::_ERROR, "Erro, destruindo mutex.\n");
                free(mutex);	
            }
            PRINTL(util::_DEBUG, "Translator finalized!\n");
	}

    void TradutorPortGlosa::addListener(ListenerTradutor* listener) {
        listeners->push_back(listener);
    }


    void TradutorPortGlosa::removeListener(ListenerTradutor* listener) {
         listeners->remove(listener);
    }


    void TradutorPortGlosa::notifyListeners(char* traducao) {
        for (list<ListenerTradutor*>::iterator i = listeners->begin() ; i != listeners->end() ; i++){
            (*i)->notifyTranslation(traducao);
        }                 
    }

    /*
    // Implemento o metodo da classe que estou ouvindo, classe ExtratorCC
    void TradutorPortGlosa::notificaCC(unsigned char *  cc, int64_t pts) {
    // Mutex para evitar bug multiplas chamadas dos notificadores
        pthread_mutex_lock(mutex);
        traduz(cc);
        pthread_mutex_unlock(mutex);
    }*/

    // Implemento o metodo da classe que estou ouvindo.
    void TradutorPortGlosa::notifyInput(unsigned char *  texto) {
        // Mutex para evitar bug multiplas chamadas dos notificadores
        pthread_mutex_lock(mutex);
        traduz(texto);
        pthread_mutex_unlock(mutex);
    }       

    void TradutorPortGlosa::traduz(unsigned char * texto) {
        
        char* glosa = portuguesToGlosaVector((const char *)texto);
        notifyListeners(glosa);
    }


    /**
    * Traduz um texto (char * input) para um vetor de tokens<string> contendo a
    * traducao para glosa
    *
    * @param input texto de entrada
    * @return vetor de string contendo os tokens em glosa traduzidos.
    **/
    char* TradutorPortGlosa::portuguesToGlosaVector(const char * input) {
        char * glosa;
        // Faz a tradução de portugues para glosa
        glosa = pyTradutor->convertStringToGlosa(input);
        return glosa;
    }
}