Титульная страница   Пространства имен   Иерархия классов   Алфавитный указатель   Классы   Файлы   Члены пространства имен   Члены классов   Члены файла  

Класс FindTextImpl

Класс-реализация интерфейса FindText. Подробнее...

Граф наследования:FindTextImpl:

FindText FindFileCallback Publisher< FoundMsg > Publisher< InfoMsg > Publisher< ErrorMsg > Полный список членов класса

Открытые члены

 FindTextImpl ()
 Создает объект, устанавливая начальные значения флагов.


Закрытые члены

virtual void search (const std::string &dir, bool recur, const std::string &mask, const std::string &text)
 Выполняет поиск подстроки text в файлах, удовлетворяющих маске mask.

virtual void stopSearch ()
 Данная функция предназначена для остановки работы функции search().

virtual Publisher< FoundMsg > & foundPub ()
 Издатель, публикующий сообщения о найденных строках.

virtual Publisher< InfoMsg > & infoPub ()
 Издатель, публикующий информационные сообщения о ходе работы.

virtual Publisher< ErrorMsg > & errorPub ()
 Издатель, публикующий сообщения о нефатальных ошибках, встреченных по ходу работы.

virtual bool found (const std::string &fileName)
 Данная функция вызывается для каждого найденного файла.

bool readLine (FILE *f, string &str, const std::string &file)
 Читает строку текста из f в str.

bool subscribe (Subscriber< FoundMsg > &sub)
 Подписывает переданного подписчика (если он еще не был подписан) и передает ему сообщение о подписке, т.е.

bool unsubscribe (Subscriber< FoundMsg > &sub)
 Отменяет подписку переданного подписчика (если он был подписан) и передает ему сообщение о прекращении подписки, т.е.

bool isSubscribed (Subscriber< FoundMsg > &sub) const
 Возвращает true, если переданный подписчик в настоящее время подписан.

int subCount () const
 Возвращает количество подписанных подписчиков.

int send (const FoundMsg &msg)
 Отправляет переданное сообщение всем подписанным подписчикам, т.е.

bool subscribe (Subscriber< InfoMsg > &sub)
 Подписывает переданного подписчика (если он еще не был подписан) и передает ему сообщение о подписке, т.е.

bool unsubscribe (Subscriber< InfoMsg > &sub)
 Отменяет подписку переданного подписчика (если он был подписан) и передает ему сообщение о прекращении подписки, т.е.

bool isSubscribed (Subscriber< InfoMsg > &sub) const
 Возвращает true, если переданный подписчик в настоящее время подписан.

int subCount () const
 Возвращает количество подписанных подписчиков.

int send (const InfoMsg &msg)
 Отправляет переданное сообщение всем подписанным подписчикам, т.е.

bool subscribe (Subscriber< ErrorMsg > &sub)
 Подписывает переданного подписчика (если он еще не был подписан) и передает ему сообщение о подписке, т.е.

bool unsubscribe (Subscriber< ErrorMsg > &sub)
 Отменяет подписку переданного подписчика (если он был подписан) и передает ему сообщение о прекращении подписки, т.е.

bool isSubscribed (Subscriber< ErrorMsg > &sub) const
 Возвращает true, если переданный подписчик в настоящее время подписан.

int subCount () const
 Возвращает количество подписанных подписчиков.

int send (const ErrorMsg &msg)
 Отправляет переданное сообщение всем подписанным подписчикам, т.е.


Закрытые данные

bool running
 флаг, показывающий выполняется ли в данное время search()

bool shouldStop
 флаг, показывающий, что search() должна остановиться

sh_ptr< TextFindertxtFnd
 объект для поиска текста в строке


Друзья

struct OpenCloseSender

Подробное описание

Класс-реализация интерфейса FindText.

См. определение в файле findtextimpl.cpp строка 43


Конструктор(ы)

FindTextImpl::FindTextImpl  )  [inline]
 

Создает объект, устанавливая начальные значения флагов.

См. определение в файле findtextimpl.cpp строка 82

00082 : running(0), shouldStop(0) {}


Методы

Publisher< ErrorMsg > & FindTextImpl::errorPub  )  [private, virtual]
 

Издатель, публикующий сообщения о нефатальных ошибках, встреченных по ходу работы.

В процессе обработки сообщения подписчик может вызвать функцию stopSearch() для прекращения поиска.

Замещает FindText.

См. определение в файле findtextimpl.cpp строка 146

00147  {
00148   return *this;
00149  }

bool FindTextImpl::found const std::string &  fileName  )  [private, virtual]
 

Данная функция вызывается для каждого найденного файла.

Она читает содержимое файла, ищет заданную подстроку и посылает соответствующие сообщения.

Замещает FindFileCallback.

См. определение в файле findtextimpl.cpp строка 151

Перекрестные ссылки _FLINE_, newCException(), readLine(), Publisher< M >::send(), toCException() и txtFnd.

