--- parser3/src/main/pa_stylesheet_manager.C 2001/11/05 11:46:29 1.4 +++ parser3/src/main/pa_stylesheet_manager.C 2003/01/21 15:51:15 1.16 @@ -1,17 +1,16 @@ /** @file Parser: sql driver manager implementation. - Copyright (c) 2001 ArtLebedev Group (http://www.artlebedev.com) - Author: Alexander Petrosyan (http://paf.design.ru) - - $Id: pa_stylesheet_manager.C,v 1.4 2001/11/05 11:46:29 paf Exp $ + Copyright (c) 2001, 2003 ArtLebedev Group (http://www.artlebedev.com) + Author: Alexandr Petrosian (http://paf.design.ru) */ #include "pa_config_includes.h" #ifdef XML +static const char* IDENT_STYLESHEET_MANAGER_C="$Date: 2003/01/21 15:51:15 $"; + #include "pa_stylesheet_manager.h" #include "pa_stylesheet_connection.h" -#include "ltdl.h" #include "pa_exception.h" #include "pa_common.h" #include "pa_threads.h" @@ -45,23 +44,21 @@ static void expire_connections(const Has // Stylesheet_manager -Stylesheet_manager::Stylesheet_manager(Pool& apool) : Pooled(apool), +Stylesheet_manager::Stylesheet_manager(Pool& apool) : Cache_manager(apool), connection_cache(apool), prev_expiration_pass_time(0) { - - status_providers->put(*NEW String(pool(), "stylesheet"), this); -} + } Stylesheet_manager::~Stylesheet_manager() { connection_cache.for_each(expire_connections, - reinterpret_cast((time_t)0/*=in past=expire all*/)); + reinterpret_cast(time(0)+1/*=in future=expire all*/)); } -Stylesheet_connection& Stylesheet_manager::get_connection(const String& request_file_spec) { +Stylesheet_connection_ptr Stylesheet_manager::get_connection(const String& request_file_spec) { Pool& pool=request_file_spec.pool(); // request pool // first trying to get cached stylesheet - Stylesheet_connection *result=get_connection_from_cache(request_file_spec); - if(!result) { + Stylesheet_connection *connection=get_connection_from_cache(request_file_spec); + if(!connection) { // then just construct it // make global_file_spec C-string on global pool @@ -71,12 +68,12 @@ Stylesheet_connection& Stylesheet_manage // make global_file_spec string on global pool String& global_file_spec=*new(this->pool()) String(this->pool(), global_file_spec_cstr); - result=new(this->pool()) Stylesheet_connection(this->pool(), global_file_spec); + connection=new(this->pool()) Stylesheet_connection(this->pool(), global_file_spec); } // associate with services[request] (deassociates at close) - result->set_services(&pool); - // return it - return *result; + connection->set_services(&pool); + // return autoclosing object for it + return Stylesheet_connection_ptr(connection); } void Stylesheet_manager::close_connection(const String& file_spec, @@ -92,8 +89,6 @@ void Stylesheet_manager::close_connectio Stylesheet_connection *Stylesheet_manager::get_connection_from_cache(const String& file_spec) { SYNCHRONIZED; - maybe_expire_connection_cache(); - if(Stack *connections=static_cast(connection_cache.get(file_spec))) while(connections->top_index()>=0) { // there are cached stylesheets to that 'file_spec' Stylesheet_connection *result=static_cast(connections->pop()); @@ -116,7 +111,7 @@ void Stylesheet_manager::put_connection_ connections->push(&connection); } -void Stylesheet_manager::maybe_expire_connection_cache() { +void Stylesheet_manager::maybe_expire_cache() { time_t now=time(0); if(prev_expiration_pass_time=0; ) add_connection_to_status_cache_table(iter.next(), info); } - Value& Stylesheet_manager::get_status(Pool& pool, const String *source) { VHash& result=*new(pool) VHash(pool);