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

📄 mdbdict.cpp

📁 一个自行开发的内存数据管理的包
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// 函数功能: CWorkFlow    构造函数
// 传入参数: 无
// 传出参数: 无
// 函数返回: 无
// 注意事项: 无
//---------------------------------------------------------------------------- 	
void CMdbDict::deleteTableMeta(const char *szTableName)
{
	CDbTableMeta *psTableMeta;
	CDbTableMeta *psPrevTableMeta;
	for(psTableMeta = (CDbTableMeta *)*m_ppsTableMeta,psPrevTableMeta = NULL;psTableMeta != NULL;psPrevTableMeta = psTableMeta,psTableMeta = psTableMeta->m_psNext)
	{
		if(strcasecmp(psTableMeta->m_szTblName,szTableName) == 0)
		{
			break;
		}
	}
	if(psTableMeta == NULL)
	{
		throwException(MDB_EC_NORMAL,MDB_ET_TBL_MISSING,"CMdbDict::delteTableMeta Error,Table %s is not Exist\n",szTableName);
	}
	if(psPrevTableMeta == NULL)
	{
		*m_ppsTableMeta = (CDbTableMeta *)(psTableMeta->m_psNext);
	}
	else
	{
		psPrevTableMeta->m_psNext = (CDbTableMeta *)(psTableMeta->m_psNext);
	}
	
	CDbColumnMeta *psColMeta = psTableMeta->m_psColumns;
	m_pcAlloc->free((void *)psColMeta);
	
	CDbIndexMeta *psIdxMetas = psTableMeta->m_psIndexs;
	for(int i=0;i<psTableMeta->m_nIdxCnt;i++)
	{
		ACE_Based_Pointer<CDbColumnMeta> *psColMetas = psIdxMetas[i].m_ppsColumns;
		m_pcAlloc->free((void *)psColMetas);
	}
	m_pcAlloc->free((void *)psIdxMetas);

	/*<------------modify by mol--------------------->*/
	CProcNode* pcSharePid = NULL;
	while ((pcSharePid = enumSharePid(psTableMeta, pcSharePid)) != NULL)
	{
		deleteSharePid(psTableMeta, pcSharePid);
	}	

/*
	CProcNode *pcProcNode = (CProcNode *)(psTableMeta->m_psSharePids);
	while(pcProcNode)
	{
		CProcNode *pcNextNode = (CProcNode *)(pcProcNode->m_psNext);
		m_pcAlloc->free((void *)pcProcNode);
		pcProcNode = pcNextNode;
	}
*/
	m_pcAlloc->free((void *)psTableMeta);
}

//----------------------------------------------------------------------------
// 函数原型: CWorkFlow::CWorkFlow(int nBucketNum)
// 函数功能: CWorkFlow    构造函数
// 传入参数: 无
// 传出参数: 无
// 函数返回: 无
// 注意事项: 无
//---------------------------------------------------------------------------- 
void CMdbDict::calcInterPresent(int &nInternalType,int &nColLen,const char *pTblName,const char *pColName,int nColType,int m_nColTypeLen)
{
	if(nColType == CT_NUM)
	{
		if(m_nColTypeLen > 0 && m_nColTypeLen < 3)
		{
			nInternalType = CIT_INT8;
			nColLen = sizeof(char);
			return;
		}
		else if(m_nColTypeLen > 2 && m_nColTypeLen < 5)
		{
			nInternalType = CIT_INT16;
			nColLen = sizeof(short);
			return;
		}
		else if(m_nColTypeLen > 4 && m_nColTypeLen < 10)
		{
			nInternalType = CIT_INT32;
			nColLen = sizeof(int);
			return;
		}
		else if(m_nColTypeLen > 9 && m_nColTypeLen < 19)
		{
			nInternalType = CIT_INT64;
			nColLen = sizeof(long long);
			return;
		}
	}
	else if(nColType == CT_CHAR)
	{
		nInternalType = CIT_CHARARRAY;
		nColLen = sizeof(char) * m_nColTypeLen+1;  //加一是给结束0
		return;
	}
	else if(nColType == CT_VARCHAR)
	{
		nInternalType = CIT_STRING;
		nColLen = sizeof(long);   //指针偏移量,long
		return;
	}
	throwException(MDB_EC_NORMAL,MDB_ET_INVALID_COL_TYPE,"CMdbDict::calcInterPresent Error,Invalid ColType,Tbl:%s,Col:%s,ColType:%d\n",pTblName,pColName,nColType);
}

//----------------------------------------------------------------------------
// 函数原型: CWorkFlow::CWorkFlow(int nBucketNum)
// 函数功能: CWorkFlow    构造函数
// 传入参数: 无
// 传出参数: 无
// 函数返回: 无
// 注意事项: 无
//---------------------------------------------------------------------------- 
bool CMdbDict::fieldIsIndexKey(const char *szFieldName,CDbIndexMeta *psIndexMeta)
{
	ACE_Based_Pointer<CDbColumnMeta> *psColumnMetas = psIndexMeta->m_ppsColumns;
	
	for(int i=0;i<psIndexMeta->m_nColCnt;i++)
	{
		CDbColumnMeta *psColumnMeta = psColumnMetas[i];
		if(strcasecmp(psColumnMeta->m_szColName,szFieldName) == 0)
			return true;
	}
	return false;
}

