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

📄 mocadef.h

📁 图像处理的压缩算法
💻 H
📖 第 1 页 / 共 2 页
字号:
/*------------------------------------------------------------------------------*
 *	File Name: 	omocadef.h														*
 *	Purpose:	Contains all the macro and the base defination for new MOCA		*
 *	Author:		TD																*
 *  Date:		3/16/2000														*
 *  Copyright Microcal Software Inc. 2000										*
 *																				*
 *	Modification log															*
 *	(Modification in this header are explained in the corresponding				*
 *   Source files to avoid readability problems for the users)					*
 *	TD 3/22/2000    ADD_SUPPORT_FOR_SUBOBJ_ARRAYS								*
 *  TD 6/9/2000		LABTALK_VARNAME_CHECK										*
 *  TD 7/19/2000	DEF_ONUNLOAD_FOR_MOCA_MAINOBJECT_FOR_SAFE_EXIT				*
 *  TD 7/19/2000	BORROWING_TABLES_FROM_SUBOJECT_SELECTED_DYNAMICALLY			*
 *------------------------------------------------------------------------------*/      

#ifndef _MOCADEF_H
#define	_MOCADEF_H
//===============================================================================

#include	"mocadll.h"
#include	"AFXTEMPL.H"
#include	"MOCADeclare.h"


#ifdef		_DEBUG
	#define			MOCA_DEBUG_MSG(_lpcszMsg)			//MessageBox(NULL, (_lpcszMsg), "MOCA Message", MB_OK);
#else		// !_DEBUG
	#define			MOCA_DEBUG_MSG(_lpcszMsg)
#endif		// !_DEBUG




#define		MOCA_ENTRY_POINT(_myMainObjClassName)\
	static	CMOCAObjBase *l_pMainObj = NULL;\
	\
void __MOCA_DELETE_TABLES()\
{\
	if(!l_pMainObj) \
	return;\
	else \
{\
		l_pMainObj->OnUnloadDLL();\
		l_pMainObj->ReleaseAllTables();\
		delete  l_pMainObj;\
		l_pMainObj=NULL; \
		return;\
}\
}\
\
extern "C" DWORD WINAPI MocaEntry( HWND hWnd,\
	LPSTR lpStr1,\
	LPSTR lpStr2,\
	LPMOREAL lpValue,\
	LPCALLBK lpProc,  MOMSG msg) \
	{\
	if (!l_pMainObj) {l_pMainObj = new _myMainObjClassName; if (!l_pMainObj) return EGOR_ERR;\
	else {l_pMainObj->InitAllTables();l_pMainObj->InitAllProps();} } \
	if(msg == EGO_UNINIT ){MOCA_CLEANUP  return EGOR_YES;}\
	return   l_pMainObj->ScriptEntry(hWnd,lpStr1,lpStr2,lpValue,lpProc,msg); \
}



//--------------------------------------------------------------------------------
//Useful Symbolic Constants
#define MAX_TOKEN_SIZE 3072


/////////////////////////////////////////////////////////////////////////////
//
//	MoTable	:	struct for value related table
//
/////////////////////////////////////////////////////////////////////////////


typedef		UINT	MOCASIG;

enum 
{
	// real (and int) properties:
	MOCASig_bpr = 1,		// BOOL (double&) for getting and BOOL (double) for setting

	// string properties:
	MOCASig_bpsz,			// BOOL (LPSTR) and BOOL (LPCSTR) 

	// individual values of real (and int) vectors:
	MOCASig_brvec,			// BOOL (double&, int) for getting (int index is zero-offset),
							// BOOL (double, int) for setting (int index is zero-offset),
							// BOOL (int&) for getting the vector size
							// BOOL (int) for setting the vector size
	
	// individual values of string vectors:
	MOCASig_bszvec,			// BOOL (LPSTR, int) for getting and setting (int index is zero-offset),
							// BOOL (int&) for getting the vector size
							// BOOL (int) for setting the vector size
							// BOOL (int&) for getting the vector size
							// BOOL (int) for setting the vector size

	// INTEGER_VALUES_SETTING_AND_GETTING
	MOCASig_bpn,			// BOOL (int&) for getting and BOOL (int) for setting

	// AUTO_INC_AND_DEC_INDEX_PROPERTIES
	MOCASig_bpIndex,		// BOOL (int&) for getting and BOOL (int) for setting
};
	




typedef	void (	CObject::*MOCA_PPROPFN)(void);

union	MOCAPropertyFunctions
{
	MOCA_PPROPFN		pfn;					// generic

	// specific type safe variants:
	BOOL	(	CObject::*pfn_pr)(double & lpValue);	// MOCASig_bpr	for getting
	BOOL	(	CObject::*pfn_r)(double lpValue);	// MOCASig_bpr	for setting
	
	BOOL	(	CObject::*pfn_pcsz)(LPCSTR lpValue);	// MOCASig_bpsz for setting
	BOOL	(	CObject::*pfn_psz)(LPSTR lpValue);		// MOCASig_bpsz for getting

	BOOL	(	CObject::*pfn_prvec)(double & lpValue, int);	// MOCASig_bvec	for getting individual value
	BOOL	(	CObject::*pfn_rvec)(double dValue, int);	// MOCASig_bvec	for setting individual value

	BOOL	(	CObject::*pfn_pcszvec)(LPCSTR lpValue, int);	// MOCASig_bszvec	for setting individual value
	BOOL	(	CObject::*pfn_pszvec)(LPSTR lpValue, int);	// MOCASig_bszvec	for getting individual value

	BOOL	(	CObject::*pfn_pivecsize)(int &);	// MOCASig_bvec	and MOCASig_bszvec for getting vector size
	BOOL	(	CObject::*pfn_ivecsize)(int);		// MOCASig_bvec	and MOCASig_bszvec for setting vector size

	BOOL	(	CObject::*pfn_pn)(int &);			// MOCASig_bpn	for getting
	BOOL	(	CObject::*pfn_n)(int);				// MOCASig_bpn	for setting
};



//--------------------------------------------------------------------------
// MOCATABLE
//
//--------------------------------------------------------------------------

class CMOCAObjBase; 



typedef struct MOCATable
{
	CMOCAObjBase	*pObj;
	char			*pstr;
	MOCASIG			theSig;			// describes the property			
	MOCA_PPROPFN	pfnGet;			
	MOCA_PPROPFN	pfnSet;
	MOCA_PPROPFN	pfnGetEx;		// used to get 
	MOCA_PPROPFN	pfnSetEx;		// and set vector sizes
	double			dDefaultValue;

} MOCATABLE, *LPMOCATABLE;


///  KERNEL_ID_MAPS
typedef	const	MOCATABLE	*LPCMOCATABLE;



//================================================================================

typedef	MOCATABLE	MOCATABLEENTRY;
typedef const MOCATABLEENTRY *LPCMOCATABLEENTRY;
typedef MOCATABLEENTRY *LPMOCATABLEENTRY;

//THE MACROS
#define MOCA_DECLARE_DYNAMIC(_theClass)									DECLARE_DYNAMIC(_theClass)
#define MOCA_IMPLEMENT_DYNAMIC(_theClass, _theBaseClass)				IMPLEMENT_DYNAMIC(_theClass, _theBaseClass)

//////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////MACROS FOR  PROPERTIES----
//////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////

#define		MOCA_PROP_LAST_ENTRY							{ NULL, NULL, 0, NULL, NULL, NULL, NULL }



/////////////////////////////////////////
#define		MOCA_DECLARE_PROP_MAP(_theClass)	\
				private: LPMOCATABLEENTRY m_lpPropertyMap;\
				private: LPMOCATABLEENTRY m_lpSubObjectMap;	  \
				private: LPMOCATABLEENTRY m_lpMethodFnMap;	  \
				LPCMOCATABLEENTRY		GetPropertyMap();\
				LPCMOCATABLEENTRY		GetSubObjectMap();\
				LPCMOCATABLEENTRY		GetMethodsMap();\
				protected: BOOL	InitPropertyTable();\
				protected: BOOL	InitPropDef();\
				protected: BOOL ReleasePropTable();\
				protected: BOOL ListTable(LPCSTR lpcszPrefix);\
				protected: LPCMOCATABLEENTRY	FindPropertyEntry(LPSTR lpcszSubObjectName, LPCSTR lpcszName, CMOCAObjBase **ppEntryOwner, int nSearchEntryFlag);\
				protected: LPCMOCATABLEENTRY	FindMethodsEntry(LPSTR lpcszSubObjectName, LPCSTR lpcszName, CMOCAObjBase **ppEntryOwner, int nSearchEntryFlag);
///NOTE!!!!!!!!!!!!!! NOTE!!!!!!!!!!!!!!!!!!!!!!!!!!!!! NOTE!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
//The current method will only work with subobjects PROVIDED one INITIALIZES the proprty table first
//This is absolutely necessry. The REASON is that Initpropertytable initiates the subobject table to NULL, 
//WITHOUT performing any checks.  Also if all one wants is just subobjects (or METHODS)one needs to 
//declare an empty property table.  
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 

