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: