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

📄 mdbtbl.cpp

📁 一个自行开发的内存数据管理的包
💻 CPP
📖 第 1 页 / 共 4 页
字号:
		else
		{
			return false;
		}
	}
	else if(psDbColumnMeta->m_nInternalType == CIT_STRING)
	{
		if(nFieldType == FT_STRING && (int)(strlen((char *)pVal)) <= psDbColumnMeta->m_nColTypeLen)
		{
			long nTmp;
			char *pDstData = (char *)pData;
			memcpy((char *)&nTmp,pDstData,sizeof(nTmp));
			char *ptr = pDstData + nTmp;
			
			//cerr << "nTmp:" << nTmp << endl;
			
			if(nTmp)
			{
				m_pcAlloc->free((void *)ptr);
			}
			if((ptr = (char *)(m_pcAlloc->malloc(strlen((char *)pVal)+1))) == NULL)
	  		{
	  			throwException(MDB_EC_NORMAL,MDB_ET_MEM_ALLOC_ERROR,"CMdbTbl::setFieldVal Error,Can not Alloc Memory for varchar,Col:%s\n",psDbColumnMeta->m_szColName);
	  		}
	  		strcpy(ptr,(char *)pVal);
	  		//cerr << "ptr:" << (unsigned long)ptr << endl;
	  		//cerr << "pData:" << (unsigned long)pData << endl;
	  		//cerr << "pDstData:" << (unsigned long)pDstData << endl;
	  		
	  		nTmp = (unsigned long)ptr - (unsigned long)pDstData;
	  		//cerr << "nTmp2:" << nTmp << endl;
	  		memcpy(pDstData,(char *)&nTmp,sizeof(nTmp));
	  		return true;
	  	}
	  	else
	  	{
	  		return false;
	  	}
	  }
	  else
	  {
	  	return false;
	  }
}

//----------------------------------------------------------------------------
// 函数原型: CWorkFlow::CWorkFlow(int nBucketNum)
// 函数功能: CWorkFlow    构造函数
// 传入参数: 无
// 传出参数: 无
// 函数返回: 无
// 注意事项: 无
//---------------------------------------------------------------------------- 	  
void  CMdbTbl::getAutoFieldValByMeta(CRecordNode *pRec,CDbColumnMeta *psColumnMeta,int &nFieldType,void *pVal)
{
	void *pData = pRec->m_psData;
	pData = (char *)pData + psColumnMeta->m_nOffset;
	getFieldVal(pData,psColumnMeta,nFieldType,pVal);
}

//----------------------------------------------------------------------------
// 函数原型: CWorkFlow::CWorkFlow(int nBucketNum)
// 函数功能: CWorkFlow    构造函数
// 传入参数: 无
// 传出参数: 无
// 函数返回: 无
// 注意事项: 无
//---------------------------------------------------------------------------- 	  
void  CMdbTbl::getFieldValByName(CRecordNode *pRec,const char *szFieldName,int nFieldType,void *pVal)
{
	CDbColumnMeta *psColumnMeta;
	if((psColumnMeta = m_pcDbDict->findColumMeta(m_psTableMeta,szFieldName)) == NULL)
	{
		throwException(MDB_EC_NORMAL,MDB_ET_INVALID_COL_NAME,"CMdbTbl::getFieldValByName Error,Can not Find ColumnMeta,Tbl:%s,Col:%s\n",m_psTableMeta->m_szTblName,szFieldName);
	}
	void *pData = pRec->m_psData;
	pData = (char *)pData + psColumnMeta->m_nOffset;
	int nSrcFieldType;
	UVal uVal;
	getFieldVal(pData,psColumnMeta,nSrcFieldType,&uVal);
	if(castVal(nSrcFieldType,&uVal,nFieldType,pVal) == false)
	{
		throwException(MDB_EC_NORMAL,MDB_ET_INVALID_FIELD_TYPE,"CMdbTbl::getFieldValByName Error,InCompatiable FieldType,Tbl:%s,Col:%s\n,FieldType:%d\n",m_psTableMeta->m_szTblName,szFieldName,nFieldType);
	}
}