#define		MOCA_BEGIN_PROP_MAP(_theClass, _theBaseClass)	\
	LPCMOCATABLEENTRY	_theClass::GetPropertyMap() { return  m_lpPropertyMap; } \
	LPCMOCATABLEENTRY	_theClass::GetSubObjectMap() { return  m_lpSubObjectMap; } \
	LPCMOCATABLEENTRY	_theClass::GetMethodsMap() { return  m_lpMethodFnMap; } \
	LPCMOCATABLEENTRY	_theClass::FindPropertyEntry(LPSTR lpszSubObjectName, LPCSTR lpcszName, CMOCAObjBase **ppEntryOwner, int nSearchEntryFlag) { LPCMOCATABLEENTRY lpcTable = GetPropertyMap(); \
	if ( NULL != (lpcTable = FindMapEntryInTable(lpszSubObjectName, lpcszName, lpcTable, (GetSubObjectMap()), ppEntryOwner, PROP_SEARCH_FLAG, nSearchEntryFlag)) ) return lpcTable;\
	return _theBaseClass::FindPropertyEntry(lpszSubObjectName, lpcszName, ppEntryOwner, nSearchEntryFlag); } \
	LPCMOCATABLEENTRY	_theClass::FindMethodsEntry(LPSTR lpszSubObjectName, LPCSTR lpcszName, CMOCAObjBase **ppEntryOwner, int nSearchEntryFlag) { LPCMOCATABLEENTRY lpcTable = _theClass::GetMethodsMap(); \
	if ( NULL != (lpcTable = FindMapEntryInTable(lpszSubObjectName, lpcszName, lpcTable, (GetSubObjectMap()), ppEntryOwner, METH_SEARCH_FLAG, nSearchEntryFlag)) ) return lpcTable;\
	return _theBaseClass::FindMethodsEntry(lpszSubObjectName, lpcszName, ppEntryOwner, nSearchEntryFlag); } \
	BOOL	_theClass::InitPropertyTable() {\
			m_lpSubObjectMap = NULL;		\
			m_lpMethodFnMap  = NULL;		\
			MOCATABLEENTRY _PropertyTable[] = {


#define		MOCA_END_PROP_MAP(_theClass, _theBaseClass)			MOCA_PROP_LAST_ENTRY };\
						   m_lpPropertyMap = MocaCopyTable((LPCMOCATABLEENTRY)_PropertyTable); \
						   return _theBaseClass::InitPropertyTable();}\
							BOOL _theClass::ReleasePropTable(){	if (m_lpPropertyMap != NULL)\
							{MocaReleaseTable(m_lpPropertyMap); m_lpPropertyMap = NULL;}\
							if (m_lpMethodFnMap != NULL)\
							{MocaReleaseTable(m_lpMethodFnMap); m_lpMethodFnMap = NULL;}\
							if (NULL != GetSubObjectMap()) ReleaseSubObjectTable();\
							return _theBaseClass::ReleasePropTable();}\
							BOOL _theClass::InitPropDef(){if (MocaInitPropDef(GetPropertyMap()) && MocaInitSubPropDef(GetSubObjectMap())) \
							return _theBaseClass::InitPropDef(); else return FALSE;}\
							BOOL _theClass::ListTable(LPCSTR lpcszPrefix){ if (ListProperties(lpcszPrefix, GetPropertyMap())  &&  ListMethods(lpcszPrefix, _theClass::GetMethodsMap())){\
							if (ListSubObjects(lpcszPrefix, GetSubObjectMap())){ return _theBaseClass::ListTable(lpcszPrefix);}\
							else return FALSE; } else return FALSE; return TRUE;}

							
//////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////MACROS FOR  SUBOBJECTS---- NOTE SUBOBJECTS TABLE AND GET SUBOBJECTS ARE DEFINED IN THE
////////////////PROPERTIES TABLE MACROS///////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////
#define		MOCA_DECLARE_SUBOBJ_MAP(_theClass)	\
				protected: BOOL InitSubObjects();\
				protected: BOOL	InitSubObjectTable();\
				protected: BOOL ReleaseSubObjectTable();\
				protected: CMOCAObjBase*	InitSubobjectPointer(LPCSTR lpcszSubObjName);

#define		MOCA_BEGIN_SUBOBJ_MAP(_theClass, _theBaseClass)	\
	BOOL	_theClass::InitSubObjectTable() {\
			MOCATABLEENTRY _SubObjectTable[] = {


#define		MOCA_END_SUBOBJ_MAP(_theClass, _theBaseClass)		MOCA_PROP_LAST_ENTRY };\
						   m_lpSubObjectMap = MocaCopyTable((LPCMOCATABLEENTRY)_SubObjectTable); \
						   return _theBaseClass::InitSubObjectTable();}\
						   BOOL _theClass::InitSubObjects() \
							{InitSubObjectsInTable(GetSubObjectMap()); return _theBaseClass::InitSubObjects();}\
							BOOL _theClass::ReleaseSubObjectTable()\
							{ReleaseSubObjectsInTable(GetSubObjectMap());	MocaReleaseTable(m_lpSubObjectMap);\
							m_lpSubObjectMap = NULL; return TRUE;}\
							CMOCAObjBase* _theClass::InitSubobjectPointer(LPCSTR lpcszSubObjName)\
							{CMOCAObjBase* pObj =CreateSubobject(lpcszSubObjName); if(pObj){return pObj;}else\
							{ return  _theBaseClass::InitSubobjectPointer(lpcszSubObjName);}}




#define		MOCA_SUBOBJ_ENTRY(_subobj, _lpcszName) \
{(CMOCAObjBase *)&_subobj, _lpcszName, 0, NULL, NULL, NULL, NULL, (double)1.0 },

#define		MOCA_SUBOBJ_POINTER_ENTRY(_subobj, _lpcszName) \
{(CMOCAObjBase *)_subobj, _lpcszName, 0, NULL, NULL, NULL, NULL, (double)0.0 },

// *	TD 3/22/2000    ADD_SUPPORT_FOR_SUBOBJ_ARRAYS							*

⌨️ 快捷键说明

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