📄 database.cxx
字号:
const std::vector<std::string>&CdlPackagesDatabaseBody::get_targets(void) const{ CYG_REPORT_FUNCNAME("CdlPackagesDatabase::get_targets"); CYG_PRECONDITION_THISC(); CYG_REPORT_RETURN(); return target_names;}boolCdlPackagesDatabaseBody::is_known_target(std::string name) const{ CYG_REPORT_FUNCNAMETYPE("CdlPackagesDatabase::is_known_target", "result %d"); CYG_REPORT_FUNCARG1XV(this); CYG_PRECONDITION_THISC(); bool result = false; if (std::find(target_names.begin(), target_names.end(), name) != target_names.end()) { result = true; } CYG_REPORT_RETVAL(result); return result;}const std::string&CdlPackagesDatabaseBody::get_target_description(std::string target_name) const{ CYG_REPORT_FUNCNAME("CdlPackagesDatabase::get_target_description"); CYG_PRECONDITION_THISC(); std::map<std::string,target_data>::const_iterator target_i = targets.find(target_name); if (target_i != targets.end()) { CYG_REPORT_RETURN(); return target_i->second.description; } CYG_FAIL("Invalid target name passed to CdlPackagesDatabase::get_target_description()"); static std::string dummy = ""; return dummy;}const std::vector<std::string>&CdlPackagesDatabaseBody::get_target_aliases(std::string target_name) const{ CYG_REPORT_FUNCNAME("CdlPackagesDatabase::get_target_aliases"); CYG_PRECONDITION_THISC(); std::map<std::string,target_data>::const_iterator target_i = targets.find(target_name); if (target_i != targets.end()) { CYG_REPORT_RETURN(); return target_i->second.aliases; } CYG_FAIL("Invalid target name passed to CdlPackagesDatabase::get_target_aliases()"); static std::vector<std::string> dummy; return dummy;}const std::vector<std::string>&CdlPackagesDatabaseBody::get_target_packages(std::string target_name) const{ CYG_REPORT_FUNCNAME("CdlPackagesDatabase::get_target_packages"); CYG_PRECONDITION_THISC(); std::map<std::string,target_data>::const_iterator target_i = targets.find(target_name); if (target_i != targets.end()) { CYG_REPORT_RETURN(); return target_i->second.packages; } CYG_FAIL("Invalid target name passed to CdlPackagesDatabase::get_target_packages()"); static std::vector<std::string> dummy; return dummy;}const std::string&CdlPackagesDatabaseBody::get_target_command_prefix(std::string target_name) const{ CYG_REPORT_FUNCNAME("CdlPackagesDatabase::get_target_command_prefix"); CYG_PRECONDITION_THISC(); std::map<std::string,target_data>::const_iterator target_i = targets.find(target_name); if (target_i != targets.end()) { CYG_REPORT_RETURN(); return target_i->second.command_prefix; } CYG_FAIL("Invalid target name passed to CdlPackagesDatabase::get_target_command_prefix()"); static std::string dummy = ""; return dummy;}const std::vector<std::pair<std::string,std::string> >&CdlPackagesDatabaseBody::get_target_compiler_flags(std::string target_name) const{ CYG_REPORT_FUNCNAME("CdlPackagesDatabase::get_target_compiler_flags"); CYG_PRECONDITION_THISC(); std::map<std::string,target_data>::const_iterator target_i = targets.find(target_name); if (target_i != targets.end()) { CYG_REPORT_RETURN(); return target_i->second.cflags; } CYG_FAIL("Invalid target name passed to CdlPackagesDatabase::get_target_compiler_flags()"); static std::vector<std::pair<std::string,std::string> > dummy; return dummy;}const std::vector<std::string>&CdlPackagesDatabaseBody::get_target_enables(std::string target_name) const{ CYG_REPORT_FUNCNAME("CdlPackagesDatabase::get_target_enables"); CYG_PRECONDITION_THISC(); std::map<std::string,target_data>::const_iterator target_i = this->targets.find(target_name); if (target_i != this->targets.end()) { CYG_REPORT_RETURN(); return target_i->second.enable; } CYG_FAIL("Invalid target name passed to CdlPackagesDatabase::get_target_enables()"); static std::vector<std::string> dummy; return dummy;}const std::vector<std::string>&CdlPackagesDatabaseBody::get_target_disables(std::string target_name) const{ CYG_REPORT_FUNCNAME("CdlPackagesDatabase::get_target_disables"); CYG_PRECONDITION_THISC(); std::map<std::string,target_data>::const_iterator target_i = this->targets.find(target_name); if (target_i != this->targets.end()) { CYG_REPORT_RETURN(); return target_i->second.disable; } CYG_FAIL("Invalid target name passed to CdlPackagesDatabase::get_target_disables()"); static std::vector<std::string> dummy; return dummy;}const std::vector<std::pair<std::string, std::string> >&CdlPackagesDatabaseBody::get_target_set_values(std::string target_name) const{ CYG_REPORT_FUNCNAME("CdlPackagesDatabase::get_target_set_values"); CYG_PRECONDITION_THISC(); std::map<std::string,target_data>::const_iterator target_i = this->targets.find(target_name); if (target_i != this->targets.end()) { CYG_REPORT_RETURN(); return target_i->second.set_values; } CYG_FAIL("Invalid target name passed to CdlPackagesDatabase::get_target_values()"); static std::vector<std::pair<std::string, std::string> > dummy; return dummy;}//}}}//{{{ CdlPackagesDatabase:: get template information // ----------------------------------------------------------------------------// Templates are different from packages and targets. The ecos.db file// does not contain all the information in one convenient file, instead// it is necessary to trawl through a templates sub-directory of the// component repository. There are no aliases. Descriptions can be obtained// only by executing the template file in a suitable interpreter.const std::vector<std::string>&CdlPackagesDatabaseBody::get_templates(void) const{ CYG_REPORT_FUNCNAME("CdlPackagesDatabase::get_templates"); CYG_PRECONDITION_THISC(); CYG_REPORT_RETURN(); return template_names;}boolCdlPackagesDatabaseBody::is_known_template(std::string name) const{ CYG_REPORT_FUNCNAMETYPE("CdlPackagesDatabase::is_known_template", "result %d"); CYG_REPORT_FUNCARG1XV(this); CYG_PRECONDITION_THISC(); bool result = false; if (std::find(template_names.begin(), template_names.end(), name) != template_names.end()) { result = true; } CYG_REPORT_RETVAL(result); return result;}const std::vector<std::string>&CdlPackagesDatabaseBody::get_template_versions(std::string template_name) const{ CYG_REPORT_FUNCNAME("CdlPackagesDatabase::get_template_versions"); CYG_REPORT_FUNCARG1XV(this); CYG_PRECONDITION_THISC(); std::map<std::string,template_data>::const_iterator template_i = templates.find(template_name); if (template_i != templates.end()) { CYG_REPORT_RETURN(); return template_i->second.versions; } CYG_FAIL("Invalid template name passed to CdlPackagesDatabase::get_template_versions()"); static std::vector<std::string> dummy; return dummy;}std::stringCdlPackagesDatabaseBody::get_template_filename(std::string template_name, std::string version_name) const{ CYG_REPORT_FUNCNAME("CdlPackagesDatabase::get_template_filename"); CYG_REPORT_FUNCARG1XV(this); CYG_PRECONDITION_THISC(); // Given the way templates are identified, the filename can be determined // easily by concatenating a few strings. The only complication is that // version_name may be an empty string, indicating that the most recent // version should be used. std::map<std::string,template_data>::const_iterator template_i = templates.find(template_name); if (template_i == templates.end()) { CYG_FAIL("Invalid template name passed to CdlPackagesDatabase::get_template_filename"); CYG_REPORT_RETURN(); return ""; } if ("" == version_name) { CYG_ASSERTC(0 != template_i->second.versions.size()); version_name = template_i->second.versions[0]; } else { std::vector<std::string>::const_iterator vsn_i = std::find(template_i->second.versions.begin(), template_i->second.versions.end(), version_name); if (vsn_i == template_i->second.versions.end()) { CYG_FAIL("Invalid template version passed to CdlPackagesDatabase::get_template_filename"); CYG_REPORT_RETURN(); return ""; } } std::string result = component_repository + "/templates/" + template_name + "/" + version_name + ".ect"; CYG_REPORT_RETURN(); return result;}// ----------------------------------------------------------------------------// The descriptions now live in an eCos savefile, i.e. a Tcl script, so// extracting them can be relatively expensive and needs to happen on// a just-in-time basis.const std::stringCdlPackagesDatabaseBody::get_template_description(std::string template_name, std::string version_name){ CYG_REPORT_FUNCNAME("CdlPackagesDatabase::get_template_description"); CYG_REPORT_FUNCARG1XV(this); CYG_PRECONDITION_THISC(); // Is this a known template? std::map<std::string, struct template_data>::iterator template_i = templates.find(template_name); if (template_i == templates.end()) { CYG_FAIL("Invalid template name passed to CdlPackagesDatabase::get_template_description"); CYG_REPORT_RETURN(); return ""; } // Is it a known version of the template? if ("" == version_name) { CYG_ASSERTC(0 != template_i->second.versions.size()); version_name = template_i->second.versions[0]; } else { if (std::find(template_i->second.versions.begin(), template_i->second.versions.end(), version_name) == template_i->second.versions.end()) { CYG_FAIL("Invalid template version passed to CdlPackagesDatabase::get_template_description"); CYG_REPORT_RETURN(); return ""; } } // We have a valid template and version. Has the version file in // question been read in yet? std::map<std::string, struct template_version_data>::iterator version_i; version_i = template_i->second.version_details.find(version_name); if (version_i != template_i->second.version_details.end()) { CYG_REPORT_RETURN(); return version_i->second.description; } std::string filename = this->get_template_filename(template_name, version_name); if ("" == filename) { CYG_REPORT_RETURN(); return ""; } extract_template_details(filename, template_i->second.version_details[version_name].description, template_i->second.version_details[version_name].packages); CYG_REPORT_RETURN(); return template_i->second.version_details[version_name].description;}// ----------------------------------------------------------------------------// Similarly extracting package information needs to happen on a// just-in-time basis.const std::vector<std::string>&CdlPackagesDatabaseBody::get_template_packages(std::string template_name, std::string version_name){ CYG_REPORT_FUNCNAME("CdlPackagesDatabase::get_template_packages"); CYG_REPORT_FUNCARG1XV(this); CYG_PRECONDITION_THISC(); static std::vector<std::string> dummy; // Is this a known template? std::map<std::string, struct template_data>::iterator template_i = templates.find(template_name); if (template_i == templates.end()) { CYG_FAIL("Invalid template name passed to CdlPackagesDatabase::get_template_packages"); CYG_REPORT_RETURN(); return dummy; } // Is it a known version of the template? if ("" == version_name) { CYG_ASSERTC(0 != template_i->second.versions.size()); version_name = template_i->second.versions[0]; } else { if (std::find(template_i->second.versions.begin(), template_i->second.versions.end(), version_name) == template_i->second.versions.end()) { CYG_FAIL("Invalid template version passed to CdlPackagesDatabase::get_packages"); CYG_REPORT_RETURN(); return dummy; } } //
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -