Annotation of parser3/src/main/pa_memory.C, revision 1.1.2.1
1.1.2.1 ! paf 1: /** @file
! 2: Parser: memory reference counting classes.
! 3:
! 4: Copyright (c) 2001-2003 ArtLebedev Group (http://www.artlebedev.com)
! 5: Author: Alexandr Petrosian <paf@design.ru> (http://paf.design.ru)
! 6: */
! 7:
! 8: static const char* IDENT_MEMORY_C="$Date: 2003/02/04 12:08:57 $";
! 9:
! 10: #include "pa_pool.h"
! 11: #include "pa_exception.h"
! 12: #include "pa_common.h"
! 13: #include "pa_sapi.h"
! 14:
! 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: /*
! 48: Pool::Pool(void *astorage) :
! 49: fstorage(astorage), fcontext(0),
! 50: ftotal_allocated(0), ftotal_times(0),
! 51: source_charset(0), client_charset(0)
! 52: {
! 53: }
! 54:
! 55: void *Pool::copy(const void *buf, const size_t size) {
! 56: if(!buf || !size)
! 57: return 0;
! 58:
! 59: void *result=malloc(size);
! 60: memcpy(result, buf, size);
! 61: return result;
! 62: }
! 63:
! 64: char *Pool::copy(const char* cstr) {
! 65: if(cstr) {
! 66: size_t size=strlen(cstr)+1;
! 67: return (char *)copy(cstr, size);
! 68: }
! 69: return 0;
! 70: }
! 71:
! 72:
! 73: void Pool::fail_alloc(size_t size) const {
! 74: SAPI::die("out of pool memory: failed to allocate %u bytes; "
! 75: "already allocated on pool: %u bytes in %u times",
! 76: size,
! 77: ftotal_allocated, ftotal_times);
! 78: }
! 79:
! 80: void Pool::fail_register_cleanup() const {
! 81: SAPI::die("failed to register cleanup");
! 82: }
! 83:
! 84: void Pool::set_source_charset(Charset& acharset) {
! 85: source_charset=&acharset;
! 86: }
! 87: Charset& Pool::get_source_charset() {
! 88: if(!source_charset)
! 89: throw Exception(0,
! 90: 0,
! 91: "no source charset defined yet");
! 92: return *source_charset;
! 93: }
! 94:
! 95: void Pool::set_client_charset(Charset& acharset) {
! 96: client_charset=&acharset;
! 97: }
! 98: Charset& Pool::get_client_charset() {
! 99: if(!client_charset)
! 100: throw Exception(0,
! 101: 0,
! 102: "no client charset defined yet");
! 103: return *client_charset;
! 104: }
! 105:
! 106: #ifdef XML
! 107:
! 108: const char* Pool::transcode_cstr(xmlChar *s) {
! 109: return get_source_charset().transcode_cstr(s);
! 110: }
! 111:
! 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);
! 118: }
! 119:
! 120: const char* Pool::transcode_cstr(GdomeDOMString *s) {
! 121: return get_source_charset().transcode_cstr(s);
! 122: }
! 123:
! 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);
! 130: }
! 131:
! 132: xmlChar *Pool::transcode_buf2xchar(const char* buf, size_t buf_size) {
! 133: return get_source_charset().transcode_buf2xchar(buf, buf_size);
! 134: }
! 135:
! 136: GdomeDOMString_auto_ptr Pool::transcode(const String& s) {
! 137: return get_source_charset().transcode(s);
! 138: }
! 139:
! 140: #endif
! 141: */
E-mail: