bin_word_search.cc

Go to the documentation of this file.
00001 #ifndef BIN_WORD_SEARCH_CC
00002 #define BIN_WORD_SEARCH_CC
00003 
00004 #include "bin_word_search.hh"
00005 
00006 bin_word_search::bin_word_search(){
00007 
00008   _continue_mode = false;
00009   _target = PMT::INVALID_WORD;
00010   _nwords=20;
00011   _bytes = SHORT;
00012 }
00013 
00014 bool bin_word_search::run(){
00015 
00016   _fin.set_verbosity(MSG::ERROR);
00017   _fin.open();
00018   
00019   if(!_fin.is_open()) return false;
00020 
00021   PMT::word_t word1,word2;
00022 
00023   const size_t max_nwords = _nwords*2+1;
00024 
00025   std::deque<PMT::word_t> words(max_nwords);
00026 
00027   size_t total_word_counter = 0;
00028   size_t after_word_counter = 0;
00029   
00030   while(1){
00031 
00032     word1 = _fin.read_word();
00033 
00034     if(_fin.eof()) break;
00035 
00036     if(total_word_counter >= max_nwords)
00037       words.pop_front();
00038 
00039     if(_bytes == INT){
00040 
00041       words.push_back(word1);
00042 
00043       total_word_counter++;
00044 
00045       if(word1 == _target || after_word_counter>0)
00046     after_word_counter++;
00047 
00048       if(after_word_counter == (_nwords+1)) {
00049     if(!_continue_mode) break;
00050     else{
00051       print_words(&words);
00052       after_word_counter = 0;
00053     }
00054       }
00055     }
00056     else {
00057       
00058       word2 = (word1>>16);
00059       word1 = (word1 & 0xffff);
00060 
00061       words.push_back(word1);
00062       total_word_counter++;
00063       
00064       if(word1 == _target || after_word_counter>0)
00065     after_word_counter++;
00066 
00067       if(after_word_counter == (_nwords+1)) {
00068     if(!_continue_mode) break;
00069     else{
00070       print_words(&words);
00071       after_word_counter = 0;
00072     }
00073       }
00074 
00075       words.push_back(word2);
00076       total_word_counter++;
00077       if(word2 == _target || after_word_counter>0)
00078     after_word_counter++;
00079 
00080       if(after_word_counter == (_nwords+1)) {
00081     if(!_continue_mode) break;
00082     else{
00083       print_words(&words);
00084       after_word_counter = 0;
00085     }
00086       }
00087     }
00088     
00089   }
00090 
00091   if(after_word_counter) print_words(&words);
00092 
00093   return true;
00094 }
00095 
00096 void bin_word_search::print_words(std::deque<PMT::word_t> *words){
00097 
00098   int output_word_counter = 0;
00099   std::string msg;
00100   for(std::deque<PMT::word_t>::const_iterator iter(words->begin());
00101       iter != words->end();
00102       ++iter){
00103     
00104     if((*iter) == _target)
00105       msg += "\033[95m";
00106     
00107     if(_bytes == INT) msg += Form("%08x ",(*iter));
00108     else              msg += Form("%04x ",(*iter));
00109     
00110     if((*iter) == _target)
00111       msg += "\033[0m";
00112     
00113     output_word_counter++;
00114 
00115     if(output_word_counter%8 == 0)
00116       msg+="\n";
00117   }
00118 
00119   std::cout<<msg.c_str()<<std::endl<<std::endl;
00120 
00121 }
00122 
00123 #endif

Generated on Mon Apr 7 15:35:12 2014 for MyProject by  doxygen 1.4.7