--- parser3/src/main/pa_stylesheet_manager.C 2003/09/25 09:15:03 1.18 +++ parser3/src/main/pa_stylesheet_manager.C 2017/02/07 22:00:44 1.31 @@ -1,14 +1,12 @@ /** @file Parser: sql driver manager implementation. - Copyright (c) 2001-2003 ArtLebedev Group (http://www.artlebedev.com) + Copyright (c) 2001-2017 Art. Lebedev Studio (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/09/25 09:15:03 $"; - #include "pa_stylesheet_manager.h" #include "pa_exception.h" #include "pa_common.h" @@ -17,13 +15,14 @@ static const char* IDENT_STYLESHEET_MANA #include "pa_vhash.h" #include "pa_vtable.h" +volatile const char * IDENT_PA_STYLESHEET_MANAGER_C="$Id: pa_stylesheet_manager.C,v 1.31 2017/02/07 22:00:44 moko Exp $" IDENT_PA_STYLESHEET_MANAGER_H; + // globals -Stylesheet_manager stylesheet_manager; +Stylesheet_manager* stylesheet_manager=0; // consts -const time_t SECOND=1; const time_t EXPIRE_UNUSED_CONNECTION_SECONDS=5*60; const time_t CHECK_EXPIRED_CONNECTION_SECONDS=EXPIRE_UNUSED_CONNECTION_SECONDS*2; @@ -37,42 +36,39 @@ static void expire_connections( Stylesheet_manager::connection_cache_type::key_type /*key*/, Stylesheet_manager::connection_cache_type::value_type stack, time_t older_dies) { - for(size_t i=0; itop(); i++) + for(size_t i=0; itop_index(); i++) expire_connection(*stack->get(i), older_dies); } // Stylesheet_connection methods void Stylesheet_connection::close() { - stylesheet_manager.close_connection(ffile_spec, *this); + stylesheet_manager->close_connection(ffile_spec, *this); } // Stylesheet_manager methods Stylesheet_manager::Stylesheet_manager(): prev_expiration_pass_time(0) { - - cache_managers.put(String::Body("stylesheet"), this); } Stylesheet_manager::~Stylesheet_manager() { - connection_cache.for_each(expire_connections, time(0)+SECOND/*=in future=expire all*/); + connection_cache.for_each(expire_connections, time(0)+(time_t)10/*=in future=expire all*/); } -Stylesheet_connection_ptr Stylesheet_manager::get_connection(const String& file_spec) { +Stylesheet_connection_ptr Stylesheet_manager::get_connection(String::Body file_spec) { Stylesheet_connection* result=get_connection_from_cache(file_spec); if(!result) result=new Stylesheet_connection(file_spec); return Stylesheet_connection_ptr(result); } -void Stylesheet_manager::close_connection(const String& file_spec, - Stylesheet_connection& connection) { +void Stylesheet_manager::close_connection(String::Body file_spec, Stylesheet_connection& connection) { put_connection_to_cache(file_spec, connection); } // stylesheet cache /// @todo get rid of memory spending Stack [zeros deep inside got accumulated] -Stylesheet_connection* Stylesheet_manager::get_connection_from_cache(const String& file_spec) { +Stylesheet_connection* Stylesheet_manager::get_connection_from_cache(String::Body file_spec) { SYNCHRONIZED; if(connection_cache_type::value_type connections=connection_cache.get(file_spec)) @@ -85,7 +81,7 @@ Stylesheet_connection* Stylesheet_manage return 0; } -void Stylesheet_manager::put_connection_to_cache(const String& file_spec, +void Stylesheet_manager::put_connection_to_cache(String::Body file_spec, Stylesheet_connection& connection) { SYNCHRONIZED; @@ -101,51 +97,46 @@ void Stylesheet_manager::maybe_expire_ca time_t now=time(0); if(prev_expiration_pass_time(expire_connections, now-EXPIRE_UNUSED_CONNECTION_SECONDS); prev_expiration_pass_time=now; } } -/* -static void add_connection_to_status_cache_table(Array::Item *value, void *info) { - Stylesheet_connection& connection=*static_cast(value); - Table& table=*static_cast(info); +static void add_connection_to_status_cache_table(Stylesheet_connection& connection, Table* table) { if(connection.connected()) { - =table.pool(); - Array& row=*new Array(); + ArrayString& row=*new ArrayString; // file - row+=&connection.file_spec(); + row+=new String(connection.file_spec(), String::L_AS_IS); // time - time_t time_stamp=connection.get_time_used(); - row+=new String(pool.copy(ctime(&time_stamp))); + time_t time_used=connection.get_time_used(); + row+=new String(pa_strdup(ctime(&time_used))); - table+=&row; + *table+=&row; } } -static void add_connections_to_status_cache_table(const Hash::Key& key, Hash::Val *value, void *info) { - Stack& stack=*static_cast(value); - Array_iter iter(stack); - for(int countdown=stack.top_index(); countdown-->=0; ) - add_connection_to_status_cache_table(iter.next(), info); +static void add_connections_to_status_cache_table( + Stylesheet_manager::connection_cache_type::key_type /*key*/, + Stylesheet_manager::connection_cache_type::value_type stack, Table* table) +{ + for(Array_iterator i(*stack); i.has_next(); ) + add_connection_to_status_cache_table(*i.next(), table); } -*/ + Value* Stylesheet_manager::get_status() { VHash* result=new VHash; -/* // cache { - Array& columns=*new Array(); + ArrayString& columns=*new ArrayString; columns+=new String("file"); columns+=new String("time"); - Table& table=*new Table(0, &columns, connection_cache.length()); + Table& table=*new Table(&columns, connection_cache.count()); - connection_cache.for_each(add_connections_to_status_cache_table, &table); + connection_cache.for_each(add_connections_to_status_cache_table, &table); - result.hash(source).put(*new String("cache"), new VTable(&table)); + result->get_hash()->put(*new String("cache"), new VTable(&table)); } -*/ return result; }