bool CWizard::AddFilesToProject(const CString & strProjectName, const CString &strProjectPath, str_vector & array) { wizard.AddSymbol("INSERT_LOCATION_COMMENT","VisualFC AppWizard will insert additional declarations immediately before the previous line."); CString strTemplatePath = info.templatePath; CString strTpl; CString strName; if (!::CreateDirectory(strProjectPath,0)) { MessageBox(NULL,"Unable Create Direct "+ strProjectPath,"WTLAppWizard",MB_OK | MB_ICONWARNING); return false; } ::CreateDirectory(strProjectPath+_T("\\res"),0); for (int i = 0; i < array.size(); i++) { strTpl = array[i]; strTpl.TrimLeft(); strTpl.TrimRight(); if (!strTpl.IsEmpty()) { strName = strTpl; CString strTarget = GetTargetName(strName, strProjectName); CString strTemplate = strTemplatePath + '\\' + strTpl; CString strFile = strProjectPath + '\\' + strTarget; bool bCopyOnly = false; //"true" will only copy the file from strTemplate to strTarget without rendering/adding to the project CString strExt = strName.Right(strName.GetLength()-strName.ReverseFind('.')); if(strExt==".bmp" || strExt==".ico" || strExt==".gif" || strExt==".rtf" || strExt==".css") bCopyOnly = true; if (strExt == _T(".h")) { CString strFileNS = strTarget; strFileNS.MakeUpper(); strFileNS = _T("VFC_")+strFileNS.Left(strFileNS.GetLength()-2)+_T("_H__"); wizard.AddSymbol(_T("FILE_NAME_SYMBOL"),strFileNS+wizard.make_include_guid()+_T("_")); } else { wizard.AddSymbol(_T("FILE_NAME_SYMBOL"),false); } if (bCopyOnly) ::CopyFile(strTemplate,strFile,FALSE); else wizard.make_file(strTemplate,strFile); // don't add these files to the project /* if(strTarget == strProjectName + ".h" || strTarget == strProjectName + "ps.mk" || strTarget == strProjectName + "ps.def") continue; */ } } return true; }
void account_table::recommend(const std::string & str, str_vector & result, const unsigned int & numbers) { int score = 1; while (1) { str_vector temp; int s_len = 0; int s_mod; // score - s_len unsigned int p_cnt = 0; while ( s_len <= score ) { s_mod = score - s_len; get_pos_set(s_mod); //calculate score(s_mod) permutation set // First step cut first and modify if (str.length() > p_cnt) { std::string temp_str = str.substr(0, (int)str.length() - p_cnt); //cut length if (s_mod == 0) temp.push_back(temp_str); // Add string, which is only cut else //Add string; there is modification { for (m_vector::iterator it = TABLE[s_mod-1].begin(); it != TABLE[s_mod-1].end(); ++it) { if (it->front() <= (int)temp_str.length()) //Need to check, whether the modification target position is within string. { change_char_at_pos(temp_str, *it); std::copy (RESULT_BY_CHANGE_CHAR.begin(),RESULT_BY_CHANGE_CHAR.end(),back_inserter(temp)); RESULT_BY_CHANGE_CHAR.clear(); } } } } // Second step modify first and add permutation str_vector pmt = permute(p_cnt); if (pmt.size() != 0) { if ((int)str.length() + p_cnt <= 100) // Length of ID should be less than 100 { if (s_mod == 0) // s_mod is 0 for (str_vector::iterator it = pmt.begin(); it != pmt.end(); ++it) temp.push_back(str + *it); else { for (m_vector::iterator it = TABLE[s_mod-1].begin(); it != TABLE[s_mod-1].end(); ++it) { if (it->front() <= (int)str.length()) { change_char_at_pos(str, *it); for (str_vector::iterator i_it = RESULT_BY_CHANGE_CHAR.begin(); i_it != RESULT_BY_CHANGE_CHAR.end(); ++i_it) for (std::vector<std::string>::iterator ii_it = pmt.begin(); ii_it != pmt.end(); ++ii_it) temp.push_back(*i_it + *ii_it); } RESULT_BY_CHANGE_CHAR.clear(); } } } } p_cnt++; s_len += p_cnt; } std::sort( temp.begin(), temp.end() ); str_vector::iterator it = temp.begin(); while( result.size() < numbers && it != temp.end() ) { iter_m i = this->account_list.find(*it); if (*it != str && i==this->account_list.end()) //not equal to original string, and it can't already exist { if (result.size() != 0 && *it != result.back()) result.push_back(*it); else if (result.size() == 0) result.push_back(*it); } ++it; } if (result.size() == numbers) break; score++; temp.clear(); } return; }