00152  {
00153   try {
00154       if (shouldStop) return 0;
00155 
00156       AutoFILE f(fopen(fileName.c_str(), "r"));
00157       if (!f.get()) {
00158          Publisher<ErrorMsg>::send(ErrorMsg(*this, StringBuf("Can't open \"")+
00159            fileName+"\": "+strerror(errno)));
00160          return 1;
00161       }
00162 
00163       OpenCloseSender ocs(*this, fileName);
00164 
00165       string str;
00166       str.reserve(1024);
00167 
00168       for (int lineNum=1; readLine(f.get(), str, fileName); lineNum++) {
00169           if (txtFnd->findIn(str))
00170              Publisher<FoundMsg>::send(FoundMsg(*this, fileName, lineNum, str));
00171       }
00172 
00173       return 1;
00174   }
00175   catch (...) {
00176         throw newCException(_FLINE_, "Can't process \""+fileName+"\"", 
00177           toCException(_FLINE_));
00178   }
00179  }

Publisher< FoundMsg > & FindTextImpl::foundPub  )  [private, virtual]
 

Издатель, публикующий сообщения о найденных строках.

В процессе обработки сообщения подписчик может вызвать функцию stopSearch() для прекращения поиска.

Замещает FindText.

См. определение в файле findtextimpl.cpp строка 136

00137  {
00138   return *this;
00139  }

Publisher< InfoMsg > & FindTextImpl::infoPub  )  [private, virtual]
 

Издатель, публикующий информационные сообщения о ходе работы.

В процессе обработки сообщения подписчик может вызвать функцию stopSearch() для прекращения поиска.

Замещает FindText.

См. определение в файле findtextimpl.cpp строка 141

00142  {
00143   return *this;
00144  }

bool Publisher< ErrorMsg >::isSubscribed Subscriber< ErrorMsg > &  sub  )  const [inline, inherited]
 

Возвращает true, если переданный подписчик в настоящее время подписан.

См. определение в файле pubsub.hpp строка 107

00108       {
00109        return impl.isSubscribed(&sub);
00110       }

bool Publisher< InfoMsg >::isSubscribed Subscriber< InfoMsg > &  sub  )  const [inline, inherited]
 

Возвращает true, если переданный подписчик в настоящее время подписан.

См. определение в файле pubsub.hpp строка 107

00108       {
00109        return impl.isSubscribed(&sub);
00110       }

bool Publisher< FoundMsg >::isSubscribed Subscriber< FoundMsg > &  sub  )  const [inline, inherited]
 

Возвращает true, если переданный подписчик в настоящее время подписан.

См. определение в файле pubsub.hpp строка 107

00108       {
00109        return impl.isSubscribed(&sub);
00110       }

bool FindTextImpl::readLine FILE *  f,
string &  str,
const std::string &  file
[private]
 

Читает строку текста из f в str.

При обнаружении ошибки чтения посылает сообщение ErrorMsg. Возвращает false по EOF или ошибке.

См. определение в файле findtextimpl.cpp строка 181

Перекрестные ссылки Publisher< M >::send().

Используется в found().

00182  {
00183   if (feof(f)) return 0;
00184   str.clear();
00185   
00186   for (int ch; ; ) {
00187       switch (ch=fgetc(f)) {
00188              case EOF: {
00189                   if (ferror(f)) {
00190                      Publisher<ErrorMsg>::send(ErrorMsg(*this,
00191                        StringBuf("Can't read from \"")+file+"\": "+
00192                        strerror(errno)));
00193                      return 0;
00194                   }
00195 
00196                   return (str.size()) ? 1 : 0;
00197              }
00198              case '\n': return 1;
00199              default: {
00200                       str.push_back(ch);
00201                       break;
00202              }
00203       }
00204   }
00205  }

void FindTextImpl::search const std::string &  dir,
bool  recur,
const std::string &  mask,
const std::string &  text
[private, virtual]
 

Выполняет поиск подстроки text в файлах, удовлетворяющих маске mask.

Поиск производится в директории dir и, если задан флаг recur, во всех ее поддиректориях. В процессе работы происходит рассылка сообщений, на которые можно подписаться с помощью соответствующих издателей. Возбуждает CException в случае обнаружения фатальных ошибок.

Замещает FindText.

См. определение в файле findtextimpl.cpp строка 109

Перекрестные ссылки _FLINE_, newCException(), Factory::newFindFile(), Factory::newTextFinder(), running, shouldStop, toCException() и txtFnd.

00111  {
00112   try {
00113       if (running)
00114          throw newCException(_FLINE_, "search() already running");
00115       running=1;
00116       
00117       AutoFlag autoRunning(running);
00118       AutoFlag autoShouldStop(shouldStop);
00119 
00120       txtFnd=Factory::newTextFinder(text);
00121 
00122       sh_ptr<FindFile> ff=Factory::newFindFile();
00123       ff->find(dir, recur, mask, *this);
00124   }
00125   catch (...) {
00126         throw newCException(_FLINE_, "Can't search", toCException(_FLINE_));
00127   }
00128  }

