1 
2 #include "adddirparserthread.h"
3 
4 #ifndef CB_PRECOMP
5     #include <logmanager.h>
6 #endif
7 
8 #include "parserthreadf.h"
9 #include "nativeparserf.h"
10 
11 wxMutex s_AdditionalDirParserMutex;
12 wxMutex s_AdditionalDirNewTokensMutex;
13 
ADirParserThread(NativeParserF * parent,int idADPThreadEvent)14 ADirParserThread::ADirParserThread(NativeParserF* parent, int idADPThreadEvent) :
15     m_pNativeParser(parent),
16     m_idADPThreadEvent(idADPThreadEvent)
17 {
18 }
19 
~ADirParserThread()20 ADirParserThread::~ADirParserThread()
21 {
22 }
23 
Execute()24 int ADirParserThread::Execute()
25 {
26     s_AdditionalDirParserMutex.Lock();
27     ParseFiles();
28     s_AdditionalDirParserMutex.Unlock();
29 
30     return 0;
31 }
32 
ParseFiles()33 void ADirParserThread::ParseFiles()
34 {
35     TokensArrayF* pTokens = new TokensArrayF();
36     IncludeDB* pIncludeDB = new IncludeDB();
37     wxArrayString* pADirFiles = m_pNativeParser->GetADirFiles();
38     ArrayOfFortranSourceForm* pADirFileForms = m_pNativeParser->GetADirFileForms();
39 
40     for (size_t i=0; i<pADirFiles->size(); i++)
41     {
42         ParserThreadF* thread = new ParserThreadF(_T("#%&ThisIsAdditionalFileSearchDirectory&%#"), UnixFilename(pADirFiles->Item(i)), pTokens,
43                                                   pADirFileForms->at(i), false, pIncludeDB);
44         thread->Parse();
45         delete thread;
46     }
47     s_AdditionalDirNewTokensMutex.Lock();
48     m_pNativeParser->GetParser()->SetNewADirTokens(pTokens);
49     m_pNativeParser->GetParser()->SetNewADirIncludeDB(pIncludeDB);
50     s_AdditionalDirNewTokensMutex.Unlock();
51 
52     wxCommandEvent event( wxEVT_COMMAND_ENTER, m_idADPThreadEvent );
53     m_pNativeParser->AddPendingEvent(event);
54 }
55