Exemple #1
0
Node* CCBReader::readNodeGraphFromFile(const char *pCCBFileName, Ref *pOwner, const Size &parentSize)
{
    if (nullptr == pCCBFileName || strlen(pCCBFileName) == 0)
    {
        return nullptr;
    }

    std::string strCCBFileName(pCCBFileName);
    std::string strSuffix(".ccbi");
    // Add ccbi suffix
    if (!CCBReader::endsWith(strCCBFileName.c_str(), strSuffix.c_str()))
    {
        strCCBFileName += strSuffix;
    }

    auto fileUtils = FileUtils::getInstance();
    std::string strPath = fileUtils->fullPathForFilename(strCCBFileName);
    if (strPath.empty()) {
        return nullptr;
    }

    auto dataPtr = std::make_shared<Data>(fileUtils->getDataFromFile(strPath));
    if (dataPtr->isNull()) {
        return nullptr;
    }

    Node *ret =  this->readNodeGraphFromData(dataPtr, pOwner, parentSize);

    return ret;
}
//获取文件列表
bool AnalyseClassCallRelation::GetFileList(vector<ClassSource> &vFileList)
{
	HANDLE file;
	WIN32_FIND_DATA fileData;
//	wchar_t fn[1000];
	char szFilename[1024]; 
//	mbstowcs(fn, m_strProjectPath.c_str() ,999);
	string strFind = m_strProjectPath + string("\\*.*"); 
	file = FindFirstFile(strFind.c_str(), &fileData);

	ClassSource clsClassSource; 
	clsClassSource.Init(); 
	//找到文件返回0  否则返回-1
	while(FindNextFile(file, &fileData))
	{
		// 只对普通文件做处理
		if (!(fileData.dwFileAttributes & FILE_ATTRIBUTE_ARCHIVE))
		{
			continue; 
		}
		sprintf(szFilename, "%s", fileData.cFileName); 
		//判读是头文件 还是源文件  判断名称是否存在
		//获取后缀
		char *pTemp = szFilename + strlen(szFilename); 
		while( pTemp > szFilename && *pTemp-- != '.') ; 
		if (pTemp == szFilename)
		{
			continue; 
		}
		++ pTemp ; 
		string strSuffix(pTemp); 
		if (strSuffix == ".cpp")
		{
			clsClassSource.byHasImplementation = 1; 
		}
		else if(strSuffix == ".h" || strSuffix == ".hpp")
		{
			clsClassSource.byHasHeader = 1;
		}
		else
			continue;
		string strFile(szFilename, pTemp-szFilename);
		clsClassSource.strName = strFile; 
		vector<ClassSource>::iterator iter = vFileList.begin(); 
		while (iter != vFileList.end() )
		{
			if (iter->strName == strFile)
			{
				iter->byHasHeader = clsClassSource.byHasHeader?1:iter->byHasHeader; 
				iter->byHasImplementation = clsClassSource.byHasImplementation?1:iter->byHasImplementation; 
				break;; 
			}
			++ iter; 
		}
		if (iter == vFileList.end() )
		{
			vFileList.push_back(clsClassSource);
			clsClassSource.Init(); 
		}
	}
	return true; 
}