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

📄 makejianpinindexdlg.cpp

📁 中文编码转换
💻 CPP
📖 第 1 页 / 共 4 页
字号:
	AfxMessageBox("Finished!");
}




/*************************************** CJPNode ***************************************/
CJPNode::CJPNode()
{
	m_nOffset = 0xFFFFFFFF;
	m_pbJPCode = NULL;
	m_pNext = NULL;
}

CJPNode::~CJPNode()
{
	if (m_pbJPCode != NULL)
	{
		delete []m_pbJPCode;
	}
}

// Get
int CJPNode::GetOffset() const
{
	return m_nOffset;
}

BYTE* CJPNode::GetJPCode() const
{
	return m_pbJPCode;
}

BYTE CJPNode::GetJPCodeLen() const
{
	ASSERT(m_pbJPCode != NULL);

	return strlen((char*)m_pbJPCode);
}

CJPNode* CJPNode::GetNext() const
{
	return m_pNext;
}

// Set
void CJPNode::SetOffset(const int &nOffset)
{
	m_nOffset = nOffset;
}

void CJPNode::SetJPCode(const BYTE *pbJPCode)
{
	m_pbJPCode = (BYTE*)pbJPCode;
}

void CJPNode::SetNext(const CJPNode *pNext)
{
	m_pNext = (CJPNode*)pNext;
}

// Stat
int CJPNode::IndexLen()
{
	/*
	* Offset:	4
	* JPCode:	n including '\0'
	*/

	ASSERT(m_pbJPCode != NULL);
	return 4 + GetJPCodeLen() + 1;
}
/*************************************** CJPNode ***************************************/


/*************************************** CJPNodeChain ***************************************/
// Constructor and destroyer
CJPNodeChain::CJPNodeChain()
{
	m_pHead = new CJPNode;
	m_pTail = m_pHead;
	m_nObjNum = 0;
	ASSERT(m_pHead != NULL);
}

CJPNodeChain::~CJPNodeChain()
{
	for (CJPNode *pTemp = m_pHead; pTemp != NULL; )
	{
		m_pHead = pTemp->GetNext();
		delete pTemp;
		pTemp = m_pHead;
	}
	m_nObjNum = 0;
}

// Get
int CJPNodeChain::GetObjNum() const
{
	return m_nObjNum;
}

CJPNode* CJPNodeChain::GetFirst() const
{
	return m_pHead->GetNext();
}

// Set

// Insert
void CJPNodeChain::AddTail(CJPNode *pInsNode)
{
	if (pInsNode == NULL)
		return;

	m_pTail->SetNext(pInsNode);
	m_pTail = pInsNode;
	m_pTail->SetNext(NULL);
	++m_nObjNum;
}

// Stat
int CJPNodeChain::IndexLen() const
{
	int nIndexLen = 0;
	for (CJPNode *pNode = GetFirst(); pNode != NULL; pNode = pNode->GetNext())
		nIndexLen += pNode->IndexLen();

	return nIndexLen;
}

/*************************************** ~CJPNodeChain ***************************************/

/*************************************** CNameNode ***************************************/
CNameNode::CNameNode()
{
	m_pszName = NULL;
	m_nMapID = 0xFFFFFFFF;
	m_bLayer = 0xFF;
	m_bType = 0xFF;
	m_pNext = NULL;
}

CNameNode::CNameNode(char *pszName, int nMapID, BYTE bLayer, BYTE bType): m_nMapID(nMapID), m_bLayer(bLayer), m_bType(bType)
{	
	m_pszName = new char[strlen(pszName) + 1];
	memset(m_pszName, 0x0, strlen(pszName) + 1);
	strcpy(m_pszName, pszName);
	m_pNext = NULL;

	// for test
	int iLen = strlen(m_pszName);
}

CNameNode::~CNameNode()
{
	if (m_pszName != NULL)
	{
		delete []m_pszName;
	}
}

// Get
char* CNameNode::GetName() const
{
	return m_pszName;
}

int  CNameNode::GetNameLen() const
{
	if (m_pszName == NULL)
		return 0;
	return strlen(m_pszName);
}

int CNameNode::GetMapID() const
{
	return m_nMapID;
}

BYTE CNameNode::GetLayer() const
{
	return m_bLayer;
}

BYTE CNameNode::GetType() const
{
	return m_bType;
}

CNameNode* CNameNode::GetNext() const
{
	return m_pNext;
}

// Set
void CNameNode::SetNext(CNameNode *pNext)
{
	m_pNext = pNext;
}

// Stat
int CNameNode::IndexLen()
{
	/*
	* NameLen: 1 Bytes
	* Type:    1 Byte
	* Layer:   1 Byte
	* MapID:   4 Bytes
	* Name:    n Bytes
	*/

	return GetNameLen() + sizeof(ST_NameData);
}
/*************************************** ~CNameNode ***************************************/

/*************************************** CNameNodeChain ***************************************/
// Constructor and destroyer
CNameNodeChain::CNameNodeChain()
{
	m_pHead = new CNameNode;
	m_pTail = m_pHead;
	ASSERT(m_pHead != NULL);
	m_nObjNum = 0;
	m_nOffset = 0xFFFFFFFF;
}

CNameNodeChain::~CNameNodeChain()
{
	for (CNameNode *pTemp = m_pHead; pTemp != NULL;)
	{
		m_pHead = pTemp->GetNext();
		delete pTemp;
		pTemp = m_pHead;
	}
	m_nObjNum = 0;
}

// Get
CNameNode* CNameNodeChain::GetFirst() const
{
	return m_pHead->GetNext();
}

int CNameNodeChain::GetOffset() const
{
	return m_nOffset;
}

int CNameNodeChain::GetObjNum() const
{
	return m_nObjNum;
}

// Set
void CNameNodeChain::SetOffset(const int &nOffset)
{
	m_nOffset = nOffset;
}

// Insert
void CNameNodeChain::AddTail(CNameNode *pInsNode)
{
	if (pInsNode == NULL)
		return;

	m_pTail->SetNext(pInsNode);
	m_pTail = pInsNode;
	m_pTail->SetNext(NULL);
	++m_nObjNum;
}

// Stat
int CNameNodeChain::IndexLen() const
{
	int nIndexLen = 0;
	for (CNameNode *pNode = GetFirst(); pNode != NULL; pNode = pNode->GetNext())
		nIndexLen += pNode->IndexLen();

	return nIndexLen;
}

/*************************************** ~CNameNodeChain ***************************************/

/*************************************** Class City ***************************************/
CCity::CCity()
{
	m_nID = 0;
	m_nOffset = 0;
	m_nJPLen = 0;
	m_nPIJPUCLen = 0;
	m_nRdJPUCLen = 0;
	m_nPOICnt = 0;
	m_nRdCnt = 0;
	
	for (int nChIndexCount = 0; nChIndexCount < CHARACTER_INDEX_COUNT; ++nChIndexCount)
	{
		m_pbPack[nChIndexCount] = NULL;
		m_pPIJPPool[nChIndexCount] = new CJPNodeChain;
		m_pRdJPPool[nChIndexCount] = new CJPNodeChain;	
		m_ppPINamePack[nChIndexCount] = new CNameNodeChain;
		m_ppRdNamePack[nChIndexCount] = new CNameNodeChain;

		ASSERT(m_pPIJPPool[nChIndexCount] != NULL);
		ASSERT(m_pRdJPPool[nChIndexCount] != NULL);	
		ASSERT(m_ppPINamePack[nChIndexCount] != NULL);
		ASSERT(m_ppRdNamePack[nChIndexCount] != NULL);			
	}

	for(nChIndexCount = 0; nChIndexCount < CHARACTER_NEWINDEX_COUNT; nChIndexCount++)
	{		
		for(int j = 0; j < CHARACTER_NEWINDEX_COUNT; j++)
		{			
			m_ppPINameNewPack[nChIndexCount][j] = new CNameNodeChain;
			m_ppRdNameNewPack[nChIndexCount][j] = new CNameNodeChain;
			ASSERT(m_ppPINameNewPack[nChIndexCount][j] != NULL);	
			ASSERT(m_ppRdNameNewPack[nChIndexCount][j] != NULL);
		}		
	}
}

