Show
Ignore:
Timestamp:
03/13/08 10:28:17 (4 years ago)
Author:
rakshasa
Message:

* Fixed minor bugs in the display of tracker groups. Patch by Josef
Drexler.

* Cleanup of the CommandMap? class.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • trunk/rtorrent/src/rpc/command_map.h

    r970 r1041  
    4545#include "command.h" 
    4646 
    47 namespace core { 
    48   class Download; 
    49 } 
    50  
    51 namespace torrent { 
    52   class File; 
    53   class FileListIterator; 
    54   class Peer; 
    55   class Tracker; 
    56 } 
    57  
    5847namespace rpc { 
    5948 
     
    6857  // 
    6958  // The any_slot should perhaps replace generic_slot? 
    70   typedef const torrent::Object (*generic_slot)  (Command*, const torrent::Object&); 
    71   typedef const torrent::Object (*any_slot)      (Command*, target_type, const torrent::Object&); 
    72   typedef const torrent::Object (*download_slot) (Command*, core::Download*, const torrent::Object&); 
    73   typedef const torrent::Object (*file_slot)     (Command*, torrent::File*, const torrent::Object&); 
    74   typedef const torrent::Object (*file_itr_slot) (Command*, torrent::FileListIterator*, const torrent::Object&); 
    75   typedef const torrent::Object (*peer_slot)     (Command*, torrent::Peer*, const torrent::Object&); 
    76   typedef const torrent::Object (*tracker_slot)  (Command*, torrent::Tracker*, const torrent::Object&); 
    7759 
    7860  command_map_data_type(Command* variable, int flags, const char* parm, const char* doc) : 
     
    8466 
    8567  union { 
    86     generic_slot  m_genericSlot; 
    87     any_slot      m_anySlot; 
    88     download_slot m_downloadSlot; 
    89     file_slot     m_fileSlot; 
    90     file_itr_slot m_fileItrSlot; 
    91     peer_slot     m_peerSlot; 
    92     tracker_slot  m_trackerSlot; 
     68    Command::generic_slot  m_genericSlot; 
     69    Command::any_slot      m_anySlot; 
     70    Command::download_slot m_downloadSlot; 
     71    Command::file_slot     m_fileSlot; 
     72    Command::file_itr_slot m_fileItrSlot; 
     73    Command::peer_slot     m_peerSlot; 
     74    Command::tracker_slot  m_trackerSlot; 
    9375  }; 
    9476 
     
    10486  typedef std::map<const char*, command_map_data_type, command_map_comp> base_type; 
    10587 
    106   typedef command_map_data_type::generic_slot  generic_slot; 
    107   typedef command_map_data_type::any_slot      any_slot; 
    108   typedef command_map_data_type::download_slot download_slot; 
    109   typedef command_map_data_type::file_slot     file_slot; 
    110   typedef command_map_data_type::file_itr_slot file_itr_slot; 
    111   typedef command_map_data_type::peer_slot     peer_slot; 
    112   typedef command_map_data_type::tracker_slot  tracker_slot; 
    113  
    11488  typedef torrent::Object         mapped_type; 
    11589  typedef mapped_type::value_type mapped_value_type; 
     
    12498  using base_type::find; 
    12599 
    126   static const int target_generic  = 0; 
    127   static const int target_any      = 1; 
    128   static const int target_download = 2; 
    129   static const int target_peer     = 3; 
    130   static const int target_tracker  = 4; 
    131   static const int target_file     = 5; 
    132   static const int target_file_itr = 6; 
    133  
    134100  static const int flag_dont_delete   = 0x1; 
    135101  static const int flag_public_xmlrpc = 0x2; 
     
    143109  iterator            insert(key_type key, Command* variable, int flags, const char* parm, const char* doc); 
    144110 
    145   void                insert_generic (key_type key, Command* variable, generic_slot targetSlot,  int flags, const char* parm, const char* doc); 
    146   void                insert_any     (key_type key, Command* variable, any_slot     targetSlot,  int flags, const char* parm, const char* doc); 
    147   void                insert_download(key_type key, Command* variable, download_slot targetSlot, int flags, const char* parm, const char* doc); 
    148   void                insert_peer    (key_type key, Command* variable, peer_slot targetSlot,     int flags, const char* parm, const char* doc); 
    149   void                insert_tracker (key_type key, Command* variable, tracker_slot targetSlot,  int flags, const char* parm, const char* doc); 
    150   void                insert_file    (key_type key, Command* variable, file_slot targetSlot,     int flags, const char* parm, const char* doc); 
    151   void                insert_file_itr(key_type key, Command* variable, file_itr_slot targetSlot, int flags, const char* parm, const char* doc); 
     111  template <typename T> 
     112  void                insert_type(key_type key, Command* variable, T targetSlot, int flags, const char* parm, const char* doc) { 
     113    iterator itr = insert(key, variable, flags, parm, doc); 
     114 
     115    itr->second.m_target      = target_type_id<T>::value;  
     116    itr->second.m_genericSlot = (Command::generic_slot)targetSlot; 
     117  } 
    152118 
    153119  void                insert(key_type key, const command_map_data_type src); 
    154120 
    155   const mapped_type   call_command  (key_type key,       const mapped_type& arg, target_type target = target_type((int)target_generic, NULL)); 
    156   const mapped_type   call_command  (const_iterator itr, const mapped_type& arg, target_type target = target_type((int)target_generic, NULL)); 
     121  const mapped_type   call_command  (key_type key,       const mapped_type& arg, target_type target = target_type((int)Command::target_generic, NULL)); 
     122  const mapped_type   call_command  (const_iterator itr, const mapped_type& arg, target_type target = target_type((int)Command::target_generic, NULL)); 
    157123 
    158   const mapped_type   call_command_d(key_type key, core::Download* download, const mapped_type& arg)  { return call_command(key, arg, target_type((int)target_download, download)); } 
    159   const mapped_type   call_command_p(key_type key, torrent::Peer* peer, const mapped_type& arg)       { return call_command(key, arg, target_type((int)target_peer, peer)); } 
    160   const mapped_type   call_command_t(key_type key, torrent::Tracker* tracker, const mapped_type& arg) { return call_command(key, arg, target_type((int)target_tracker, tracker)); } 
    161   const mapped_type   call_command_f(key_type key, torrent::File* file, const mapped_type& arg)       { return call_command(key, arg, target_type((int)target_file, file)); } 
     124  const mapped_type   call_command_d(key_type key, core::Download* download, const mapped_type& arg)  { return call_command(key, arg, target_type((int)Command::target_download, download)); } 
     125  const mapped_type   call_command_p(key_type key, torrent::Peer* peer, const mapped_type& arg)       { return call_command(key, arg, target_type((int)Command::target_peer, peer)); } 
     126  const mapped_type   call_command_t(key_type key, torrent::Tracker* tracker, const mapped_type& arg) { return call_command(key, arg, target_type((int)Command::target_tracker, tracker)); } 
     127  const mapped_type   call_command_f(key_type key, torrent::File* file, const mapped_type& arg)       { return call_command(key, arg, target_type((int)Command::target_file, file)); } 
    162128 
    163129private: 
     
    166132}; 
    167133 
    168 inline target_type make_target()                                  { return target_type((int)CommandMap::target_generic, NULL); } 
    169 inline target_type make_target(core::Download* target)            { return target_type((int)CommandMap::target_download, target); } 
    170 inline target_type make_target(torrent::Peer* target)             { return target_type((int)CommandMap::target_peer, target); } 
    171 inline target_type make_target(torrent::Tracker* target)          { return target_type((int)CommandMap::target_tracker, target); } 
    172 inline target_type make_target(torrent::File* target)             { return target_type((int)CommandMap::target_file, target); } 
    173 inline target_type make_target(torrent::FileListIterator* target) { return target_type((int)CommandMap::target_file_itr, target); } 
     134inline target_type make_target()                                  { return target_type((int)Command::target_generic, NULL); } 
     135inline target_type make_target(core::Download* target)            { return target_type((int)Command::target_download, target); } 
     136inline target_type make_target(torrent::Peer* target)             { return target_type((int)Command::target_peer, target); } 
     137inline target_type make_target(torrent::Tracker* target)          { return target_type((int)Command::target_tracker, target); } 
     138inline target_type make_target(torrent::File* target)             { return target_type((int)Command::target_file, target); } 
     139inline target_type make_target(torrent::FileListIterator* target) { return target_type((int)Command::target_file_itr, target); } 
    174140inline target_type make_target(int type, void* target)            { return target_type(type, target); } 
    175141