1 ///////////////////////////////////////////////////////////////////////////// 
   2 // Name:        wx/private/fswatcher.h 
   3 // Purpose:     File system watcher impl classes 
   4 // Author:      Bartosz Bekier 
   7 // Copyright:   (c) 2009 Bartosz Bekier <bartosz.bekier@gmail.com> 
   8 // Licence:     wxWindows licence 
   9 ///////////////////////////////////////////////////////////////////////////// 
  11 #ifndef WX_PRIVATE_FSWATCHER_H_ 
  12 #define WX_PRIVATE_FSWATCHER_H_ 
  14 #include "wx/sharedptr.h" 
  17     class wxFSWatchEntryUnix
; 
  18     #define wxFSWatchEntry wxFSWatchEntryUnix 
  19     WX_DECLARE_STRING_HASH_MAP(wxSharedPtr
<wxFSWatchEntry
>,wxFSWatchEntries
); 
  20     #include "wx/unix/private/fswatcher_inotify.h" 
  21 #elif defined(wxHAS_KQUEUE) 
  22     class wxFSWatchEntryKq
; 
  23     #define wxFSWatchEntry wxFSWatchEntryKq 
  24     WX_DECLARE_STRING_HASH_MAP(wxSharedPtr
<wxFSWatchEntry
>,wxFSWatchEntries
); 
  25     #include "wx/unix/private/fswatcher_kqueue.h" 
  26 #elif defined(__WXMSW__) 
  27     class wxFSWatchEntryMSW
; 
  28     #define wxFSWatchEntry wxFSWatchEntryMSW 
  29     WX_DECLARE_STRING_HASH_MAP(wxSharedPtr
<wxFSWatchEntry
>,wxFSWatchEntries
); 
  30     #include "wx/msw/private/fswatcher.h" 
  32     #define wxFSWatchEntry wxFSWatchEntryPolling 
  38     wxFSWatcherImpl(wxFileSystemWatcherBase
* watcher
) : 
  43     virtual ~wxFSWatcherImpl() 
  48     virtual bool Init() = 0; 
  50     virtual bool Add(const wxFSWatchInfo
& winfo
) 
  52         wxCHECK_MSG( m_watches
.find(winfo
.GetPath()) == m_watches
.end(), false, 
  53                      "Path '%s' is already watched"); 
  55         // construct watch entry 
  56         wxSharedPtr
<wxFSWatchEntry
> watch(new wxFSWatchEntry(winfo
)); 
  61         // add watch to our map (always succeedes, checked above) 
  62         wxFSWatchEntries::value_type 
val(watch
->GetPath(), watch
); 
  63         return m_watches
.insert(val
).second
; 
  66     virtual bool Remove(const wxFSWatchInfo
& winfo
) 
  68         wxFSWatchEntries::iterator it 
= m_watches
.find(winfo
.GetPath()); 
  69         wxCHECK_MSG( it 
!= m_watches
.end(), false, "Path '%s' is not watched"); 
  71         wxSharedPtr
<wxFSWatchEntry
> watch 
= it
->second
; 
  73         return DoRemove(watch
); 
  76     virtual bool RemoveAll() 
  83     virtual bool DoAdd(wxSharedPtr
<wxFSWatchEntry
> watch
) = 0; 
  85     virtual bool DoRemove(wxSharedPtr
<wxFSWatchEntry
> watch
) = 0; 
  87     wxFSWatchEntries m_watches
; 
  88     wxFileSystemWatcherBase
* m_watcher
; 
  92 #endif /* WX_PRIVATE_FSWATCHER_H_ */