CCity::~CCity()
{
	for (int nChIndexCount = 0; nChIndexCount < CHARACTER_INDEX_COUNT; ++nChIndexCount)
	{
		if (m_pPIJPPool[nChIndexCount] != NULL)
			delete m_pPIJPPool[nChIndexCount];

		if (m_pRdJPPool[nChIndexCount] != NULL)
			delete m_pRdJPPool[nChIndexCount];
		
		if (m_ppPINamePack[nChIndexCount] != NULL)
			delete m_ppPINamePack[nChIndexCount];

		if (m_ppRdNamePack[nChIndexCount] != NULL)
			delete m_ppRdNamePack[nChIndexCount];

		if (m_pbPack[nChIndexCount] != NULL)
			delete[] m_pbPack[nChIndexCount];		
	}

	for (nChIndexCount = 0; nChIndexCount < CHARACTER_NEWINDEX_COUNT; ++nChIndexCount)
	{
		for(int j = 0; j < CHARACTER_NEWINDEX_COUNT; j++)
		{			
			if (m_ppPINameNewPack[nChIndexCount][j] != NULL)
				delete m_ppPINameNewPack[nChIndexCount][j];		
			if (m_ppRdNameNewPack[nChIndexCount][j] != NULL)
				delete m_ppRdNameNewPack[nChIndexCount][j];	
		}
	}
}

// Get
int CCity::GetID() const
{
	return m_nID;
}

int CCity::GetOffset() const
{
	return m_nOffset;
}

int CCity::GetCLen() const
{
	return m_nCLen;
}

int CCity::GetUCLen () const
{
	return m_nUCLen;
}

int CCity::GetJPLen() const
{
	return m_nJPLen;
}

ST_PackIndex CCity::GetPackIndex(const int i)
{
	return m_ST_PackIndex[i];
}

BYTE* CCity::GetPackBuffer(const int i)
{
	return m_pbPack[i];
}

int CCity::GetPOICnt()
{
	return m_nPOICnt;
}

int CCity::GetRdCnt()
{
	return m_nRdCnt;
}

int CCity::GetSrcPIJPULen() const
{
	return m_nPIJPUCLen;
}

int CCity::GetSrcRdJPULen() const
{
	return m_nRdJPUCLen;
}

// Set
void CCity::SetID(const int &nID)
{
	m_nID = nID;
}

void CCity::SetOffset(const int &nOffset)
{
	m_nOffset = nOffset;
}

void CCity::SetCLen(const int &nCLen)
{
	m_nCLen = nCLen;
}

void CCity::SetUCLen(const int &nUCLen)
{
	m_nUCLen = nUCLen;
}

void CCity::SetJPLen(const int nJPLen)
{
	m_nJPLen = nJPLen;
}


int CCity::CharacterIndexLen()
{
	/*
	* POIOffset:	4
	* POIObjNum:	4
	* RoadOffset:	4
	* RoadObjNum:	4
	*/
	return 0x10 * CHARACTER_INDEX_COUNT/*24*/;
}


void CCity::ParseJPIndex(const BYTE *pbOldNamePack)
{

}

bool lessName( const ST_Info &m1, const ST_Info &m2 )
{
	if(strcmp(m1.szName, m2.szName) < 0)
		return true;
	else if(strcmp(m1.szName, m2.szName) == 0)
	{
		if(m1.lBreadthID < m2.lBreadthID)
			return true;
		else if(m1.lBreadthID == m2.lBreadthID)
		{
			if(m1.byLayerID < m2.byLayerID)
				return true;
		}
	}

	return false;
}

void CCity::ParseTxt(CString strDir)
{
	CString strPIFilePath, strRdFilePath;
	strPIFilePath.Format("%s\\POITxt\\%d.txt", strDir, GetID());
	strRdFilePath.Format("%s\\RdTxt\\%d.txt", strDir, GetID());
	
	if(_access(strPIFilePath.GetBuffer(0), 0) == 0)
	{
		CStdioFile pi_File(strPIFilePath, CStdioFile::modeRead);		
		char szName[256] = {0, };
		char cpBuffer[256] = {0,};
		while(pi_File.ReadString(cpBuffer, 256))
		{
			if(strlen(cpBuffer) == 2 && cpBuffer[0] == 0x0d && cpBuffer[1] == 0x0a)
				continue;

			m_nPOICnt++;
			CString strContent(cpBuffer);
			memset(cpBuffer, 0x0 , 256);
			if(strContent.GetLength() == 0)
				continue;

			ST_Info st_info;
			ASSERT(st_info.ParsePITxt(strContent));
			memset(szName, 0x0, 256);
			strcpy(szName, st_info.szName);

			
			int nNameLen = 0;
			DeleteQuotation(szName, nNameLen);

			// 得到相邻多音组合
			int nDistLen = -1;

⌨️ 快捷键说明

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