Changeset 423


Ignore:
Timestamp:
04/15/08 17:56:35 (12 years ago)
Author:
Eoin
Message:

Some refactoring on the Listview Locks.

Location:
trunk
Files:
1 added
13 edited

Legend:

Unmodified
Added
Removed
  • trunk/sln/Halite/Halite.vcproj

    r420 r423  
    127127                                Optimization="0" 
    128128                                AdditionalIncludeDirectories=""$(SolutionDir)src\WTLx";"$(SolutionDir)src";"$(SolutionDir)lib\libtorrent\include";"$(SolutionDir)lib\libtorrent\zlib";"$(SolutionDir)lib\Asio\include\";"$(SolutionDir)lib\openssl\inc"" 
    129                                 PreprocessorDefinitions="WIN32_LEAN_AND_MEAN;_WIN32_WINNT=0x0500;__USE_W32_SOCKETS;WIN32 ;_WIN32;_WINDOWS;_DEBUG;TORRENT_USE_BOOST_DATE_TIME;TORRENT_USE_OPENSSL;_CRT_SECURE_NO_DEPRECATE;_SCL_SECURE_NO_DEPRECATE;_CRT_SECURE_NO_WARNINGS" 
     129                                PreprocessorDefinitions="WIN32_LEAN_AND_MEAN;_WIN32_WINNT=0x0500;__USE_W32_SOCKETS;WIN32;_WIN32;_WINDOWS;_DEBUG;TORRENT_USE_BOOST_DATE_TIME;TORRENT_USE_OPENSSL;_CRT_SECURE_NO_DEPRECATE;_SCL_SECURE_NO_DEPRECATE;_CRT_SECURE_NO_WARNINGS;_SECURE_SCL=0;_HAS_ITERATOR_DEBUGGING=0" 
    130130                                MinimalRebuild="true" 
    131131                                ExceptionHandling="2" 
     
    460460                                WholeProgramOptimization="false" 
    461461                                AdditionalIncludeDirectories=""$(SolutionDir)src\WTLx";"$(SolutionDir)src";"$(SolutionDir)lib\libtorrent\include";"$(SolutionDir)lib\libtorrent\zlib";"$(SolutionDir)lib\Asio\include\";"$(SolutionDir)lib\openssl\inc"" 
    462                                 PreprocessorDefinitions="WIN32_LEAN_AND_MEAN;_WIN32_WINNT=0x0500;__USE_W32_SOCKETS;WIN32;_WIN32;_WINDOWS;NDEBUG;TORRENT_USE_BOOST_DATE_TIME;TORRENT_USE_OPENSSL;_CRT_SECURE_NO_DEPRECATE;_SCL_SECURE_NO_DEPRECATE;_CRT_SECURE_NO_WARNINGS" 
     462                                PreprocessorDefinitions="WIN32_LEAN_AND_MEAN;_WIN32_WINNT=0x0500;__USE_W32_SOCKETS;WIN32;_WIN32;_WINDOWS;NDEBUG;TORRENT_USE_BOOST_DATE_TIME;TORRENT_USE_OPENSSL;_CRT_SECURE_NO_DEPRECATE;_SCL_SECURE_NO_DEPRECATE;_CRT_SECURE_NO_WARNINGS;_SECURE_SCL=0;_HAS_ITERATOR_DEBUGGING=0" 
    463463                                ExceptionHandling="2" 
    464464                                RuntimeLibrary="0" 
     
    11541154                                <File 
    11551155                                        RelativePath="..\..\src\WTLx\RadioPaneDlg.hpp" 
     1156                                        > 
     1157                                </File> 
     1158                                <File 
     1159                                        RelativePath="..\..\src\WTLx\SelectionManager.hpp" 
    11561160                                        > 
    11571161                                </File> 
  • trunk/sln/libtorrent/libtorrent.vcproj

    r408 r423  
    110110                                Optimization="0" 
    111111                                AdditionalIncludeDirectories="&quot;$(SolutionDir)lib\libtorrent\include&quot;;&quot;$(SolutionDir)lib\libtorrent\zlib&quot;;&quot;$(SolutionDir)lib\Asio\include\&quot;;&quot;$(SolutionDir)lib\Openssl\inc&quot;" 
    112                                 PreprocessorDefinitions="WIN32_LEAN_AND_MEAN;_WIN32_WINNT=0x0500;__USE_W32_SOCKETS;_DEBUG;WIN32 ;_WIN32;_WINDOWS;TORRENT_USE_BOOST_DATE_TIME;TORRENT_USE_OPENSSL;_SCL_SECURE_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE" 
     112                                PreprocessorDefinitions="WIN32_LEAN_AND_MEAN;_WIN32_WINNT=0x0500;__USE_W32_SOCKETS;_DEBUG;WIN32;_WIN32;_WINDOWS;TORRENT_USE_BOOST_DATE_TIME;TORRENT_USE_OPENSSL;_SCL_SECURE_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_SECURE_SCL=0;_HAS_ITERATOR_DEBUGGING=0" 
    113113                                MinimalRebuild="true" 
    114114                                ExceptionHandling="2" 
     
    372372                                FavorSizeOrSpeed="2" 
    373373                                AdditionalIncludeDirectories="&quot;$(SolutionDir)lib\libtorrent\include&quot;;&quot;$(SolutionDir)lib\libtorrent\zlib&quot;;&quot;$(SolutionDir)lib\Asio\include\&quot;;&quot;$(SolutionDir)lib\Openssl\inc&quot;" 
    374                                 PreprocessorDefinitions="WIN32_LEAN_AND_MEAN;_WIN32_WINNT=0x0500;__USE_W32_SOCKETS;WIN32 ;_WIN32;_WINDOWS;NDEBUG;TORRENT_USE_BOOST_DATE_TIME;TORRENT_USE_OPENSSL;_SCL_SECURE_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE" 
     374                                PreprocessorDefinitions="WIN32_LEAN_AND_MEAN;_WIN32_WINNT=0x0500;__USE_W32_SOCKETS;WIN32;_WIN32;_WINDOWS;NDEBUG;TORRENT_USE_BOOST_DATE_TIME;TORRENT_USE_OPENSSL;_SCL_SECURE_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_SECURE_SCL=0;_HAS_ITERATOR_DEBUGGING=0" 
    375375                                ExceptionHandling="2" 
    376376                                RuntimeLibrary="0" 
  • trunk/src/HaliteDialog.cpp

    r403 r423  
    172172void HaliteDialog::DialogListView::uiUpdate(const hal::TorrentDetails& tD)  
    173173{        
    174         TryUpdateLock<listClass> lock(*this); 
     174        hal::try_update_lock<listClass> lock(*this); 
    175175        if (lock)  
    176176        {                
  • trunk/src/HaliteListView.cpp

    r403 r423  
    7676void HaliteListViewCtrl::uiUpdate(const hal::TorrentDetails& tD) 
    7777{ 
    78         TryUpdateLock<listClass> lock(*this); 
     78        hal::try_update_lock<listClass> lock(*this); 
    7979        if (lock)  
    8080        { 
  • trunk/src/HaliteSortListViewCtrl.hpp

    r410 r423  
    2626#define LVS_EX_DOUBLEBUFFER     0x00010000 
    2727 
     28#include "WTLx/SelectionManager.hpp" 
    2829#include "HaliteUpdateLock.hpp" 
    2930 
     
    5253        typedef CSortListViewCtrlImpl<thisClass> parentClass; 
    5354         
     55#if 0 
    5456        class selection_manager :  
    5557                private boost::noncopyable 
     
    262264                thisClass& m_list_; 
    263265        }; 
    264          
     266#endif   
    265267        class CHaliteHeaderCtrl : public CWindowImpl<CHaliteHeaderCtrl, WTL::CHeaderCtrl> 
    266268        { 
     
    327329 
    328330public: 
    329         typedef selection_manager SelectionManager; 
     331        typedef WTLx::selection_manager<thisClass, std::wstring> SelectionManager; 
    330332        typedef SelectionManager selection_manage_class; 
    331333         
     
    333335                manager_(*this), 
    334336                header_(*this), 
    335                 updateLock_(0), 
     337                update_lock_(0), 
    336338                autoSort_(false), 
    337339                descending_(false), 
     
    591593        LRESULT OnItemChanged(int, LPNMHDR pnmh, BOOL&) 
    592594        {                
    593                 TryUpdateLock<thisClass> lock(*this); 
     595                hal::try_update_lock<thisClass> lock(*this); 
    594596                if (lock)  
    595597                        manager_.sync_list(true, true); 
     
    666668        int CompareItemsCustom(LVCompareParam* pItem1, LVCompareParam* pItem2, int iSortCol) 
    667669        { 
    668                 UpdateLock<thisClass> lock(*this); 
     670                hal::mutex_update_lock<thisClass> lock(*this); 
    669671                 
    670672                TBase* pT = static_cast<TBase*>(this); 
     
    758760        int sortCol_; 
    759761         
    760         int updateLock_; 
    761         friend class UpdateLock<thisClass>;      
    762         friend class TryUpdateLock<thisClass>;           
     762        mutable int update_lock_; 
     763        mutable hal::mutex_t mutex_; 
     764 
     765        friend class hal::mutex_update_lock<thisClass>;  
     766        friend class hal::try_update_lock<thisClass>;            
    763767         
    764768        boost::ptr_map<size_t, ColumnAdapter> columnAdapters_; 
  • trunk/src/HaliteUpdateLock.hpp

    r276 r423  
    77#pragma once 
    88 
     9namespace hal 
     10{ 
     11 
    912template<class T> 
    10 class UpdateLock 
     13class mutex_update_lock 
    1114{ 
    1215public: 
    13         UpdateLock(T& window) : 
    14                 window_(window) 
     16        mutex_update_lock(T& window) : 
     17                window_(window), 
     18                lock_(window_.mutex_) 
    1519        { 
    16                 ++window_.updateLock_; 
     20                ++window_.update_lock_; 
     21 
    1722//              window_.LockWindowUpdate(true); 
    1823        } 
    1924         
    20         ~UpdateLock() 
     25        ~mutex_update_lock() 
    2126        { 
    22                 if (!--window_.updateLock_) 
     27                if (!--window_.update_lock_) 
    2328                        unlock(); 
    2429        } 
     
    3237private: 
    3338        T& window_; 
     39 
     40        mutex_t::scoped_lock lock_; 
    3441}; 
    3542 
    3643template<class T> 
    37 class TryUpdateLock 
     44class try_update_lock 
    3845{ 
    3946public: 
    40         TryUpdateLock(T& window) : 
     47        try_update_lock(T& window) : 
    4148                window_(window), 
     49                lock_(window_.mutex_), 
    4250                locked_(false) 
    4351        { 
    44                 if (0 == window_.updateLock_) 
     52                if (0 == window_.update_lock_) 
    4553                { 
    46                         locked_=  true; 
    47                         ++window_.updateLock_; 
     54                        locked_ =  true; 
     55                        ++window_.update_lock_; 
     56 
    4857//                      window_.LockWindowUpdate(true); 
    4958                } 
    5059        } 
    5160         
    52         ~TryUpdateLock() 
     61        ~try_update_lock() 
    5362        { 
    54                 if (locked_ && !--window_.updateLock_) 
     63                if (locked_ && !--window_.update_lock_) 
    5564                        unlock(); 
    5665        } 
     
    6675private: 
    6776        T& window_; 
     77 
     78        mutex_t::scoped_lock lock_; 
    6879        bool locked_; 
    6980}; 
     81 
     82} 
  • trunk/src/NewTorrentTrackerLV.cpp

    r419 r423  
    3737        if (pT) 
    3838        {                        
    39                 TryUpdateLock<listClass> lock(*this); 
     39                hal::try_update_lock<listClass> lock(*this); 
    4040                if (lock)  
    4141                {                        
  • trunk/src/advtabs/Files.cpp

    r392 r423  
    144144        hal::bittorrent().setTorrentFilePriorities(torrent, indices, priority); 
    145145         
    146         TryUpdateLock<thisClass> lock(*this); 
     146        hal::try_update_lock<thisClass> lock(*this); 
    147147        if (lock) signal(); 
    148148} 
     
    171171LRESULT FileTreeView::OnSelChanged(int, LPNMHDR pnmh, BOOL&) 
    172172{        
    173         TryUpdateLock<thisClass> lock(*this); 
     173        hal::try_update_lock<thisClass> lock(*this); 
    174174        if (lock) 
    175175        {                
     
    248248        } 
    249249         
    250         TryUpdateLock<FileListView::listClass> lock(list_); 
     250        hal::try_update_lock<FileListView::listClass> lock(list_); 
    251251        if (lock)  
    252252        {                        
     
    311311        std::sort(fileLinks_.begin(), fileLinks_.end()); 
    312312         
    313         {       UpdateLock<FileTreeView> lock(tree_); 
     313        {       hal::mutex_update_lock<FileTreeView> lock(tree_); 
    314314         
    315315                treeManager_.InvalidateAll(); 
  • trunk/src/advtabs/Files.hpp

    r395 r423  
    226226        thisClass() : 
    227227                iniClass("treeviews/advFiles", "FileTreeView"), 
    228                 updateLock_(0) 
     228                update_lock_(0) 
    229229        {} 
    230230         
     
    262262        LRESULT OnSelChanged(int, LPNMHDR pnmh, BOOL&); 
    263263         
    264         int updateLock_; 
    265         friend class UpdateLock<thisClass>;      
    266         friend class TryUpdateLock<thisClass>;   
     264        mutable int update_lock_; 
     265        mutable hal::mutex_t mutex_; 
     266 
     267        friend class hal::mutex_update_lock<thisClass>;  
     268        friend class hal::try_update_lock<thisClass>;            
    267269         
    268270        mutable boost::signal<void ()> selection_; 
  • trunk/src/advtabs/Peers.cpp

    r392 r423  
    1616void PeerListView::uiUpdate(const hal::TorrentDetails& tD) 
    1717{ 
    18         TryUpdateLock<listClass> lock(*this); 
     18        hal::try_update_lock<listClass> lock(*this); 
    1919        if (lock)  
    2020        {                
  • trunk/src/advtabs/TrackerListView.cpp

    r419 r423  
    3737        if (pT) 
    3838        {                        
    39                 TryUpdateLock<listClass> lock(*this); 
     39                hal::try_update_lock<listClass> lock(*this); 
    4040                if (lock)  
    4141                {                        
     
    106106LRESULT TrackerListViewCtrl::OnPrimary(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled) 
    107107{        
    108         TryUpdateLock<listClass> lock(*this); 
     108        hal::try_update_lock<listClass> lock(*this); 
    109109        if (lock)  
    110110        {        
  • trunk/src/global/string_conv.hpp

    r301 r423  
    7070} 
    7171 
     72template<typename S, int N=-1> 
     73class win_c_str 
     74{ 
     75public:  
     76        win_c_str() 
     77        {} 
     78 
     79        typedef S string_t; 
     80        typedef typename S::value_type char_t; 
     81 
     82        operator char_t* () { return buffer_.elems; } 
     83        operator const string_t() { return string_t(buffer_.elems); } 
     84        size_t size() { return (N >= 0) ? N : 0; } 
     85 
     86private: 
     87        boost::array<char_t, N> buffer_; 
     88}; 
     89 
     90template<typename S> 
     91class win_c_str<S, -1> 
     92{ 
     93public:  
     94        win_c_str(int N) : 
     95                vector_(N) 
     96        {} 
     97 
     98        typedef S string_t; 
     99        typedef typename S::value_type char_t; 
     100 
     101        operator char_t* () { return &vector_[0]; } 
     102        operator const string_t() { return string_t(&vector_[0]); } 
     103        size_t size() { return vector_.size(); } 
     104 
     105private: 
     106        std::vector<char_t> vector_; 
     107}; 
     108 
     109 
     110 
    72111template<typename str_t> 
    73112inline std::wstring to_wstr_shim(str_t& s) 
  • trunk/src/global/wtl_app.cpp

    r392 r423  
    134134{ 
    135135        // The upper size limit ain't nice, but at least it's safe from buffer overflow 
    136         const int buffer_size = 2048; 
    137         boost::array<wchar_t, buffer_size> buffer; 
     136        win_c_str<std::wstring> str(2048); 
    138137         
    139         int size = ::LoadString(_Module.GetResourceInstance(), uID, buffer.elems, buffer_size); 
     138        int size = ::LoadString(_Module.GetResourceInstance(), uID, str, str.size()); 
    140139        assert(size != 0); 
    141140         
    142         return std::wstring(buffer.elems); 
     141        return str; 
    143142} 
    144143 
Note: See TracChangeset for help on using the changeset viewer.