#ifdef USE_PCH #include "pch.h" #else #include #include #include "sitecing/sitespace.h" #include "sitecing/sitecing_util.h" #endif namespace sitecing { sitespace::sitespace(configuration& c) : config(c), factory(c) { } sitespace::~sitespace() { for(sentenced_t::iterator i = sentenced.begin();i!=sentenced.end();++i) { assert((*i)->chickens_used.empty()); delete *i; } } so_component sitespace::fetch(const string& c,sitecing_interface* scif) { execute_sentenced(); string sobase = konforka::normalize_path(c); string sopath = factory.root_so+sobase+".so"; config_options *co_build = config.lookup_config(sobase,config_options::flag_build); if( (!co_build) || co_build->build ) factory.make(sopath); components_t::iterator i = components.find(sopath); if(i!=components.end()) { if(i->second->is_uptodate()) return so_component(i->second,scif); if(i->second->chickens_used.empty()) { delete i->second; }else{ sentenced.push_back(i->second); } components.erase(i); } pair ins = components.insert(components_t::value_type(sopath,new component_so(sopath))); return so_component(ins.first->second,scif); } void sitespace::execute_sentenced() { for(sentenced_t::iterator i = sentenced.begin();i!=sentenced.end();++i) { if((*i)->chickens_used.empty()) { delete *i; sentenced.erase(i); } } } }