symbian-qemu-0.9.1-12/python-2.6.1/Modules/cjkcodecs/multibytecodec.h
author johnathan.white@2718R8BGH51.accenture.com
Mon, 08 Mar 2010 18:45:03 +0000
changeset 46 b6935a90ca64
parent 1 2fb8b9db1c86
permissions -rw-r--r--
Modify framebuffer and NGA framebuffer to read screen size from board model dtb file. Optimise memory usuage of frame buffer Add example minigui application with hooks to profiler (which writes results to S:\). Modified NGA framebuffer to run its own dfc queue at high priority

/*
 * multibytecodec.h: Common Multibyte Codec Implementation
 *
 * Written by Hye-Shik Chang <perky@FreeBSD.org>
 */

#ifndef _PYTHON_MULTIBYTECODEC_H_
#define _PYTHON_MULTIBYTECODEC_H_
#ifdef __cplusplus
extern "C" {
#endif

#ifdef uint32_t
typedef uint32_t ucs4_t;
#else
typedef unsigned int ucs4_t;
#endif

#ifdef uint16_t
typedef uint16_t ucs2_t, DBCHAR;
#else
typedef unsigned short ucs2_t, DBCHAR;
#endif

typedef union {
	void *p;
	int i;
	unsigned char c[8];
	ucs2_t u2[4];
	ucs4_t u4[2];
} MultibyteCodec_State;

typedef int (*mbcodec_init)(const void *config);
typedef Py_ssize_t (*mbencode_func)(MultibyteCodec_State *state,
			const void *config,
			const Py_UNICODE **inbuf, Py_ssize_t inleft,
			unsigned char **outbuf, Py_ssize_t outleft,
			int flags);
typedef int (*mbencodeinit_func)(MultibyteCodec_State *state,
				 const void *config);
typedef Py_ssize_t (*mbencodereset_func)(MultibyteCodec_State *state,
			const void *config,
			unsigned char **outbuf, Py_ssize_t outleft);
typedef Py_ssize_t (*mbdecode_func)(MultibyteCodec_State *state,
			const void *config,
			const unsigned char **inbuf, Py_ssize_t inleft,
			Py_UNICODE **outbuf, Py_ssize_t outleft);
typedef int (*mbdecodeinit_func)(MultibyteCodec_State *state,
				 const void *config);
typedef Py_ssize_t (*mbdecodereset_func)(MultibyteCodec_State *state,
					 const void *config);

typedef struct {
	const char *encoding;
	const void *config;
	mbcodec_init codecinit;
	mbencode_func encode;
	mbencodeinit_func encinit;
	mbencodereset_func encreset;
	mbdecode_func decode;
	mbdecodeinit_func decinit;
	mbdecodereset_func decreset;
} MultibyteCodec;

typedef struct {
	PyObject_HEAD
	MultibyteCodec *codec;
} MultibyteCodecObject;

#define MultibyteCodec_Check(op) ((op)->ob_type == &MultibyteCodec_Type)

#define _MultibyteStatefulCodec_HEAD		\
	PyObject_HEAD				\
	MultibyteCodec *codec;			\
	MultibyteCodec_State state;		\
	PyObject *errors;
typedef struct {
	_MultibyteStatefulCodec_HEAD
} MultibyteStatefulCodecContext;

#define MAXENCPENDING	2
#define _MultibyteStatefulEncoder_HEAD		\
	_MultibyteStatefulCodec_HEAD		\
	Py_UNICODE pending[MAXENCPENDING];	\
	Py_ssize_t pendingsize;
typedef struct {
	_MultibyteStatefulEncoder_HEAD
} MultibyteStatefulEncoderContext;

#define MAXDECPENDING	8
#define _MultibyteStatefulDecoder_HEAD		\
	_MultibyteStatefulCodec_HEAD		\
	unsigned char pending[MAXDECPENDING];	\
	Py_ssize_t pendingsize;
typedef struct {
	_MultibyteStatefulDecoder_HEAD
} MultibyteStatefulDecoderContext;

typedef struct {
	_MultibyteStatefulEncoder_HEAD
} MultibyteIncrementalEncoderObject;

typedef struct {
	_MultibyteStatefulDecoder_HEAD
} MultibyteIncrementalDecoderObject;

typedef struct {
	_MultibyteStatefulDecoder_HEAD
	PyObject *stream;
} MultibyteStreamReaderObject;

typedef struct {
	_MultibyteStatefulEncoder_HEAD
	PyObject *stream;
} MultibyteStreamWriterObject;

/* positive values for illegal sequences */
#define MBERR_TOOSMALL		(-1) /* insufficient output buffer space */
#define MBERR_TOOFEW		(-2) /* incomplete input buffer */
#define MBERR_INTERNAL		(-3) /* internal runtime error */

#define ERROR_STRICT		(PyObject *)(1)
#define ERROR_IGNORE		(PyObject *)(2)
#define ERROR_REPLACE		(PyObject *)(3)
#define ERROR_ISCUSTOM(p)	((p) < ERROR_STRICT || ERROR_REPLACE < (p))
#define ERROR_DECREF(p) do {			\
	if (p != NULL && ERROR_ISCUSTOM(p)) {	\
		Py_DECREF(p);			\
	}					\
} while (0);

#define MBENC_FLUSH		0x0001 /* encode all characters encodable */
#define MBENC_MAX		MBENC_FLUSH

#ifdef __cplusplus
}
#endif
#endif