]> Dogcows Code - chaz/yoink/blobdiff - src/moof/resource.hh
remove some deprected stuff
[chaz/yoink] / src / moof / resource.hh
index f8fd4f6327ee9b18ad47b6e0360e0c25115a5d1d..9d991053c21b841be3ebc164e6b538244c80bb82 100644 (file)
@@ -19,7 +19,6 @@
 
 #include "config.h"
 
-#include <cstdio>
 #include <map>
 #include <stdexcept>
 #include <string>
@@ -46,7 +45,7 @@ class resource
 {
 public:
 
-       // FIXME: this won't be necessary once the existing code is modified to
+       // XXX: this won't be necessary once the existing code is modified to
        // use the resource handles
        resource() {}
 
@@ -63,21 +62,10 @@ public:
         * return, this is changed to an absolute path to the resource.
         * \return True if a path to a resource was found, false otherwise.
         */
-       static bool find(const std::string& file);
-
        static std::string find_file(const std::string& name);
 
-       /**
-        * Get the path to a resource of a given name and open it if a resource
-        * was found.
-        * \param path The name of the resource to find.  Upon successful
-        * return, this is changed to an absolute path to the resource.
-        * \param mode The open mode.
-        * \return The FILE* if the resource was found, 0 otherwise.
-        */
-       static FILE* open_file(const std::string& path,
-                                                  const std::string& mode = "rb");
-
+       static std::string find_file(const std::string& name,
+                                                                const std::string& ext);
 
        /**
         * Register a type with the extension of files which this type can
@@ -86,13 +74,11 @@ public:
         * \param extension The file extension.
         */
        template <class T>
-       static void register_type(const std::string& extension)
+       static void register_type(const std::string& extension,
+                                                         const std::string& prefix = "")
        {
-               //if (!type_lookup_) type_lookup_ = type_lookup_ptr(new type_lookup);
-               loader_ptr loader(new specific_loader<T>);
-               //(*type_lookup_)[extension] = loader;
-               //type_lookup_[extension] = loader;
-               manage_loader(extension, loader, true);
+               loader_ptr loader(new specific_loader<T>(prefix));
+               call_registry(extension, loader, set);
        }
 
        /**
@@ -103,14 +89,14 @@ public:
         */
        static void unregister_type(const std::string& extension)
        {
-               //type_lookup_.erase(extension);
-               //type_lookup_->erase(extension);
                loader_ptr loader;
-               manage_loader(extension, loader, true);
+               call_registry(extension, loader, set);
        }
 
 
-       static resource_ptr load(const std::string& path);
+       static resource_ptr load(const std::string& name);
+       static resource_ptr load(const std::string& name,
+                                                        const std::string& ext);
 
        static resource_ptr reload(std::string& path);
 
@@ -169,21 +155,35 @@ public:
         */
        static int reload_as_needed();
 
-       static void print_types();
-
 
 private:
 
+       static resource_ptr load_with_path(const std::string& path);
+
        class loader
        {
        public:
 
+               //loader() {}
+               loader(const std::string& prefix) :
+                       prefix_(prefix) {}
+
                virtual ~loader() {}
 
                virtual resource* load(const std::string& path)
                {
                        return 0;
                }
+
+               const std::string& prefix() const
+               {
+                       return prefix_;
+               }
+
+
+       private:
+
+               std::string prefix_;
        };
 
        typedef boost::shared_ptr<loader> loader_ptr;
@@ -193,6 +193,10 @@ private:
        {
        public:
 
+               //specific_loader() {}
+               specific_loader(const std::string& prefix) :
+                       loader(prefix) {}
+
                virtual resource* load(const std::string& path)
                {
                        log_info("loading resource of type ", typeid(T).name());
@@ -249,8 +253,16 @@ private:
        //typedef boost::shared_ptr<type_lookup> type_lookup_ptr;
        //static type_lookup_ptr type_lookup_;
        //static type_lookup type_lookup_;
+       
+       enum registry_action
+       {
+               lookup,
+               set
+       };
 
-       static void manage_loader(const std::string& extension, loader_ptr& loader, bool set = false);
+       static bool call_registry(const std::string& extension,
+                                                         loader_ptr& loader,
+                                                         registry_action action);
 
 #ifdef USE_HOTLOADING
        int wd_;
@@ -285,6 +297,13 @@ public:
        resource_handle(resource_ptr ptr) :
                resource_(ptr) {}
 
+       explicit resource_handle(const std::string& name) :
+               resource_(resource::load(name)) {}
+
+       resource_handle(const std::string& name, const std::string& ext) :
+               resource_(resource::load(name, ext)) {}
+
+
 
        /**
         * Get whether or not the handle is dereferenceable to the type of this
@@ -342,6 +361,15 @@ public:
        }
 
 
+       /**
+        * Unload the resource associated with this handle.
+        */
+       void unload()
+       {
+               resource_ = resource_ptr();
+       }
+
+
 private:
 
        resource_ptr resource_;
This page took 0.024739 seconds and 4 git commands to generate.