--- parser3/src/main/pa_pool.C 2001/01/30 11:51:07 1.4 +++ parser3/src/main/pa_pool.C 2002/02/08 07:27:48 1.50 @@ -1,33 +1,79 @@ -/* - $Id: pa_pool.C,v 1.4 2001/01/30 11:51:07 paf Exp $ -*/ +/** @file + Parser: pool class. + + Copyright (c) 2001, 2002 ArtLebedev Group (http://www.artlebedev.com) + Author: Alexander Petrosyan (http://paf.design.ru) -#include + $Id: pa_pool.C,v 1.50 2002/02/08 07:27:48 paf Exp $ +*/ #include "pa_pool.h" +#include "pa_exception.h" +#include "pa_common.h" +#include "pa_sapi.h" +#include "pa_charset.h" + +Pool::Pool(void *astorage) : + fstorage(astorage), fcontext(0), + ftotal_allocated(0), ftotal_times(0), + source_charset(0), client_charset(0) + { +} + +void Pool::fail_alloc(size_t size) const { + SAPI::die("out of pool memory: failed to allocate %u bytes; " + "already allocated on pool: %u bytes in %u times", + size, + ftotal_allocated, ftotal_times); +} + +void Pool::fail_register_cleanup() const { + SAPI::die("failed to register cleanup"); +} -Pool::Pool() : - fglobal_exception(0), - flocal_exception(0) { +void Pool::set_source_charset(Charset& acharset) { + source_charset=&acharset; +} +Charset& Pool::get_source_charset() { + if(!source_charset) + throw Exception(0, 0, + 0, + "no source charset defined yet"); + return *source_charset; } -Pool::~Pool() { +void Pool::set_client_charset(Charset& acharset) { + client_charset=&acharset; +} +Charset& Pool::get_client_charset() { + if(!client_charset) + throw Exception(0, 0, + 0, + "no client charset defined yet"); + return *client_charset; } -Exception *Pool::set_global_exception(Exception *e) { - Exception *r=fglobal_exception; - fglobal_exception=e; - return r; +#ifdef XML + +const char *Pool::transcode_cstr(xmlChar *s) { + return get_source_charset().transcode_cstr(s); } -void Pool::restore_global_exception(Exception *e) { - fglobal_exception=e; + +String& Pool::transcode(xmlChar *s) { + return get_source_charset().transcode(s); } -Exception *Pool::set_local_exception(Exception *e) { - Exception *r=flocal_exception; - flocal_exception=e; - return r; +const char *Pool::transcode_cstr(GdomeDOMString *s) { + return get_source_charset().transcode_cstr(s); } -void Pool::restore_local_exception(Exception *e) { - flocal_exception=e; + +String& Pool::transcode(GdomeDOMString *s) { + return get_source_charset().transcode(s); } + +GdomeDOMString_auto_ptr Pool::transcode(const String& s) { + return get_source_charset().transcode(s); +} + + +#endif