Annotation of parser3/src/main/pa_pool.C, revision 1.56
1.13 paf 1: /** @file
1.14 paf 2: Parser: pool class.
3:
1.50 paf 4: Copyright (c) 2001, 2002 ArtLebedev Group (http://www.artlebedev.com)
1.51 paf 5: Author: Alexandr Petrosian <paf@design.ru> (http://paf.design.ru)
1.54 paf 6: */
1.14 paf 7:
1.56 ! paf 8: static const char* IDENT_POOL_C="$Date: 2002/08/01 11:41:19 $";
1.1 paf 9:
10: #include "pa_pool.h"
1.7 paf 11: #include "pa_exception.h"
1.22 parser 12: #include "pa_common.h"
1.41 paf 13: #include "pa_sapi.h"
1.46 paf 14: #include "pa_charset.h"
1.22 parser 15:
16: Pool::Pool(void *astorage) :
1.43 paf 17: fstorage(astorage), fcontext(0),
1.46 paf 18: ftotal_allocated(0), ftotal_times(0),
19: source_charset(0), client_charset(0)
1.26 parser 20: {
1.22 parser 21: }
1.56 ! paf 22:
! 23: void *Pool::copy(const void *buf, const size_t size) {
! 24: void *result=malloc(size);
! 25: memcpy(result, buf, size);
! 26: return result;
! 27: }
! 28:
! 29: char *Pool::copy(const char *cstr) {
! 30: if(cstr) {
! 31: size_t size=strlen(cstr)+1;
! 32: return (char *)copy(cstr, size);
! 33: }
! 34: return 0;
! 35: }
! 36:
1.1 paf 37:
1.21 parser 38: void Pool::fail_alloc(size_t size) const {
1.45 paf 39: SAPI::die("out of pool memory: failed to allocate %u bytes; "
40: "already allocated on pool: %u bytes in %u times",
1.41 paf 41: size,
42: ftotal_allocated, ftotal_times);
1.7 paf 43: }
1.21 parser 44:
45: void Pool::fail_register_cleanup() const {
1.41 paf 46: SAPI::die("failed to register cleanup");
1.22 parser 47: }
48:
1.46 paf 49: void Pool::set_source_charset(Charset& acharset) {
50: source_charset=&acharset;
51: }
52: Charset& Pool::get_source_charset() {
53: if(!source_charset)
1.52 paf 54: throw Exception(0,
1.46 paf 55: 0,
56: "no source charset defined yet");
57: return *source_charset;
1.22 parser 58: }
59:
1.46 paf 60: void Pool::set_client_charset(Charset& acharset) {
61: client_charset=&acharset;
62: }
63: Charset& Pool::get_client_charset() {
64: if(!client_charset)
1.52 paf 65: throw Exception(0,
1.46 paf 66: 0,
67: "no client charset defined yet");
68: return *client_charset;
1.22 parser 69: }
70:
1.46 paf 71: #ifdef XML
1.49 paf 72:
73: const char *Pool::transcode_cstr(xmlChar *s) {
74: return get_source_charset().transcode_cstr(s);
75: }
76:
77: String& Pool::transcode(xmlChar *s) {
78: return get_source_charset().transcode(s);
79: }
1.46 paf 80:
1.47 paf 81: const char *Pool::transcode_cstr(GdomeDOMString *s) {
1.46 paf 82: return get_source_charset().transcode_cstr(s);
83: }
1.22 parser 84:
1.47 paf 85: String& Pool::transcode(GdomeDOMString *s) {
1.46 paf 86: return get_source_charset().transcode(s);
1.53 paf 87: }
88:
89: xmlChar *Pool::transcode_buf2xchar(const char *buf, size_t buf_size) {
90: return get_source_charset().transcode_buf2xchar(buf, buf_size);
1.32 parser 91: }
92:
1.48 paf 93: GdomeDOMString_auto_ptr Pool::transcode(const String& s) {
1.46 paf 94: return get_source_charset().transcode(s);
1.32 parser 95: }
96:
1.26 parser 97:
98: #endif
E-mail: