⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 engine.h

📁 Emdros is a text database middleware-layer aimed at storage and retrieval of "text plus information
💻 H
字号:
/*------------------------------------------------------------------------Copyright (C) 2002 SIL International. All rights reserved.Distributable under the terms of either the Common Public License or theGNU Lesser General Public License, as specified in the LICENSING.txt file.File: Engine.hResponsibility: Jonathan KewLast reviewed: Not yet.Description:	internal header for the TECkit mapping engine-------------------------------------------------------------------------*//*	2004-03-19	jk	updated for version 2.2 with new match() function	2003-09-23	jk	updated for version 2.1 with new Opt APIs*/#ifndef __Engine_H__#define __Engine_H__#include "TECkit_Engine.h"#include "TECkit_Format.h"const UInt32			kNeedMoreInput	= 0xfffffffeUL;const UInt32			kInvalidChar	= 0xfffffffdUL;const UInt32			kUnmappedChar	= 0xfffffffcUL;class Converter;class Stage	/* abstract base class for pipeline stages, both mapping and normalization passes */{public:						Stage();	virtual				~Stage();		virtual UInt32		getChar() = 0;		virtual void		Reset() = 0;		virtual UInt32		lookaheadCount() const;protected:	friend class Converter;	UInt32*				oBuffer;	long				oBufSize;	long				oBufEnd;	// points to next unused slot in oBuffer	long				oBufPtr;	// points to next char to be returned to caller (if less than oBufEnd)	Stage*				prevStage;};class Normalizer	: public Stage{public:						Normalizer(bool compose);	virtual				~Normalizer();	virtual UInt32		getChar();	virtual void		Reset();protected:		UInt32				process();		void				decompose(UInt32 c);	UInt32				decomposeOne(UInt32& c);		void				compose();	void				generateChar(UInt32 c);	void				appendChar(UInt32 c);	void				insertChar(UInt32 insCh, int insCombClass);	void				growOutBuf();	int					prevCombClass;	long				oBufSafe;		bool				bCompose;};class Pass	: public Stage{public:						Pass(const TableHeader* inTable, Converter* cnv);	virtual				~Pass();		virtual UInt32		getChar();	virtual void		Reset();	virtual UInt32		lookaheadCount() const;protected:	UInt32				DoMapping();	void				outputChar(UInt32 c);	UInt32				inputChar(long inIndex);	void				advanceInput(unsigned int numChars);	long				classMatch(UInt32 classNumber, UInt32 inChar) const;	UInt32				repClassMember(UInt32 classNumber, UInt32 index) const;	struct MatchInfo {		UInt32			classIndex;		int				groupRepeats;		struct {			UInt16			start;			UInt16			limit;		}				matchedSpan;	};	UInt32				match(int index, int repeats, int textLoc);								// returns 0 for no match, 1 for match, or kNeedMoreInput/kInvalidChar	MatchElem*			pattern;	int					patternLength;	int					direction;	MatchInfo			info[256];	int					infoLimit;	int					matchElems;	int					matchedLength;	int					groupRepeats;	struct sgrStackItem {		sgrStackItem*	link;		int				savedGroupRepeats;	};	sgrStackItem*		sgrStack;	Converter*			converter;	const TableHeader*	tableHeader;	const Byte*			pageBase;	const Lookup*		lookupBase;	const Byte*			matchClassBase;	const Byte*			repClassBase;	const Byte*			stringListBase;	const Byte*			stringRuleData;	const Byte*			planeMap;	UInt32*				iBuffer;	long				iBufSize;	long				iBufStart;	// points to earliest valid char in iBuffer	long				iBufEnd;	// points to next unused slot in iBuffer (one past last valid char)	long				iBufPtr;	// points to next char to be fetched from iBuffer (if less than iBufEnd)	bool				bInputIsUnicode;	bool				bOutputIsUnicode;	bool				bSupplementaryChars;	UInt8				numPageMaps;};class Converter	: public Stage{public:						Converter(const Byte* inTable, UInt32 inTableSize, bool inForward,									UInt16 inForm, UInt16 outForm);						~Converter();	TECkit_Status		ConvertBufferOpt(const Byte* inBuffer, UInt32 inLength, UInt32* inUsed,							  Byte* outBuffer, UInt32 outLength, UInt32* outUsed,							  UInt32 inOptions, UInt32* lookaheadCount);	virtual void		Reset();	virtual UInt32		getChar();	bool				IsForward() const;	void				GetFlags(UInt32& sourceFlags, UInt32& targetFlags) const;	bool				GetNamePtr(UInt16 inNameID, const Byte*& outNamePtr, UInt32& outNameLen) const;	class Exception	{	public:						Exception(UInt32 errCode)							: errorCode(errCode)							{ }		UInt32			errorCode;	};	long				creationStatus() const							{ return status; }	static bool			Validate(const Converter* cnv);protected:	friend class Pass;	friend class Normalizer;	UInt32				_getCharFn();	UInt32				_getCharWithSavedBytes();	void				_savePendingBytes();	Byte*				table;		Stage*				finalStage;		const Byte*			data;	UInt32				dataPtr;	UInt32				dataLen;	bool				inputComplete;	Byte				unmappedBehavior;	bool				forward;	Byte				inputForm;	Byte				outputForm;	Byte				savedBytes[8];	UInt32				savedCount;	UInt32				pendingOutputChar;	long				status;		UInt32				warningStatus;};#endif /* __Engine_H__ */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -