aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/libs/poco/Foundation/include/Poco/DirectoryWatcher.h
diff options
context:
space:
mode:
authororivej <orivej@yandex-team.ru>2022-02-10 16:45:01 +0300
committerDaniil Cherednik <dcherednik@yandex-team.ru>2022-02-10 16:45:01 +0300
commit2d37894b1b037cf24231090eda8589bbb44fb6fc (patch)
treebe835aa92c6248212e705f25388ebafcf84bc7a1 /contrib/libs/poco/Foundation/include/Poco/DirectoryWatcher.h
parent718c552901d703c502ccbefdfc3c9028d608b947 (diff)
downloadydb-2d37894b1b037cf24231090eda8589bbb44fb6fc.tar.gz
Restoring authorship annotation for <orivej@yandex-team.ru>. Commit 2 of 2.
Diffstat (limited to 'contrib/libs/poco/Foundation/include/Poco/DirectoryWatcher.h')
-rw-r--r--contrib/libs/poco/Foundation/include/Poco/DirectoryWatcher.h464
1 files changed, 232 insertions, 232 deletions
diff --git a/contrib/libs/poco/Foundation/include/Poco/DirectoryWatcher.h b/contrib/libs/poco/Foundation/include/Poco/DirectoryWatcher.h
index 5f853c8d3a..6e3a492fd5 100644
--- a/contrib/libs/poco/Foundation/include/Poco/DirectoryWatcher.h
+++ b/contrib/libs/poco/Foundation/include/Poco/DirectoryWatcher.h
@@ -1,232 +1,232 @@
-//
-// DirectoryWatcher.h
-//
-// Library: Foundation
-// Package: Filesystem
-// Module: DirectoryWatcher
-//
-// Definition of the DirectoryWatcher class.
-//
-// Copyright (c) 2012, Applied Informatics Software Engineering GmbH.
-// and Contributors.
-//
-// SPDX-License-Identifier: BSL-1.0
-//
-
-
-#ifndef Foundation_DirectoryWatcher_INCLUDED
-#define Foundation_DirectoryWatcher_INCLUDED
-
-
-#include "Poco/Foundation.h"
-
-
-#ifndef POCO_NO_INOTIFY
-
-
-#include "Poco/File.h"
-#include "Poco/BasicEvent.h"
-#include "Poco/Runnable.h"
-#include "Poco/Thread.h"
-#include "Poco/AtomicCounter.h"
-
-
-namespace Poco {
-
-
-class DirectoryWatcherStrategy;
-
-
-class Foundation_API DirectoryWatcher: protected Runnable
- /// This class is used to get notifications about changes
- /// to the filesystem, more specifically, to a specific
- /// directory. Changes to a directory are reported via
- /// events.
- ///
- /// A thread will be created that watches the specified
- /// directory for changes. Events are reported in the context
- /// of this thread.
- ///
- /// Note that changes to files in subdirectories of the watched
- /// directory are not reported. Separate DirectoryWatcher objects
- /// must be created for these directories if they should be watched.
- ///
- /// Changes to file attributes are not reported.
- ///
- /// On Windows, this class is implemented using FindFirstChangeNotification()/FindNextChangeNotification().
- /// On Linux, this class is implemented using inotify.
- /// On FreeBSD and Darwin (Mac OS X, iOS), this class uses kevent/kqueue.
- /// On all other platforms, the watched directory is periodically scanned
- /// for changes. This can negatively affect performance if done too often.
- /// Therefore, the interval in which scans are done can be specified in
- /// the constructor. Note that periodic scanning will also be done on FreeBSD
- /// and Darwin if events for changes to files (DW_ITEM_MODIFIED) are enabled.
- ///
- /// DW_ITEM_MOVED_FROM and DW_ITEM_MOVED_TO events will only be reported
- /// on Linux. On other platforms, a file rename or move operation
- /// will be reported via a DW_ITEM_REMOVED and a DW_ITEM_ADDED event.
- /// The order of these two events is not defined.
- ///
- /// An event mask can be specified to enable only certain events.
-{
-public:
- enum DirectoryEventType
- {
- DW_ITEM_ADDED = 1,
- /// A new item has been created and added to the directory.
-
- DW_ITEM_REMOVED = 2,
- /// An item has been removed from the directory.
-
- DW_ITEM_MODIFIED = 4,
- /// An item has been modified.
-
- DW_ITEM_MOVED_FROM = 8,
- /// An item has been renamed or moved. This event delivers the old name.
-
- DW_ITEM_MOVED_TO = 16
- /// An item has been renamed or moved. This event delivers the new name.
- };
-
- enum DirectoryEventMask
- {
- DW_FILTER_ENABLE_ALL = 31,
- /// Enables all event types.
-
- DW_FILTER_DISABLE_ALL = 0
- /// Disables all event types.
- };
-
- enum
- {
- DW_DEFAULT_SCAN_INTERVAL = 5 /// Default scan interval for platforms that don't provide a native notification mechanism.
- };
-
- struct DirectoryEvent
- {
- DirectoryEvent(const File& f, DirectoryEventType ev):
- item(f),
- event(ev)
- {
- }
-
- const File& item; /// The directory or file that has been changed.
- DirectoryEventType event; /// The kind of event.
- };
-
- BasicEvent<const DirectoryEvent> itemAdded;
- /// Fired when a file or directory has been created or added to the directory.
-
- BasicEvent<const DirectoryEvent> itemRemoved;
- /// Fired when a file or directory has been removed from the directory.
-
- BasicEvent<const DirectoryEvent> itemModified;
- /// Fired when a file or directory has been modified.
-
- BasicEvent<const DirectoryEvent> itemMovedFrom;
- /// Fired when a file or directory has been renamed. This event delivers the old name.
-
- BasicEvent<const DirectoryEvent> itemMovedTo;
- /// Fired when a file or directory has been moved. This event delivers the new name.
-
- BasicEvent<const Exception> scanError;
- /// Fired when an error occurs while scanning for changes.
-
- DirectoryWatcher(const std::string& path, int eventMask = DW_FILTER_ENABLE_ALL, int scanInterval = DW_DEFAULT_SCAN_INTERVAL);
- /// Creates a DirectoryWatcher for the directory given in path.
- /// To enable only specific events, an eventMask can be specified by
- /// OR-ing the desired event IDs (e.g., DW_ITEM_ADDED | DW_ITEM_MODIFIED).
- /// On platforms where no native filesystem notifications are available,
- /// scanInterval specifies the interval in seconds between scans
- /// of the directory.
-
- DirectoryWatcher(const File& directory, int eventMask = DW_FILTER_ENABLE_ALL, int scanInterval = DW_DEFAULT_SCAN_INTERVAL);
- /// Creates a DirectoryWatcher for the specified directory
- /// To enable only specific events, an eventMask can be specified by
- /// OR-ing the desired event IDs (e.g., DW_ITEM_ADDED | DW_ITEM_MODIFIED).
- /// On platforms where no native filesystem notifications are available,
- /// scanInterval specifies the interval in seconds between scans
- /// of the directory.
-
- ~DirectoryWatcher();
- /// Destroys the DirectoryWatcher.
-
- void suspendEvents();
- /// Suspends sending of events. Can be called multiple times, but every
- /// call to suspendEvent() must be matched by a call to resumeEvents().
-
- void resumeEvents();
- /// Resumes events, after they have been suspended with a call to suspendEvents().
-
- bool eventsSuspended() const;
- /// Returns true iff events are suspended.
-
- int eventMask() const;
- /// Returns the value of the eventMask passed to the constructor.
-
- int scanInterval() const;
- /// Returns the scan interval in seconds.
-
- const File& directory() const;
- /// Returns the directory being watched.
-
- bool supportsMoveEvents() const;
- /// Returns true iff the platform supports DW_ITEM_MOVED_FROM/itemMovedFrom and
- /// DW_ITEM_MOVED_TO/itemMovedTo events.
-
-protected:
- void init();
- void stop();
- void run();
-
-private:
- DirectoryWatcher();
- DirectoryWatcher(const DirectoryWatcher&);
- DirectoryWatcher& operator = (const DirectoryWatcher&);
-
- Thread _thread;
- File _directory;
- int _eventMask;
- AtomicCounter _eventsSuspended;
- int _scanInterval;
- DirectoryWatcherStrategy* _pStrategy;
-};
-
-
-//
-// inlines
-//
-
-
-inline bool DirectoryWatcher::eventsSuspended() const
-{
- return _eventsSuspended.value() > 0;
-}
-
-
-inline int DirectoryWatcher::eventMask() const
-{
- return _eventMask;
-}
-
-
-inline int DirectoryWatcher::scanInterval() const
-{
- return _scanInterval;
-}
-
-
-inline const File& DirectoryWatcher::directory() const
-{
- return _directory;
-}
-
-
-} // namespace Poco
-
-
-#endif // POCO_NO_INOTIFY
-
-
-#endif // Foundation_DirectoryWatcher_INCLUDED
-
+//
+// DirectoryWatcher.h
+//
+// Library: Foundation
+// Package: Filesystem
+// Module: DirectoryWatcher
+//
+// Definition of the DirectoryWatcher class.
+//
+// Copyright (c) 2012, Applied Informatics Software Engineering GmbH.
+// and Contributors.
+//
+// SPDX-License-Identifier: BSL-1.0
+//
+
+
+#ifndef Foundation_DirectoryWatcher_INCLUDED
+#define Foundation_DirectoryWatcher_INCLUDED
+
+
+#include "Poco/Foundation.h"
+
+
+#ifndef POCO_NO_INOTIFY
+
+
+#include "Poco/File.h"
+#include "Poco/BasicEvent.h"
+#include "Poco/Runnable.h"
+#include "Poco/Thread.h"
+#include "Poco/AtomicCounter.h"
+
+
+namespace Poco {
+
+
+class DirectoryWatcherStrategy;
+
+
+class Foundation_API DirectoryWatcher: protected Runnable
+ /// This class is used to get notifications about changes
+ /// to the filesystem, more specifically, to a specific
+ /// directory. Changes to a directory are reported via
+ /// events.
+ ///
+ /// A thread will be created that watches the specified
+ /// directory for changes. Events are reported in the context
+ /// of this thread.
+ ///
+ /// Note that changes to files in subdirectories of the watched
+ /// directory are not reported. Separate DirectoryWatcher objects
+ /// must be created for these directories if they should be watched.
+ ///
+ /// Changes to file attributes are not reported.
+ ///
+ /// On Windows, this class is implemented using FindFirstChangeNotification()/FindNextChangeNotification().
+ /// On Linux, this class is implemented using inotify.
+ /// On FreeBSD and Darwin (Mac OS X, iOS), this class uses kevent/kqueue.
+ /// On all other platforms, the watched directory is periodically scanned
+ /// for changes. This can negatively affect performance if done too often.
+ /// Therefore, the interval in which scans are done can be specified in
+ /// the constructor. Note that periodic scanning will also be done on FreeBSD
+ /// and Darwin if events for changes to files (DW_ITEM_MODIFIED) are enabled.
+ ///
+ /// DW_ITEM_MOVED_FROM and DW_ITEM_MOVED_TO events will only be reported
+ /// on Linux. On other platforms, a file rename or move operation
+ /// will be reported via a DW_ITEM_REMOVED and a DW_ITEM_ADDED event.
+ /// The order of these two events is not defined.
+ ///
+ /// An event mask can be specified to enable only certain events.
+{
+public:
+ enum DirectoryEventType
+ {
+ DW_ITEM_ADDED = 1,
+ /// A new item has been created and added to the directory.
+
+ DW_ITEM_REMOVED = 2,
+ /// An item has been removed from the directory.
+
+ DW_ITEM_MODIFIED = 4,
+ /// An item has been modified.
+
+ DW_ITEM_MOVED_FROM = 8,
+ /// An item has been renamed or moved. This event delivers the old name.
+
+ DW_ITEM_MOVED_TO = 16
+ /// An item has been renamed or moved. This event delivers the new name.
+ };
+
+ enum DirectoryEventMask
+ {
+ DW_FILTER_ENABLE_ALL = 31,
+ /// Enables all event types.
+
+ DW_FILTER_DISABLE_ALL = 0
+ /// Disables all event types.
+ };
+
+ enum
+ {
+ DW_DEFAULT_SCAN_INTERVAL = 5 /// Default scan interval for platforms that don't provide a native notification mechanism.
+ };
+
+ struct DirectoryEvent
+ {
+ DirectoryEvent(const File& f, DirectoryEventType ev):
+ item(f),
+ event(ev)
+ {
+ }
+
+ const File& item; /// The directory or file that has been changed.
+ DirectoryEventType event; /// The kind of event.
+ };
+
+ BasicEvent<const DirectoryEvent> itemAdded;
+ /// Fired when a file or directory has been created or added to the directory.
+
+ BasicEvent<const DirectoryEvent> itemRemoved;
+ /// Fired when a file or directory has been removed from the directory.
+
+ BasicEvent<const DirectoryEvent> itemModified;
+ /// Fired when a file or directory has been modified.
+
+ BasicEvent<const DirectoryEvent> itemMovedFrom;
+ /// Fired when a file or directory has been renamed. This event delivers the old name.
+
+ BasicEvent<const DirectoryEvent> itemMovedTo;
+ /// Fired when a file or directory has been moved. This event delivers the new name.
+
+ BasicEvent<const Exception> scanError;
+ /// Fired when an error occurs while scanning for changes.
+
+ DirectoryWatcher(const std::string& path, int eventMask = DW_FILTER_ENABLE_ALL, int scanInterval = DW_DEFAULT_SCAN_INTERVAL);
+ /// Creates a DirectoryWatcher for the directory given in path.
+ /// To enable only specific events, an eventMask can be specified by
+ /// OR-ing the desired event IDs (e.g., DW_ITEM_ADDED | DW_ITEM_MODIFIED).
+ /// On platforms where no native filesystem notifications are available,
+ /// scanInterval specifies the interval in seconds between scans
+ /// of the directory.
+
+ DirectoryWatcher(const File& directory, int eventMask = DW_FILTER_ENABLE_ALL, int scanInterval = DW_DEFAULT_SCAN_INTERVAL);
+ /// Creates a DirectoryWatcher for the specified directory
+ /// To enable only specific events, an eventMask can be specified by
+ /// OR-ing the desired event IDs (e.g., DW_ITEM_ADDED | DW_ITEM_MODIFIED).
+ /// On platforms where no native filesystem notifications are available,
+ /// scanInterval specifies the interval in seconds between scans
+ /// of the directory.
+
+ ~DirectoryWatcher();
+ /// Destroys the DirectoryWatcher.
+
+ void suspendEvents();
+ /// Suspends sending of events. Can be called multiple times, but every
+ /// call to suspendEvent() must be matched by a call to resumeEvents().
+
+ void resumeEvents();
+ /// Resumes events, after they have been suspended with a call to suspendEvents().
+
+ bool eventsSuspended() const;
+ /// Returns true iff events are suspended.
+
+ int eventMask() const;
+ /// Returns the value of the eventMask passed to the constructor.
+
+ int scanInterval() const;
+ /// Returns the scan interval in seconds.
+
+ const File& directory() const;
+ /// Returns the directory being watched.
+
+ bool supportsMoveEvents() const;
+ /// Returns true iff the platform supports DW_ITEM_MOVED_FROM/itemMovedFrom and
+ /// DW_ITEM_MOVED_TO/itemMovedTo events.
+
+protected:
+ void init();
+ void stop();
+ void run();
+
+private:
+ DirectoryWatcher();
+ DirectoryWatcher(const DirectoryWatcher&);
+ DirectoryWatcher& operator = (const DirectoryWatcher&);
+
+ Thread _thread;
+ File _directory;
+ int _eventMask;
+ AtomicCounter _eventsSuspended;
+ int _scanInterval;
+ DirectoryWatcherStrategy* _pStrategy;
+};
+
+
+//
+// inlines
+//
+
+
+inline bool DirectoryWatcher::eventsSuspended() const
+{
+ return _eventsSuspended.value() > 0;
+}
+
+
+inline int DirectoryWatcher::eventMask() const
+{
+ return _eventMask;
+}
+
+
+inline int DirectoryWatcher::scanInterval() const
+{
+ return _scanInterval;
+}
+
+
+inline const File& DirectoryWatcher::directory() const
+{
+ return _directory;
+}
+
+
+} // namespace Poco
+
+
+#endif // POCO_NO_INOTIFY
+
+
+#endif // Foundation_DirectoryWatcher_INCLUDED
+