tradutorPortGlosa.cpp
2.66 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
/**
* 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;
}
}