int Publisher< ErrorMsg >::send const ErrorMsg msg  )  [inherited]
 

Отправляет переданное сообщение всем подписанным подписчикам, т.е.

вызывается функция regularMsg() каждого из них. Если regularMsg() вернет false, то подписчик будет сразу же отписан -- именно поэтому send() не является const функцией. Возвращает количество подписчиков, получивших сообщение.

int Publisher< InfoMsg >::send const InfoMsg msg  )  [inherited]
 

Отправляет переданное сообщение всем подписанным подписчикам, т.е.

вызывается функция regularMsg() каждого из них. Если regularMsg() вернет false, то подписчик будет сразу же отписан -- именно поэтому send() не является const функцией. Возвращает количество подписчиков, получивших сообщение.

int Publisher< FoundMsg >::send const FoundMsg msg  )  [inherited]
 

Отправляет переданное сообщение всем подписанным подписчикам, т.е.

вызывается функция regularMsg() каждого из них. Если regularMsg() вернет false, то подписчик будет сразу же отписан -- именно поэтому send() не является const функцией. Возвращает количество подписчиков, получивших сообщение.

void FindTextImpl::stopSearch  )  [private, virtual]
 

Данная функция предназначена для остановки работы функции search().

Она может быть вызвана только в процессе обработки сообщения. При обнаружении ошибок возбуждает CException.

Замещает FindText.

См. определение в файле findtextimpl.cpp строка 130

Перекрестные ссылки _FLINE_, newCException(), running и shouldStop.

00131  {
00132   if (!running) throw newCException(_FLINE_, "search() isn't running");
00133   shouldStop=1;
00134  }

int Publisher< ErrorMsg >::subCount  )  const [inline, inherited]
 

Возвращает количество подписанных подписчиков.

См. определение в файле pubsub.hpp строка 115

00115 { return impl.subCount(); }

int Publisher< InfoMsg >::subCount  )  const [inline, inherited]
 

Возвращает количество подписанных подписчиков.

См. определение в файле pubsub.hpp строка 115

00115 { return impl.subCount(); }

int Publisher< FoundMsg >::subCount  )  const [inline, inherited]
 

Возвращает количество подписанных подписчиков.

См. определение в файле pubsub.hpp строка 115

00115 { return impl.subCount(); }

bool Publisher< ErrorMsg >::subscribe Subscriber< ErrorMsg > &  sub  )  [inherited]
 

Подписывает переданного подписчика (если он еще не был подписан) и передает ему сообщение о подписке, т.е.

вызывается его функция subscribedMsg(). Возвращает false, если он уже был подписан.

bool Publisher< InfoMsg >::subscribe Subscriber< InfoMsg > &  sub  )  [inherited]
 

Подписывает переданного подписчика (если он еще не был подписан) и передает ему сообщение о подписке, т.е.

вызывается его функция subscribedMsg(). Возвращает false, если он уже был подписан.

bool Publisher< FoundMsg >::subscribe Subscriber< FoundMsg > &  sub  )  [inherited]
 

Подписывает переданного подписчика (если он еще не был подписан) и передает ему сообщение о подписке, т.е.

вызывается его функция subscribedMsg(). Возвращает false, если он уже был подписан.

bool Publisher< ErrorMsg >::unsubscribe Subscriber< ErrorMsg > &  sub  )  [inherited]
 

Отменяет подписку переданного подписчика (если он был подписан) и передает ему сообщение о прекращении подписки, т.е.

вызывается его функция unsubscribedMsg(). Возвращает false, если подписчик не был подписан.

bool Publisher< InfoMsg >::unsubscribe Subscriber< InfoMsg > &  sub  )  [inherited]
 

Отменяет подписку переданного подписчика (если он был подписан) и передает ему сообщение о прекращении подписки, т.е.

вызывается его функция unsubscribedMsg(). Возвращает false, если подписчик не был подписан.

bool Publisher< FoundMsg >::unsubscribe Subscriber< FoundMsg > &  sub  )  [inherited]
 

Отменяет подписку переданного подписчика (если он был подписан) и передает ему сообщение о прекращении подписки, т.е.

вызывается его функция unsubscribedMsg(). Возвращает false, если подписчик не был подписан.


Данные класса

bool FindTextImpl::running [private]
 

флаг, показывающий выполняется ли в данное время search()

См. определение в файле findtextimpl.cpp строка 48

Используется в search() и stopSearch().

bool FindTextImpl::shouldStop [private]
 

флаг, показывающий, что search() должна остановиться

См. определение в файле findtextimpl.cpp строка 50

Используется в search() и stopSearch().

sh_ptr<TextFinder> FindTextImpl::txtFnd [private]
 

объект для поиска текста в строке

См. определение в файле findtextimpl.cpp строка 52

Используется в found() и search().


Объявления и описания членов класса находятся в файле:
Документация по ftext. Последние изменения: Sat Mar 20 17:58:15 2004. Создано системой doxygen1.3