Show
Ignore:
Timestamp:
12/23/07 14:12:23 (4 years ago)
Author:
rakshasa
Message:

* Refactoring utils::Directory.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • trunk/rtorrent/src/input/path_input.cc

    r938 r1022  
    3939#include <functional> 
    4040#include <rak/algorithm.h> 
    41 #include <rak/file_stat.h> 
     41#include <rak/functional.h> 
    4242#include <rak/path.h> 
     43 
     44#include <sys/types.h> 
     45#include <sys/dir.h> 
    4346 
    4447#include "path_input.h" 
     
    6972 
    7073struct _transform_filename { 
    71   _transform_filename(const std::string& base) : m_base(base) {} 
    72  
    73   void operator () (std::string& filename) { 
    74     rak::file_stat fs; 
    75  
    76     if (!fs.update(rak::path_expand(m_base + filename))) 
    77       return; 
    78  
    79     else if (fs.is_directory()) 
    80       filename += '/'; 
     74  void operator () (utils::directory_entry& entry) { 
     75    if (entry.d_type == DT_DIR) 
     76      entry.d_name += '/'; 
    8177  } 
    82  
    83   const std::string& m_base; 
    8478}; 
    8579 
     
    9690  } 
    9791 
    98   std::for_each(dir.begin(), dir.end(), _transform_filename(str().substr(0, dirEnd))); 
     92  std::for_each(dir.begin(), dir.end(), _transform_filename()); 
    9993 
    10094  Range r = find_incomplete(dir, str().substr(dirEnd, get_pos())); 
     
    10397    return; // Show some nice colors here. 
    10498 
    105   std::string base = rak::make_base(r.first, r.second); 
     99  std::string base = rak::make_base<std::string>(r.first, r.second, rak::const_mem_ref(&utils::directory_entry::d_name)); 
    106100 
    107101  // Clear the path after the cursor to make this code cleaner. It's 
     
    134128} 
    135129 
     130inline bool 
     131find_complete_compare(const utils::directory_entry& complete, const std::string& base) { 
     132  return complete.d_name.compare(0, base.size(), base); 
     133} 
     134 
     135inline bool 
     136find_complete_not_compare(const utils::directory_entry& complete, const std::string& base) { 
     137  return !complete.d_name.compare(0, base.size(), base); 
     138} 
     139 
    136140PathInput::Range 
    137141PathInput::find_incomplete(utils::Directory& d, const std::string& f) { 
    138142  Range r; 
    139143 
    140   r.first  = std::find_if(d.begin(), d.end(), std::bind2nd(rak::compare_base<std::string>(), f)); 
    141   r.second = std::find_if(r.first, d.end(), std::not1(std::bind2nd(rak::compare_base<std::string>(), f))); 
     144  r.first  = std::find_if(d.begin(), d.end(), rak::bind2nd(std::ptr_fun(&find_complete_not_compare), f)); 
     145  r.second = std::find_if(r.first,   d.end(), rak::bind2nd(std::ptr_fun(&find_complete_compare), f)); 
    142146 
    143147  return r;