+
+resource_ptr resource::load_with_path(const std::string& path)
+{
+ std::string extension = stlplus::extension_part(path);
+
+ hash<std::string,resource_weakptr,hash_function>::iterator it;
+ it = resource_table_.find(path);
+ if (it != resource_table_.end())
+ {
+ resource_weakptr rsrc = (*it).second;
+ resource_ptr locked = rsrc.lock();
+ if (locked) return locked;
+ }
+
+ loader_ptr loader;
+ call_registry(extension, loader, lookup);
+ if (loader)
+ {
+ resource_ptr rsrc(loader->load(path));
+ rsrc->set_loader(path, loader);
+ resource_table_[path] = rsrc;
+
+#ifdef USE_HOTLOADING
+ int wd = inotify_add_watch(monitor_fd_, path.c_str(), IN_MODIFY);
+ rsrc->set_watch_descriptor(wd);
+ monitor_lookup_[wd] = path;