From: Charles McGarvey Date: Tue, 15 Jun 2010 18:45:46 +0000 (-0600) Subject: begin cleaning up resource management X-Git-Url: https://git.dogcows.com/gitweb?a=commitdiff_plain;h=bc795376d093ee097040f029b891b5435eb3bd21;p=chaz%2Fyoink begin cleaning up resource management --- diff --git a/src/Main.cc b/src/Main.cc index 8361b39..6cdadaf 100644 --- a/src/Main.cc +++ b/src/Main.cc @@ -277,112 +277,11 @@ void goodbye() } -#include - -#include - -class MyAsset -{ -public: - MyAsset(const std::string& path) - { - moof::log_info("MyAsset loading:", path); - - char buffer[1024]; - - std::ifstream stream(path.c_str()); - stream.getline(buffer, sizeof(buffer)); - str = buffer; - stream.close(); - - cool(); - } - - void cool() - { - moof::log_info("MyAsset COOL:", str); - } - - void groovy() - { - moof::log_info("MyAsset GROOVY!!!!", str); - } - - std::string str; -}; - -typedef moof::resource_handle MyAsset_handle; - -class AnotherAsset -{ -public: - AnotherAsset(const std::string& path, double d = 5.0) - { - moof::log_info("AnotherAsset loading:", path); - dude = d; - } - - - void cool() - { - moof::log_info("AnotherAsset cool", dude); - } - - void groovy() - { - moof::log_info("AnotherAsset GROOVY!!!!", dude); - } - - double dude; -}; - - int main(int argc, char* argv[]) { - moof::resource::register_type("mine"); - - //moof::resource::add_type("k"); - - //{ - //moof::resource_ptr myAsset = moof::resource::load(assetName, - //"prefix", "mine"); - - //MyAsset_handle aCopy = myAsset; - - //MyAsset_handle copy2 = moof::resource::load(assetName, "asdfas", "mine"); - - ////if (myAsset->check()) myAsset->get()->cool(); - //myAsset->get()->cool(); - ////myAsset->get()->groovy(); - - //aCopy.get()->cool(); - //copy2.get()->cool(); - - //log_info("rsrc ptr:", moof::resource::load(assetName, "", "mine")); - //} - //log_info("rsrc ptr:", moof::resource::load(assetName, "", "k")); - //moof::resource::load(assetName, "", "mine")->get()->cool(); - - ////if (myAsset) myAsset.get()->cool(); - ////else moof::log_error("asset not obtained..."); - - MyAsset_handle myAsset = moof::resource::load("/home/chaz/meh.mine"); - MyAsset* asset = myAsset.get(); - if (asset) asset->cool(); - else moof::log_warning("no asset obtained!!"); - - //moof::timer reloadTimer( - //boost::bind(&moof::resource::reload_as_needed), - //SCALAR(2.0), - //moof::timer::repeat); - - for (;;) - { - if (myAsset) myAsset.get()->cool(); - moof::resource::reload_as_needed(); - sleep(1); - } - + moof::timer reloadTimer(boost::bind(&moof::resource::reload_as_needed), + SCALAR(2.0), + moof::timer::repeat); if (argc > 1) { diff --git a/src/moof/resource.cc b/src/moof/resource.cc index 5cd7536..d22ae21 100644 --- a/src/moof/resource.cc +++ b/src/moof/resource.cc @@ -9,8 +9,15 @@ * **************************************************************************/ +#include "../config.h" + #include +#ifdef USE_HOTLOADING +#include +#include +#endif + #include #include @@ -19,14 +26,6 @@ #include "hash.hh" #include "resource.hh" -#if HAVE_CONFIG_H -#include "../config.h" -#endif - -#ifdef USE_HOTLOADING -#include -#include -#endif #ifndef BUF_SIZE #define BUF_SIZE 4096 @@ -36,7 +35,7 @@ namespace moof { -static std::vector search_paths_; +static std::string search_paths_; typedef boost::weak_ptr resource_weakptr; static hash resource_table_; @@ -185,66 +184,19 @@ void resource::reload() void resource::add_search_paths(const std::string& paths) { - std::vector pathList; - boost::split(pathList, paths, boost::is_any_of(":")); - - add_search_paths(pathList); -} - -void resource::add_search_paths(const std::vector& pathList) -{ - std::vector::const_iterator it; - for (it = pathList.begin(); it != pathList.end(); ++it) - { - std::string path(*it); - - ASSERT(!path.empty() && "empty search path string"); - - // add a slash if there isn't one already - if (*path.rbegin() != '/') path += '/'; - -#if defined(_WIN32) - //boost::replace_all(path, "/", "\\"); -#endif - - search_paths_.push_back(path); - log_info << "added search path " << path << std::endl; - } + search_paths_ = paths; } bool resource::find(const std::string& path) { - FILE* file = open_file(path); - if (file) - { - fclose(file); - return true; - } - - return false; + return !stlplus::lookup(path, search_paths_, ":").empty(); } FILE* resource::open_file(const std::string& path, const std::string& mode) { -#if defined(_WIN32) - // windows always has to be a little different - //boost::replace_all(path, "/", "\\"); -#endif - - std::vector::iterator it; - for (it = search_paths_.begin(); it != search_paths_.end(); ++it) - { - // check path relative to search path - std::string complete_path(*it); - complete_path += path; - - FILE* file = fopen(complete_path.c_str(), mode.c_str()); - if (file) return file; - } - - // last ditch effort; maybe it's already a path to a valid resource - return fopen(path.c_str(), mode.c_str()); + std::string file = stlplus::lookup(path, search_paths_, ":"); + return fopen(file.c_str(), mode.c_str()); } diff --git a/src/moof/resource.hh b/src/moof/resource.hh index 7616d69..a269a2d 100644 --- a/src/moof/resource.hh +++ b/src/moof/resource.hh @@ -17,6 +17,8 @@ * Interface for textures, sounds, and other types of resources. */ +#include "../config.h" + #include #include #include @@ -28,10 +30,6 @@ #include -#if HAVE_CONFIG_H -#include "../config.h" -#endif - namespace moof { @@ -58,12 +56,6 @@ public: */ static void add_search_paths(const std::string& paths); - /** - * Add directories to search when looking for resource files. - * \param pathList The list of directory paths. - */ - static void add_search_paths(const std::vector& pathList); - /** * Get the path to a resource of a given name.