]> git.tdb.fi Git - libs/core.git/blobdiff - source/fs/filemonitor.cpp
Add a class for monitoring changes in files
[libs/core.git] / source / fs / filemonitor.cpp
diff --git a/source/fs/filemonitor.cpp b/source/fs/filemonitor.cpp
new file mode 100644 (file)
index 0000000..5cc990d
--- /dev/null
@@ -0,0 +1,51 @@
+#include "filemonitor.h"
+#include "filemonitor_platform.h"
+
+using namespace std;
+
+namespace Msp {
+namespace FS {
+
+FileMonitor::FileMonitor():
+       priv(new Private(*this)),
+       event_disp(0)
+{ }
+
+FileMonitor::~FileMonitor()
+{
+       delete priv;
+}
+
+void FileMonitor::use_event_dispatcher(IO::EventDispatcher &ed)
+{
+       if(event_disp)
+               throw logic_error("event_disp!=0");
+
+       event_disp = &ed;
+       platform_use_event_dispatcher();
+}
+
+void FileMonitor::add_file(const FS::Path &path)
+{
+       MonitoredFile file;
+       file.path = path;
+       file.modified = false;
+       prepare_file(file);
+       files.push_back(file);
+}
+
+void FileMonitor::remove_file(const FS::Path &path)
+{
+       for(vector<MonitoredFile>::iterator i=files.begin(); i!=files.end(); ++i)
+               if(i->path==path)
+               {
+                       cleanup_file(*i);
+                       if(&*i!=&files.back())
+                               *i = files.back();
+                       files.pop_back();
+                       break;
+               }
+}
+
+} // namespace FS
+} // namespace Msp