fswatch  1.14.0
fsevents_monitor.hpp
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2014-2018 Enrico M. Crisostomo
3  *
4  * This program is free software; you can redistribute it and/or modify it under
5  * the terms of the GNU General Public License as published by the Free Software
6  * Foundation; either version 3, or (at your option) any later version.
7  *
8  * This program is distributed in the hope that it will be useful, but WITHOUT
9  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
10  * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
11  * details.
12  *
13  * You should have received a copy of the GNU General Public License along with
14  * this program. If not, see <http://www.gnu.org/licenses/>.
15  */
26 #ifndef FSW_FSEVENT_MONITOR_H
27 # define FSW_FSEVENT_MONITOR_H
28 
29 # include "monitor.hpp"
30 # include <CoreServices/CoreServices.h>
31 
32 namespace fsw
33 {
39  class fsevents_monitor : public monitor
40  {
41  public:
42 
62  static constexpr const char *DARWIN_EVENTSTREAM_NO_DEFER = "darwin.eventStream.noDefer";
63 
67  fsevents_monitor(std::vector<std::string> paths,
69  void *context = nullptr);
70  fsevents_monitor(const fsevents_monitor& orig) = delete;
71  fsevents_monitor& operator=(const fsevents_monitor& that) = delete;
72 
73  protected:
81  void run() override;
82 
86  void on_stop() override;
87 
88  private:
89  static void fsevents_callback(ConstFSEventStreamRef streamRef,
90  void *clientCallBackInfo,
91  size_t numEvents,
92  void *eventPaths,
93  const FSEventStreamEventFlags eventFlags[],
94  const FSEventStreamEventId eventIds[]);
95 
96  FSEventStreamRef stream = nullptr;
97  CFRunLoopRef run_loop = nullptr;
98  bool no_defer();
99  };
100 }
101 
102 #endif /* FSW_FSEVENT_MONITOR_H */
OS X FSEvents monitor.
Definition: fsevents_monitor.hpp:39
void * context
Pointer to context data that will be passed to the monitor::callback.
Definition: monitor.hpp:542
Base class of all monitors.
Definition: monitor.hpp:146
static constexpr const char * DARWIN_EVENTSTREAM_NO_DEFER
Custom monitor property used to enable the kFSEventStreamCreateFlagNoDefer flag in the event stream...
Definition: fsevents_monitor.hpp:62
Main namespace of libfswatch.
Definition: event.cpp:23
fsevents_monitor(std::vector< std::string > paths, FSW_EVENT_CALLBACK *callback, void *context=nullptr)
Constructs an instance of this class.
void on_stop() override
Execute an implementation-specific stop handler.
Definition: fsevents_monitor.cpp:165
Header of the fsw::monitor class.
void run() override
Executes the monitor loop.
Definition: fsevents_monitor.cpp:76
std::vector< std::string > paths
List of paths to watch.
Definition: monitor.hpp:522
FSW_EVENT_CALLBACK * callback
Callback to which change events should be notified.
Definition: monitor.hpp:537
void FSW_EVENT_CALLBACK(const std::vector< event > &, void *)
Function definition of an event callback.
Definition: monitor.hpp:60