| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213 |
- #include "numberprocessor.h"
- #include "numberreg.h"
- NumberProcessor::NumberProcessor(QList<QString> *bufferSegments, QList<QStringList> *bufferNumbers,
- QSemaphore *free, QSemaphore *used, QMutex *mutex,
- NumberProcessType processType)
- {
- this->bufferSegments = bufferSegments;
- this->bufferNumbers = bufferNumbers;
- this->free = free;
- this->used = used;
- this->mutex = mutex;
- this->processType = processType;
- this->stop = false;
- }
- void NumberProcessor::abort()
- {
- this->stop = true;
- }
- NumberProcessor::~NumberProcessor()
- {
- qDebug()<<"NumberProcessor dead";
- }
- void NumberProcessor::setBlackSegments(QStringList blackSegments)
- {
- this->blackSegments = blackSegments;
- }
- void NumberProcessor::setBlackNumbers(QList<QStringList> blackNumbers)
- {
- this->blackNumbers = blackNumbers;
- }
- void NumberProcessor::run()
- {
- switch(processType)
- {
- case NumberSort:
- sort();
- break;
- case NumberRemoveDuplicate:
- removeDuplicate();
- break;
- case NumberRemoveBlackList:
- removeBlackList();
- break;
- case NumberRemoveNotPhone:
- removeNotPhoneNumber();
- break;
- default:
- break;
- }
- }
- void NumberProcessor::sort()
- {
- while(true)
- {
- //used->acquire();
- if(stop)
- {
- break;
- }
- mutex->lock();
- QString segment;
- QStringList numbers;
- if(bufferSegments->size()>0)
- {
- segment = bufferSegments->takeLast();
- numbers = bufferNumbers->takeLast();
- }
- mutex->unlock();
- //free->release();
- if(!segment.isEmpty())
- {
- numbers.sort();
- emit childTaskFinished(segment,numbers);
- }
- }
- emit threadDestroy();
- }
- void NumberProcessor::removeDuplicate()
- {
- while(true)
- {
- //used->acquire();
- if(stop)
- {
- break;
- }
- mutex->lock();
- QString segment;
- QStringList numbers;
- if(bufferSegments->size()>0)
- {
- segment = bufferSegments->takeLast();
- numbers = bufferNumbers->takeLast();
- }
- mutex->unlock();
- //free->release();
- if(!segment.isEmpty())
- {
- numbers.sort();
- QStringList list;
- QString tmp;
- for(int j=0;j<numbers.size();j++)
- {
- if (tmp != numbers[j])
- {
- tmp = numbers[j];
- list.append(tmp);
- }
- }
- numbers = list;
- emit childTaskFinished(segment,numbers);
- }
- }
- emit threadDestroy();
- }
- void NumberProcessor::removeBlackList()
- {
- while(true)
- {
- //used->acquire();
- if(stop)
- {
- break;
- }
- mutex->lock();
- QString segment;
- QStringList numbers;
- if(bufferSegments->size()>0)
- {
- segment = bufferSegments->takeLast();
- numbers = bufferNumbers->takeLast();
- }
- mutex->unlock();
- //free->release();
- if(!segment.isEmpty())
- {
- for(int j=0;j<blackSegments.size();j++)
- {
- if(segment==blackSegments.at(j))
- {
- for(int k=0;k<numbers.size();k++)
- {
- for(int l=0;l<blackNumbers.at(j).size();l++)
- {
- if(numbers.at(k)==blackNumbers.at(j).at(l))
- {
- numbers.removeAt(k);
- k--;
- break;
- }
- }
- }
- break;
- }
- }
- if(numbers.size()==0)
- {
- segment = "";
- }
- emit childTaskFinished(segment,numbers);
- }
- }
- emit threadDestroy();
- }
- void NumberProcessor::removeNotPhoneNumber()
- {
- while(true)
- {
- //used->acquire();
- if(stop)
- {
- break;
- }
- mutex->lock();
- QString segment;
- QStringList numbers;
- if(bufferSegments->size()>0)
- {
- segment = bufferSegments->takeLast();
- numbers = bufferNumbers->takeLast();
- }
- mutex->unlock();
- //free->release();
- if(!segment.isEmpty())
- {
- if(!NumberReg::getSegmentReg().exactMatch(segment))
- {
- segment = "";
- }
- else
- {
- for(int i=0;i<numbers.size();i++)
- {
- if (!NumberReg::getLastFour().exactMatch(numbers[i]))
- {
- numbers.removeAt(i);
- i++;
- }
- }
- if(numbers.size()==0)
- {
- segment = "";
- }
- }
- emit childTaskFinished(segment,numbers);
- }
- }
- emit threadDestroy();
- }
|