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: