File:  [parser3project] / parser3 / src / main / pa_pool.C
Revision 1.59.2.4: download - view: text, annotated - select for diffs - revision graph
Tue Feb 4 12:08:57 2003 UTC (23 years, 5 months ago) by paf
Diff to: branchpoint 1.59: preferred, unified
removed stupid value_includes.h

/** @file
	Parser: pool class.

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

static const char* IDENT_POOL_C="$Date: 2003/02/04 12:08:57 $";

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

static void *fail_alloc(char *what, size_t size) {
	SAPI::die("out of memory: failed to %s %u bytes",
		what, size);

	// never reached
	return 0;
}

void *pa_malloc(size_t size) {
	if(void *result=malloc(size))
		return result;

	return fail_alloc("allocate", size);
}

void *pa_calloc(size_t size) {
	if(void *result=calloc(1, size))
		return result;

	return fail_alloc("allocate", size);
}
void pa_free(void *ptr) {
	free(ptr);
}

void *pa_realloc(void *ptr, size_t size) {
	if(void *result=realloc(ptr, size))
		return result;

	return fail_alloc("reallocate to", size);
}

/*
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) {
	if(!buf || !size)
		return 0;

	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: