--- parser3/src/main/pa_pool.C 2002/02/08 07:27:48 1.50 +++ parser3/src/main/pa_pool.C 2003/01/22 15:39:08 1.59.2.1 @@ -1,18 +1,51 @@ /** @file Parser: pool class. - Copyright (c) 2001, 2002 ArtLebedev Group (http://www.artlebedev.com) - Author: Alexander Petrosyan (http://paf.design.ru) - - $Id: pa_pool.C,v 1.50 2002/02/08 07:27:48 paf Exp $ + Copyright (c) 2001, 2003 ArtLebedev Group (http://www.artlebedev.com) + Author: Alexandr Petrosian (http://paf.design.ru) */ +static const char* IDENT_POOL_C="$Date: 2003/01/22 15:39:08 $"; + #include "pa_pool.h" #include "pa_exception.h" #include "pa_common.h" #include "pa_sapi.h" -#include "pa_charset.h" +//#include "pa_charset.h" + +static void *fail_alloc(char *what, size_t size) { + SAPI::die("out of memory: failed to %s %u bytes", + what, size); + + // never reached + return 0; +} + +void *pa_malloc(size_t size) { + if(void *result=malloc(size)) + return result; + + return fail_alloc("allocate", size); +} + +void *pa_calloc(size_t size) { + if(void *result=calloc(1, size)) + return result; + + return fail_alloc("allocate", size); +} +void pa_free(void *ptr) { + free(ptr); +} + +void *pa_realloc(void *ptr, size_t size) { + if(void *result=realloc(ptr, size)) + return result; + + return fail_alloc("reallocate to", size); +} +/* Pool::Pool(void *astorage) : fstorage(astorage), fcontext(0), ftotal_allocated(0), ftotal_times(0), @@ -20,6 +53,24 @@ Pool::Pool(void *astorage) : { } +void *Pool::copy(const void *buf, const size_t size) { + if(!buf || !size) + return 0; + + void *result=malloc(size); + memcpy(result, buf, size); + return result; +} + +char *Pool::copy(const char *cstr) { + if(cstr) { + size_t size=strlen(cstr)+1; + return (char *)copy(cstr, size); + } + return 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", @@ -36,7 +87,7 @@ void Pool::set_source_charset(Charset& a } Charset& Pool::get_source_charset() { if(!source_charset) - throw Exception(0, 0, + throw Exception(0, 0, "no source charset defined yet"); return *source_charset; @@ -47,7 +98,7 @@ void Pool::set_client_charset(Charset& a } Charset& Pool::get_client_charset() { if(!client_charset) - throw Exception(0, 0, + throw Exception(0, 0, "no client charset defined yet"); return *client_charset; @@ -59,21 +110,33 @@ const char *Pool::transcode_cstr(xmlChar return get_source_charset().transcode_cstr(s); } -String& Pool::transcode(xmlChar *s) { - return get_source_charset().transcode(s); +String& Pool::transcode(xmlChar *s +#ifndef NO_STRING_ORIGIN + , const String *origin +#endif + ) { + return get_source_charset().transcode(s, origin); } const char *Pool::transcode_cstr(GdomeDOMString *s) { return get_source_charset().transcode_cstr(s); } -String& Pool::transcode(GdomeDOMString *s) { - return get_source_charset().transcode(s); +String& Pool::transcode(GdomeDOMString *s +#ifndef NO_STRING_ORIGIN + , const String *origin +#endif + ) { + return get_source_charset().transcode(s, origin); +} + +xmlChar *Pool::transcode_buf2xchar(const char *buf, size_t buf_size) { + return get_source_charset().transcode_buf2xchar(buf, buf_size); } GdomeDOMString_auto_ptr Pool::transcode(const String& s) { return get_source_charset().transcode(s); } - #endif +*/