//----------------------------------------------------------------------------
// 函数原型: CWorkFlow::CWorkFlow(int nBucketNum)
// 函数功能: CWorkFlow    构造函数
// 传入参数: 无
// 传出参数: 无
// 函数返回: 无
// 注意事项: 无
//---------------------------------------------------------------------------- 
CProcNode *CMdbDict::insertSharePid(CDbTableMeta *psTableMeta,int nPid)
{
	/*<------------modify by mol--------------------->*/
	for (int i=0; i<TBL_META_MAX_SHARE_PROCESS; i++)
	{
		if (!psTableMeta->m_bShareProcMark[i])
		{
			psTableMeta->m_bShareProcMark[i] = true;
			CProcNode* psNode = new (&psTableMeta->m_shareProcesses[i]) CProcNode();
			psNode->m_nPid = nPid;
			psNode->m_psNext = (CProcNode*)psTableMeta->m_psSharePids;
			psNode->m_ppsPrev = &(psTableMeta->m_psSharePids);
			psTableMeta->m_psSharePids = psNode;

			if ((CProcNode*)psNode->m_psNext != NULL)
				(psNode->m_psNext)->m_ppsPrev = &(psNode->m_psNext);

			return psNode;
		}
	}

	return NULL;
	/*
	void *ptr;
	if((ptr = m_pcAlloc->malloc(sizeof(CProcNode))) == NULL)
	{
	  	throwException(MDB_EC_NORMAL,MDB_ET_MEM_ALLOC_ERROR,"CMdbDict::insertSharePid Error,Can not Alloc Memory for CProcNode,Tbl:%s\n",psTableMeta->m_szTblName);
	}
//	CProcNode *psNode = reinterpret_cast<CProcNode *>(ptr);
	CProcNode *psNode = new (ptr) CProcNode();
	psNode->m_nPid = nPid;
	psNode->m_psNext = (CProcNode *)psTableMeta->m_psSharePids;
  
	//*((ACE_Based_Pointer<CProcNode> *)(psNode->m_ppsPrev)) = psNode->m_psNext;

	psNode->m_ppsPrev = &(psTableMeta->m_psSharePids);
	
	//cerr << (CProcNode *)psNode->m_psNext << endl;
	//cerr << (ACE_Based_Pointer<CProcNode> *)psNode->m_ppsPrev << endl;
	//cerr << &(psTableMeta->m_psSharePids) << endl;
	
	psTableMeta->m_psSharePids = psNode;

	if ((CProcNode*)psNode->m_psNext != NULL)
		(psNode->m_psNext)->m_ppsPrev = &(psNode->m_psNext);
	
	//cerr << "create psNode:" << (void *)psNode << endl;
	return psNode;
	*/
}

//----------------------------------------------------------------------------
// 函数原型: CWorkFlow::CWorkFlow(int nBucketNum)
// 函数功能: CWorkFlow    构造函数
// 传入参数: 无
// 传出参数: 无
// 函数返回: 无
// 注意事项: 无
//---------------------------------------------------------------------------- 
void CMdbDict::deleteSharePid(CDbTableMeta *psTableMeta, CProcNode *psNode)
{
	/*<------------modify by mol--------------------->*/
	*((ACE_Based_Pointer<CProcNode> *)(psNode->m_ppsPrev)) = psNode->m_psNext;
	if((CProcNode *)psNode->m_psNext != NULL)
	{
		(psNode->m_psNext)->m_ppsPrev = psNode->m_ppsPrev;
	}
	psTableMeta->m_bShareProcMark[((char*)psNode-(char*)psTableMeta->m_shareProcesses) / sizeof(CProcNode)] = false;
/*
	//cerr << (CProcNode *)psNode->m_psNext << endl;
	//cerr << (ACE_Based_Pointer<CProcNode> *)psNode->m_ppsPrev << endl;
	
	*((ACE_Based_Pointer<CProcNode> *)(psNode->m_ppsPrev)) = psNode->m_psNext;
	if((CProcNode *)psNode->m_psNext != NULL)
	{
		//cerr << "error" << endl;
		(psNode->m_psNext)->m_ppsPrev = psNode->m_ppsPrev;
	}
	//cerr << "destroy psNode:" << (void *)psNode << endl;
	m_pcAlloc->free((void *)psNode);
*/
}

//----------------------------------------------------------------------------
// 函数原型: CWorkFlow::CWorkFlow(int nBucketNum)
// 函数功能: CWorkFlow    构造函数
// 传入参数: 无
// 传出参数: 无
// 函数返回: 无
// 注意事项: 无
//----------------------------------------------------------------------------
CProcNode * CMdbDict::enumSharePid(CDbTableMeta *psTableMeta,CProcNode *psPrevNode)
{
	CProcNode *psProcNode;
	if(psPrevNode == NULL)
	{
		psProcNode = psTableMeta->m_psSharePids;
	}
	else
	{
		psProcNode = psPrevNode->m_psNext;
	}
	return psProcNode;
}

⌨️ 快捷键说明

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