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: