From 94f8330613877b3582d32bd11abd83a97b4399ad Mon Sep 17 00:00:00 2001 From: Li Jin Date: Tue, 15 Nov 2022 17:23:46 +0800 Subject: adding -w option to Yuescript tool. --- src/3rdParty/efsw/FileWatcherKqueue.hpp | 80 +++++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100755 src/3rdParty/efsw/FileWatcherKqueue.hpp (limited to 'src/3rdParty/efsw/FileWatcherKqueue.hpp') diff --git a/src/3rdParty/efsw/FileWatcherKqueue.hpp b/src/3rdParty/efsw/FileWatcherKqueue.hpp new file mode 100755 index 0000000..1bf3755 --- /dev/null +++ b/src/3rdParty/efsw/FileWatcherKqueue.hpp @@ -0,0 +1,80 @@ +#ifndef EFSW_FILEWATCHEROSX_HPP +#define EFSW_FILEWATCHEROSX_HPP + +#include + +#if EFSW_PLATFORM == EFSW_PLATFORM_KQUEUE || EFSW_PLATFORM == EFSW_PLATFORM_FSEVENTS + +#include + +namespace efsw { + +/// Implementation for OSX based on kqueue. +/// @class FileWatcherKqueue +class FileWatcherKqueue : public FileWatcherImpl { + friend class WatcherKqueue; + + public: + FileWatcherKqueue( FileWatcher* parent ); + + virtual ~FileWatcherKqueue(); + + /// Add a directory watch + /// On error returns WatchID with Error type. + WatchID addWatch( const std::string& directory, FileWatchListener* watcher, bool recursive ); + + /// Remove a directory watch. This is a brute force lazy search O(nlogn). + void removeWatch( const std::string& directory ); + + /// Remove a directory watch. This is a map lookup O(logn). + void removeWatch( WatchID watchid ); + + /// Updates the watcher. Must be called often. + void watch(); + + /// Handles the action + void handleAction( Watcher* watch, const std::string& filename, unsigned long action, + std::string oldFilename = "" ); + + /// @return Returns a list of the directories that are being watched + std::list directories(); + + protected: + /// Map of WatchID to WatchStruct pointers + WatchMap mWatches; + + /// time out data + struct timespec mTimeOut; + + /// WatchID allocator + int mLastWatchID; + + Thread* mThread; + + Mutex mWatchesLock; + + std::list mRemoveList; + + long mFileDescriptorCount; + + bool mAddingWatcher; + + bool isAddingWatcher() const; + + bool pathInWatches( const std::string& path ); + + void addFD(); + + void removeFD(); + + bool availablesFD(); + + private: + void run(); +}; + +} // namespace efsw + +#endif + +#endif -- cgit v1.2.3-55-g6feb