X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;ds=sidebyside;f=source%2Ffs%2Ffilemonitor.cpp;fp=source%2Ffs%2Ffilemonitor.cpp;h=5cc990d2d52d6df1b6f3237db6c68b92c1879e20;hb=ffab0509a65f6f32851e64d66a5f7eeb453ab29f;hp=0000000000000000000000000000000000000000;hpb=c7b4b9d6e07b3e32e5b03f41f0640a8273eed848;p=libs%2Fcore.git diff --git a/source/fs/filemonitor.cpp b/source/fs/filemonitor.cpp new file mode 100644 index 0000000..5cc990d --- /dev/null +++ b/source/fs/filemonitor.cpp @@ -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::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