bool is_source_file(const std::string& filename, std::string &fixed_file_name) { StringVec_t extensions; extensions.push_back(".cpp"); extensions.push_back(".cxx"); extensions.push_back(".cc"); extensions.push_back(".c"); for(size_t n=0; n<extensions.size(); ++n) { if ( ends_with(filename, extensions.at(n)) ) { fixed_file_name = filename; #ifdef _WIN32 std::replace(fixed_file_name.begin(), fixed_file_name.end(), '/', '\\'); #endif char* ret = normalize_path(fixed_file_name.c_str(), fixed_file_name.length()); fixed_file_name = ret; free(ret); // rtrim fixed_file_name.erase(0, fixed_file_name.find_first_not_of("\t\r\v\n\" ")); // ltrim fixed_file_name.erase(fixed_file_name.find_last_not_of("\t\r\v\n\" ")+1); return true; } } fixed_file_name.clear(); return false; }
GAFObject* GAFObject::getObjectByName(const std::string& name) { if (name.empty()) { return nullptr; } std::stringstream ss(name); std::string item; typedef std::vector<std::string> StringVec_t; StringVec_t elems; while (std::getline(ss, item, '.')) { elems.push_back(item); } GAFObject* retval = nullptr; if (!elems.empty()) { const NamedParts_t& np = m_timeline->getNamedParts(); NamedParts_t::const_iterator it = np.find(elems[0]); if (it != np.end()) { retval = m_displayList[it->second]; if (elems.size() == 1) { return retval; } StringVec_t::iterator begIt = elems.begin() + 1; while (begIt != elems.end()) { const NamedParts_t& np = retval->m_timeline->getNamedParts(); NamedParts_t::const_iterator it = np.find(*begIt); if (it != np.end()) { retval = retval->m_displayList[it->second]; } else { // Sequence is incorrect //break; // It is better to return nil instead of the last found object in a chain return nullptr; } ++begIt; } return retval; } } return nullptr; }