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