//----------------------------------------------------------------------------
// 函数原型: CWorkFlow::CWorkFlow(int nBucketNum)
// 函数功能: CWorkFlow    构造函数
// 传入参数: 无
// 传出参数: 无
// 函数返回: 无
// 注意事项: 无
//---------------------------------------------------------------------------- 
bool CMdbTbl::castVal(int nSrcFieldType,void *pSrcFieldVal,int nDstFieldType,void *pDstFieldVal)
{
	if(nDstFieldType == FT_UINT8)
	{
		if(nSrcFieldType == FT_UINT8)
		{
			*(unsigned char *)pDstFieldVal = *(unsigned char *)pSrcFieldVal;
		}
		else if(nSrcFieldType == FT_INT8 && *(char *)pSrcFieldVal >= 0)
		{
			*(unsigned char *)pDstFieldVal = (unsigned char)(*(char *)pSrcFieldVal);
		}
		else if(nSrcFieldType == FT_UINT16 &&  *(unsigned short *)pSrcFieldVal < 256)
		{
			*(unsigned char *)pDstFieldVal = (unsigned char)(*(unsigned short  *)pSrcFieldVal);
		}
		else if(nSrcFieldType == FT_INT16 && *(short *)pSrcFieldVal >= 0 && *(short *)pSrcFieldVal < 256)
		{
			*(unsigned char *)pDstFieldVal = (unsigned char)(*(short  *)pSrcFieldVal);
		}
		else if(nSrcFieldType == FT_UINT32  && *(unsigned int *)pSrcFieldVal < 256)
		{
			*(unsigned char *)pDstFieldVal = (unsigned char)(*(unsigned int  *)pSrcFieldVal);
		}
		else if(nSrcFieldType == FT_INT32 && *(int *)pSrcFieldVal >= 0 && *(int *)pSrcFieldVal < 256)
		{
			*(unsigned char *)pDstFieldVal = (unsigned char)(*(int  *)pSrcFieldVal);
		}
		else if(nSrcFieldType == FT_UINT64  && *(unsigned long long *)pSrcFieldVal < 256)
		{
			*(unsigned char *)pDstFieldVal = (unsigned char)(*(unsigned long long  *)pSrcFieldVal);
		}
		else if(nSrcFieldType == FT_INT64 && *(long long *)pSrcFieldVal >= 0 && *(long long *)pSrcFieldVal < 256)
		{
			*(unsigned char *)pDstFieldVal = (unsigned char)(*(long long  *)pSrcFieldVal);
		}
	}
	else if(nDstFieldType == FT_INT8)
	{
		if(nSrcFieldType == FT_UINT8 && *(unsigned char *)pSrcFieldVal < 128)
		{
			*(char *)pDstFieldVal = (char)(*(unsigned char *)pSrcFieldVal);
		}
		else if(nSrcFieldType == FT_INT8)
		{
			*(char *)pDstFieldVal = *(char *)pSrcFieldVal;
		}
		else if(nSrcFieldType == FT_UINT16 &&  *(unsigned short *)pSrcFieldVal < 128)
		{
			*(char *)pDstFieldVal = (char)(*(unsigned short  *)pSrcFieldVal);
		}
		else if(nSrcFieldType == FT_INT16 && *(short *)pSrcFieldVal >= -128 && *(short *)pSrcFieldVal < 128)
		{
			*(char *)pDstFieldVal = (char)(*(short  *)pSrcFieldVal);
		}
		else if(nSrcFieldType == FT_UINT32  && *(unsigned int *)pSrcFieldVal < 128)
		{
			*(char *)pDstFieldVal = (char)(*(unsigned int  *)pSrcFieldVal);
		}
		else if(nSrcFieldType == FT_INT32 && *(int *)pSrcFieldVal >= -128 && *(int *)pSrcFieldVal < 128)
		{
			*(char *)pDstFieldVal = (char)(*(int  *)pSrcFieldVal);
		}
		else if(nSrcFieldType == FT_UINT64  && *(unsigned long long *)pSrcFieldVal < 128)
		{
			*(char *)pDstFieldVal = (char)(*(unsigned long long  *)pSrcFieldVal);
		}
		else if(nSrcFieldType == FT_INT64 && *(long long *)pSrcFieldVal >= -128 && *(long long *)pSrcFieldVal < 128)
		{
			*(char *)pDstFieldVal = (char)(*(long long  *)pSrcFieldVal);
		}
	}
	else if(nDstFieldType == FT_UINT16)
	{
		if(nSrcFieldType == FT_UINT8)
		{
			*(unsigned short *)pDstFieldVal = (unsigned short)(*(unsigned char *)pSrcFieldVal);
		}
		else if(nSrcFieldType == FT_INT8 && *(char *)pSrcFieldVal >= 0)
		{
			*(unsigned short *)pDstFieldVal = (unsigned short)(*(char *)pSrcFieldVal);
		}
		else if(nSrcFieldType == FT_UINT16)
		{
			*(unsigned short *)pDstFieldVal = *(unsigned short  *)pSrcFieldVal;
		}
		else if(nSrcFieldType == FT_INT16 && *(short *)pSrcFieldVal >= 0)
		{
			*(unsigned short *)pDstFieldVal = (unsigned short)(*(short  *)pSrcFieldVal);
		}
		else if(nSrcFieldType == FT_UINT32  && *(unsigned int *)pSrcFieldVal < 65536)
		{
			*(unsigned short *)pDstFieldVal = (unsigned short)(*(unsigned int  *)pSrcFieldVal);
		}
		else if(nSrcFieldType == FT_INT32 && *(int *)pSrcFieldVal >= 0 && *(int *)pSrcFieldVal < 65536)
		{
			*(unsigned short *)pDstFieldVal = (unsigned short)(*(int  *)pSrcFieldVal);
		}
		else if(nSrcFieldType == FT_UINT64  && *(unsigned long long *)pSrcFieldVal < 65536)
		{
			*(unsigned short *)pDstFieldVal = (unsigned short)(*(unsigned long long  *)pSrcFieldVal);
		}
		else if(nSrcFieldType == FT_INT64 && *(long long *)pSrcFieldVal >= 0 && *(long long *)pSrcFieldVal < 65536)
		{
			*(unsigned short *)pDstFieldVal = (unsigned short)(*(long long  *)pSrcFieldVal);
		}
	}
	else if(nDstFieldType == FT_INT16)
	{
		if(nSrcFieldType == FT_UINT8)
		{
			*(short *)pDstFieldVal = (short)(*(unsigned char *)pSrcFieldVal);
		}
		else if(nSrcFieldType == FT_INT8)
		{
			*(short *)pDstFieldVal = (short)(*(char *)pSrcFieldVal);
		}
		else if(nSrcFieldType == FT_UINT16 &&  *(unsigned short *)pSrcFieldVal < 32768)
		{
			*(short *)pDstFieldVal = (short)(*(unsigned short  *)pSrcFieldVal);
		}
		else if(nSrcFieldType == FT_INT16)
		{
			*(short *)pDstFieldVal =*(short  *)pSrcFieldVal;
		}
		else if(nSrcFieldType == FT_UINT32  && *(unsigned int *)pSrcFieldVal < 32768)
		{
			*(short *)pDstFieldVal = (short)(*(unsigned int  *)pSrcFieldVal);
		}
		else if(nSrcFieldType == FT_INT32 && *(int *)pSrcFieldVal >= -32768 && *(int *)pSrcFieldVal < 32768)
		{
			*(short *)pDstFieldVal = (short)(*(int  *)pSrcFieldVal);
		}
		else if(nSrcFieldType == FT_UINT64  && *(unsigned long long *)pSrcFieldVal < 32768)
		{
			*(short *)pDstFieldVal = (short)(*(unsigned long long  *)pSrcFieldVal);
		}
		else if(nSrcFieldType == FT_INT64 && *(long long *)pSrcFieldVal >= -32768 && *(long long *)pSrcFieldVal < 32768)
		{
			*(short *)pDstFieldVal = (short)(*(long long  *)pSrcFieldVal);
		}
	}
	else if(nDstFieldType == FT_UINT32)
	{
		if(nSrcFieldType == FT_UINT8)
		{
			*(unsigned int *)pDstFieldVal = (unsigned int)(*(unsigned char *)pSrcFieldVal);
		}
		else if(nSrcFieldType == FT_INT8 && *(char *)pSrcFieldVal >= 0)
		{
			*(unsigned int *)pDstFieldVal = (unsigned int)(*(char *)pSrcFieldVal);
		}
		else if(nSrcFieldType == FT_UINT16)
		{
			*(unsigned int *)pDstFieldVal = (unsigned int)(*(unsigned short  *)pSrcFieldVal);
		}
		else if(nSrcFieldType == FT_INT16 && *(short *)pSrcFieldVal >= 0)
		{
			*(unsigned int *)pDstFieldVal = (unsigned int)(*(short  *)pSrcFieldVal);
		}
		else if(nSrcFieldType == FT_UINT32)
		{
			*(unsigned int *)pDstFieldVal = *(unsigned int  *)pSrcFieldVal;
		}
		else if(nSrcFieldType == FT_INT32 && *(int *)pSrcFieldVal >= 0)
		{
			*(unsigned int *)pDstFieldVal = (unsigned int)(*(int  *)pSrcFieldVal);
		}
		else if(nSrcFieldType == FT_UINT64  && *(unsigned long long *)pSrcFieldVal < 4294967296LL)
		{
			*(unsigned int *)pDstFieldVal = (unsigned int)(*(unsigned long long  *)pSrcFieldVal);
		}
		else if(nSrcFieldType == FT_INT64 && *(long long *)pSrcFieldVal >= 0 && *(long long *)pSrcFieldVal < 4294967296LL)
		{
			*(unsigned int *)pDstFieldVal = (unsigned int)(*(long long  *)pSrcFieldVal);
		}
	}
	else if(nDstFieldType == FT_INT32)
	{
		if(nSrcFieldType == FT_UINT8)
		{
			*(int *)pDstFieldVal = (int)(*(unsigned char *)pSrcFieldVal);
		}
		else if(nSrcFieldType == FT_INT8)
		{
			*(int *)pDstFieldVal = (int)(*(char *)pSrcFieldVal);
		}
		else if(nSrcFieldType == FT_UINT16)
		{
			*(int *)pDstFieldVal = (int)(*(unsigned short  *)pSrcFieldVal);
		}
		else if(nSrcFieldType == FT_INT16)
		{
			*(int *)pDstFieldVal =(int)(*(short  *)pSrcFieldVal);
		}
		else if(nSrcFieldType == FT_UINT32  && *(unsigned int *)pSrcFieldVal <= 2147483647)
		{
			*(int *)pDstFieldVal = (int)(*(unsigned int  *)pSrcFieldVal);
		}
		else if(nSrcFieldType == FT_INT32)
		{
			*(int *)pDstFieldVal = *(int  *)pSrcFieldVal;
		}
		else if(nSrcFieldType == FT_UINT64  && *(unsigned long long *)pSrcFieldVal <= 2147483647)
		{
			*(int *)pDstFieldVal = (int)(*(unsigned long long  *)pSrcFieldVal);
		}
		else if(nSrcFieldType == FT_INT64 && *(long long *)pSrcFieldVal >= -2147483647LL-1 && *(long long *)pSrcFieldVal <= 2147483647LL)  //oddy -2147483647-1,for delimiting complier warning
		{
			*(int *)pDstFieldVal = (int)(*(long long  *)pSrcFieldVal);
		}
	}
	else if(nDstFieldType == FT_UINT64)
	{
		if(nSrcFieldType == FT_UINT8)
		{
			*(unsigned long long *)pDstFieldVal = (unsigned long long)(*(unsigned char *)pSrcFieldVal);
		}
		else if(nSrcFieldType == FT_INT8 && *(char *)pSrcFieldVal >= 0)
		{
			*(unsigned long long *)pDstFieldVal = (unsigned long long)(*(char *)pSrcFieldVal);
		}
		else if(nSrcFieldType == FT_UINT16)
		{
			*(unsigned long long *)pDstFieldVal = (unsigned long long)(*(unsigned short  *)pSrcFieldVal);
		}
		else if(nSrcFieldType == FT_INT16 && *(short *)pSrcFieldVal >= 0)
		{
			*(unsigned long long *)pDstFieldVal = (unsigned long long)(*(short  *)pSrcFieldVal);
		}
		else if(nSrcFieldType == FT_UINT32)
		{
			*(unsigned long long *)pDstFieldVal = *(unsigned long long  *)pSrcFieldVal;
		}
		else if(nSrcFieldType == FT_INT32 && *(int *)pSrcFieldVal >= 0)
		{
			*(unsigned long long *)pDstFieldVal = (unsigned long long)(*(int  *)pSrcFieldVal);
		}
		else if(nSrcFieldType == FT_UINT64)
		{
			*(unsigned long long *)pDstFieldVal = *(unsigned long long  *)pSrcFieldVal;
		}
		else if(nSrcFieldType == FT_INT64 && *(long long *)pSrcFieldVal >= 0)
		{
			*(unsigned long long *)pDstFieldVal = (unsigned long long)(*(long long  *)pSrcFieldVal);
		}
	}
	else if(nDstFieldType == FT_INT64)
	{
		if(nSrcFieldType == FT_UINT8)
		{
			*(long long*)pDstFieldVal = (long long)(*(unsigned char *)pSrcFieldVal);
		}
		else if(nSrcFieldType == FT_INT8)
		{
			*(long long*)pDstFieldVal = (long long)(*(char *)pSrcFieldVal);
		}
		else if(nSrcFieldType == FT_UINT16)
		{
			*(long long*)pDstFieldVal = (long long)(*(unsigned short  *)pSrcFieldVal);
		}
		else if(nSrcFieldType == FT_INT16)
		{
			*(long long*)pDstFieldVal =(long long)(*(short  *)pSrcFieldVal);
		}

⌨️ 快捷键说明

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