File:  [parser3project] / parser3 / src / main / pa_pool.C
Revision 1.57: download - view: text, annotated - select for diffs - revision graph
Tue Oct 15 15:12:57 2002 UTC (23 years, 9 months ago) by paf
Branches: MAIN
CVS tags: release_3_0_0006, HEAD
xml->parser strings now have origin, which points to place where value left xml library and came to parser: place of dom field extraction/call

/** @file
	Parser: pool class.

	Copyright (c) 2001, 2002 ArtLebedev Group (http://www.artlebedev.com)
	Author: Alexandr Petrosian <paf@design.ru> (http://paf.design.ru)
*/

static const char* IDENT_POOL_C="$Date: 2002/10/15 15:12:57 $";

#include "pa_pool.h"
#include "pa_exception.h"
#include "pa_common.h"
#include "pa_sapi.h"
#include "pa_charset.h"

Pool::Pool(void *astorage) : 
	fstorage(astorage), fcontext(0), 
	ftotal_allocated(0), ftotal_times(0),
	source_charset(0), client_charset(0)
	{
}

void *Pool::copy(const void *buf, const size_t size) {
	void *result=malloc(size);
	memcpy(result, buf, size);
	return result;
}

char *Pool::copy(const char *cstr) {
	if(cstr) {
		size_t size=strlen(cstr)+1;
		return (char *)copy(cstr, size);
	}
	return 0;
}


void Pool::fail_alloc(size_t size) const {
	SAPI::die("out of pool memory: failed to allocate %u bytes; "
		"already allocated on pool: %u bytes in %u times", 
		size, 
		ftotal_allocated, ftotal_times);
}

void Pool::fail_register_cleanup() const {
	SAPI::die("failed to register cleanup");
}

void Pool::set_source_charset(Charset& acharset) { 
	source_charset=&acharset; 
}
Charset& Pool::get_source_charset() { 
	if(!source_charset)
		throw Exception(0,
			0,
			"no source charset defined yet");
	return *source_charset; 
}

void Pool::set_client_charset(Charset& acharset) { 
	client_charset=&acharset; 
}
Charset& Pool::get_client_charset() { 
	if(!client_charset)
		throw Exception(0,
			0,
			"no client charset defined yet");
	return *client_charset; 
}

#ifdef XML

const char *Pool::transcode_cstr(xmlChar *s) {
	return get_source_charset().transcode_cstr(s); 
}

String& Pool::transcode(xmlChar *s
#ifndef NO_STRING_ORIGIN
		, const String *origin
#endif
						) {
	return get_source_charset().transcode(s, origin); 
}

const char *Pool::transcode_cstr(GdomeDOMString *s) { 
	return get_source_charset().transcode_cstr(s); 
}

String& Pool::transcode(GdomeDOMString *s
#ifndef NO_STRING_ORIGIN
		, const String *origin
#endif
	) { 
	return get_source_charset().transcode(s, origin);
}

xmlChar *Pool::transcode_buf2xchar(const char *buf, size_t buf_size) {
	return get_source_charset().transcode_buf2xchar(buf, buf_size); 
}

GdomeDOMString_auto_ptr Pool::transcode(const String& s) {
	return get_source_charset().transcode(s); 
}


#endif

E-mail: