Annotation of parser3/src/main/pa_pool.C, revision 1.59.2.4
1.13 paf 1: /** @file
1.14 paf 2: Parser: pool class.
3:
1.59.2.3 paf 4: Copyright (c) 2001-2003 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.59.2.4! paf 8: static const char* IDENT_POOL_C="$Date: 2003/01/31 12:34:37 $";
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.22 parser 14:
1.59.2.1 paf 15: static void *fail_alloc(char *what, size_t size) {
16: SAPI::die("out of memory: failed to %s %u bytes",
17: what, size);
18:
19: // never reached
20: return 0;
21: }
22:
23: void *pa_malloc(size_t size) {
24: if(void *result=malloc(size))
25: return result;
26:
27: return fail_alloc("allocate", size);
28: }
29:
30: void *pa_calloc(size_t size) {
31: if(void *result=calloc(1, size))
32: return result;
33:
34: return fail_alloc("allocate", size);
35: }
36: void pa_free(void *ptr) {
37: free(ptr);
38: }
39:
40: void *pa_realloc(void *ptr, size_t size) {
41: if(void *result=realloc(ptr, size))
42: return result;
43:
44: return fail_alloc("reallocate to", size);
45: }
46:
47: /*
1.22 parser 48: Pool::Pool(void *astorage) :
1.43 paf 49: fstorage(astorage), fcontext(0),
1.46 paf 50: ftotal_allocated(0), ftotal_times(0),
51: source_charset(0), client_charset(0)
1.26 parser 52: {
1.22 parser 53: }
1.56 paf 54:
55: void *Pool::copy(const void *buf, const size_t size) {
1.58 paf 56: if(!buf || !size)
57: return 0;
58:
1.56 paf 59: void *result=malloc(size);
60: memcpy(result, buf, size);
61: return result;
62: }
63:
1.59.2.3 paf 64: char *Pool::copy(const char* cstr) {
1.56 paf 65: if(cstr) {
66: size_t size=strlen(cstr)+1;
67: return (char *)copy(cstr, size);
68: }
69: return 0;
70: }
71:
1.1 paf 72:
1.21 parser 73: void Pool::fail_alloc(size_t size) const {
1.45 paf 74: SAPI::die("out of pool memory: failed to allocate %u bytes; "
75: "already allocated on pool: %u bytes in %u times",
1.41 paf 76: size,
77: ftotal_allocated, ftotal_times);
1.7 paf 78: }
1.21 parser 79:
80: void Pool::fail_register_cleanup() const {
1.41 paf 81: SAPI::die("failed to register cleanup");
1.22 parser 82: }
83:
1.46 paf 84: void Pool::set_source_charset(Charset& acharset) {
85: source_charset=&acharset;
86: }
87: Charset& Pool::get_source_charset() {
88: if(!source_charset)
1.52 paf 89: throw Exception(0,
1.46 paf 90: 0,
91: "no source charset defined yet");
92: return *source_charset;
1.22 parser 93: }
94:
1.46 paf 95: void Pool::set_client_charset(Charset& acharset) {
96: client_charset=&acharset;
97: }
98: Charset& Pool::get_client_charset() {
99: if(!client_charset)
1.52 paf 100: throw Exception(0,
1.46 paf 101: 0,
102: "no client charset defined yet");
103: return *client_charset;
1.22 parser 104: }
105:
1.46 paf 106: #ifdef XML
1.49 paf 107:
1.59.2.3 paf 108: const char* Pool::transcode_cstr(xmlChar *s) {
1.49 paf 109: return get_source_charset().transcode_cstr(s);
110: }
111:
1.57 paf 112: String& Pool::transcode(xmlChar *s
113: #ifndef NO_STRING_ORIGIN
114: , const String *origin
115: #endif
116: ) {
117: return get_source_charset().transcode(s, origin);
1.49 paf 118: }
1.46 paf 119:
1.59.2.3 paf 120: const char* Pool::transcode_cstr(GdomeDOMString *s) {
1.46 paf 121: return get_source_charset().transcode_cstr(s);
122: }
1.22 parser 123:
1.57 paf 124: String& Pool::transcode(GdomeDOMString *s
125: #ifndef NO_STRING_ORIGIN
126: , const String *origin
127: #endif
128: ) {
129: return get_source_charset().transcode(s, origin);
1.53 paf 130: }
131:
1.59.2.3 paf 132: xmlChar *Pool::transcode_buf2xchar(const char* buf, size_t buf_size) {
1.53 paf 133: return get_source_charset().transcode_buf2xchar(buf, buf_size);
1.32 parser 134: }
135:
1.48 paf 136: GdomeDOMString_auto_ptr Pool::transcode(const String& s) {
1.46 paf 137: return get_source_charset().transcode(s);
1.32 parser 138: }
139:
1.26 parser 140: #endif
1.59.2.1 paf 141: */
E-mail: