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

📄 database.cxx

📁 eCos1.31版
💻 CXX
📖 第 1 页 / 共 5 页
字号:
        // should have at least one version. Any errors will be        // handled by the catch statement further down.        for (std::map<std::string,package_data>::iterator pkg_i = packages.begin(); pkg_i != packages.end(); pkg_i++) {            std::string pkgdir = repo + "/" + pkg_i->second.directory;            std::vector<std::string> subdirs;            unsigned int i;            interp->locate_subdirs(pkgdir, subdirs);            for (i = 0; i < subdirs.size(); i++) {                if (("CVS" != subdirs[i]) &&                    (interp->is_file(pkgdir + "/" + subdirs[i] + "/cdl/" + pkg_i->second.script) ||                     interp->is_file(pkgdir + "/" + subdirs[i] + "/" + pkg_i->second.script))) {                    pkg_i->second.versions.push_back(subdirs[i]);                }            }                        if (0 == pkg_i->second.versions.size()) {                throw CdlInputOutputException("Package " + pkg_i->first + ": there are no version subdirectories");            }            std::sort(pkg_i->second.versions.begin(), pkg_i->second.versions.end(), Cdl::version_cmp());        }        // Now start looking for templates. These should reside in the        // templates subdirectory of the component repository. Each template        // should be in its own directory, and inside each directory should        // be versioned template files with a .ect extension.        std::string templates_dir = repo + "/" + "templates";        std::vector<std::string> subdirs;        interp->locate_subdirs(templates_dir, subdirs);        for (i = 0; i < subdirs.size(); i++) {            // Do not add the template to the known ones until we are sure there is            // at least one valid template.            std::vector<std::string> files;            interp->locate_files(templates_dir + "/" + subdirs[i], files);            unsigned int j;            for (j = 0; j < files.size(); j++) {                if ((4 < files[j].size()) && (".ect" == files[j].substr(files[j].size() - 4))) {                    break;                }            }            if (j != files.size()) {                this->template_names.push_back(subdirs[i]);                for ( ; j < files.size(); j++) {                    if ((4 < files[j].size()) && (".ect" == files[j].substr(files[j].size() - 4))) {                        this->templates[subdirs[i]].versions.push_back(files[j].substr(0, files[j].size() - 4));                    }                }            }        }        // Consistency checks. All target-specific packages should have the        // hardware attribute. Also, all the packages should exist.        for (name_i = target_names.begin(); name_i != target_names.end(); name_i++) {            for (name_j = targets[*name_i].packages.begin(); name_j != targets[*name_i].packages.end(); name_j++) {                if (std::find(package_names.begin(), package_names.end(), *name_j) == package_names.end()) {                    throw CdlInputOutputException("Target " + *name_i + " refers to an unknown package " + *name_j);                }                if (!packages[*name_j].hardware) {                    throw CdlInputOutputException("Target " + *name_i + " refers to a non-hardware package " + *name_j);                }            }        }    }    catch(...) {        // Something has gone wrong. Clear out all of the data accumulated so far, as well        // as the interpreter.        delete interp;        package_names.clear();        target_names.clear();        template_names.clear();        packages.clear();        targets.clear();        templates.clear();        throw;    }    delete interp;    CYGDBG_MEMLEAK_CONSTRUCTOR();        CYG_REPORT_RETURN();}//}}}//{{{  CdlPackagesDatabase:: destructor                         // ----------------------------------------------------------------------------CdlPackagesDatabaseBody::~CdlPackagesDatabaseBody(){    CYG_REPORT_FUNCNAME("CdlPackagesDatabase:: default destructor");    CYG_REPORT_FUNCARG1XV(this);    CYG_PRECONDITION_THISC();    cdlpackagesdatabasebody_cookie      = CdlPackagesDatabaseBody_Invalid;    component_repository                = "";    package_names.clear();    target_names.clear();    template_names.clear();    packages.clear();    targets.clear();    templates.clear();    CYGDBG_MEMLEAK_DESTRUCTOR();        CYG_REPORT_RETURN();}//}}}//{{{  CdlPackagesDatabase:: check_this()                       // ----------------------------------------------------------------------------boolCdlPackagesDatabaseBody::check_this(cyg_assert_class_zeal zeal) const{    if (CdlPackagesDatabaseBody_Magic != cdlpackagesdatabasebody_cookie) {        return false;    }    CYGDBG_MEMLEAK_CHECKTHIS();    switch(zeal) {      case cyg_system_test :      case cyg_extreme :      {          std::vector<std::string>::const_iterator              names_i;          std::map<std::string,package_data>::const_iterator    pkgs_i;                    // Every entry in the names vector should have an entry in the packages vector.          for (names_i = package_names.begin(); names_i != package_names.end(); names_i++) {              if (packages.find(*names_i) == packages.end()) {                  return false;              }          }          // The inverse should be true as well          for (pkgs_i = packages.begin(); pkgs_i != packages.end(); pkgs_i++) {              if (std::find(package_names.begin(), package_names.end(), pkgs_i->first) == package_names.end()) {                  return false;              }          }                    // Repeat for targets.          std::map<std::string,target_data>::const_iterator     targets_i;          for (names_i = target_names.begin(); names_i != target_names.end(); names_i++) {              if (targets.find(*names_i) == targets.end()) {                  return false;              }          }          for (targets_i = targets.begin(); targets_i != targets.end(); targets_i++) {              if (std::find(target_names.begin(), target_names.end(), targets_i->first) == target_names.end()) {                  return false;              }          }          // And for templates          std::map<std::string,template_data>::const_iterator    templates_i;          for (names_i = template_names.begin(); names_i != template_names.end(); names_i++) {              if (templates.find(*names_i) == templates.end()) {                  return false;              }          }          // The inverse should be true as well          for (templates_i = templates.begin(); templates_i != templates.end(); templates_i++) {              if (std::find(template_names.begin(), template_names.end(), templates_i->first) == template_names.end()) {                  return false;              }          }                    // Possibly the package directories should be validated as          // well, not to mention the various version subdirectories,          // but doing file I/O inside an assertion is excessive.      }      case cyg_thorough :      case cyg_quick:          if ("" == component_repository) {              return false;          }      case cyg_trivial:      case cyg_none :        break;    }    return true;}//}}}//{{{  CdlPackagesDatabase:: misc                               // ----------------------------------------------------------------------------std::stringCdlPackagesDatabaseBody::get_component_repository() const{    CYG_REPORT_FUNCNAME("CdlPackagesDatabase::get_component_repository");    CYG_REPORT_FUNCARG1XV(this);    CYG_PRECONDITION_THISC();    CYG_REPORT_RETURN();    return component_repository;}//}}}//{{{  CdlPackagesDatabase:: get package information            // ----------------------------------------------------------------------------const std::vector<std::string>&CdlPackagesDatabaseBody::get_packages(void) const{    CYG_REPORT_FUNCNAME("CdlPackagesDatabase::get_packages");    CYG_REPORT_FUNCARG1XV(this);    CYG_PRECONDITION_THISC();    CYG_REPORT_RETURN();    return package_names;}boolCdlPackagesDatabaseBody::is_known_package(std::string name) const{    CYG_REPORT_FUNCNAMETYPE("CdlPackagesDatabase::is_known_package", "result %d");    CYG_REPORT_FUNCARG1XV(this);    CYG_PRECONDITION_THISC();    bool result = false;    if (std::find(package_names.begin(), package_names.end(), name) != package_names.end()) {        result = true;    }    CYG_REPORT_RETVAL(result);    return result;}const std::string&CdlPackagesDatabaseBody::get_package_description(std::string pkg_name) const{    CYG_REPORT_FUNCNAME("CdlPackagesDatabase::get_package_description");    CYG_REPORT_FUNCARG1XV(this);    CYG_PRECONDITION_THISC();    std::map<std::string,package_data>::const_iterator pkgs_i = packages.find(pkg_name);    if (pkgs_i != packages.end()) {        CYG_REPORT_RETURN();        return pkgs_i->second.description;    }        CYG_FAIL("Invalid package name passed to CdlPackagesDatabase::get_package_description()");    static std::string dummy = "";    return dummy;}const std::vector<std::string>&CdlPackagesDatabaseBody::get_package_aliases(std::string pkg_name) const{    CYG_REPORT_FUNCNAME("CdlPackagesDatabase::get_package_aliases");    CYG_REPORT_FUNCARG1XV(this);    CYG_PRECONDITION_THISC();    std::map<std::string,package_data>::const_iterator pkgs_i = packages.find(pkg_name);    if (pkgs_i != packages.end()) {        CYG_REPORT_RETURN();        return pkgs_i->second.aliases;    }        CYG_FAIL("Invalid package name passed to CdlPackagesDatabase::get_package_aliases()");    static std::vector<std::string> dummy;    return dummy;}const std::vector<std::string>&CdlPackagesDatabaseBody::get_package_versions(std::string pkg_name) const{    CYG_REPORT_FUNCNAME("CdlPackagesDatabase::get_package_versions");    CYG_REPORT_FUNCARG1XV(this);    CYG_PRECONDITION_THISC();    std::map<std::string,package_data>::const_iterator pkgs_i = packages.find(pkg_name);    if (pkgs_i != packages.end()) {        CYG_REPORT_RETURN();        return pkgs_i->second.versions;    }        CYG_FAIL("Invalid package name passed to CdlPackagesDatabase::get_package_versions()");    static std::vector<std::string> dummy;    return dummy;}const std::string&CdlPackagesDatabaseBody::get_package_directory(std::string pkg_name) const{    CYG_REPORT_FUNCNAME("CdlPackagesDatabase::get_package_directory");    CYG_REPORT_FUNCARG1XV(this);    CYG_PRECONDITION_THISC();    std::map<std::string,package_data>::const_iterator pkgs_i = packages.find(pkg_name);    if (pkgs_i != packages.end()) {        CYG_REPORT_RETURN();        return pkgs_i->second.directory;    }        CYG_FAIL("Invalid package name passed to CdlPackagesDatabase::get_package_directory()");    static std::string dummy = "";    return dummy;}const std::string&CdlPackagesDatabaseBody::get_package_script(std::string pkg_name) const{    CYG_REPORT_FUNCNAME("CdlPackagesDatabase::get_package_script");    CYG_REPORT_FUNCARG1XV(this);    CYG_PRECONDITION_THISC();    std::map<std::string,package_data>::const_iterator pkgs_i = packages.find(pkg_name);    if (pkgs_i != packages.end()) {        CYG_REPORT_RETURN();        return pkgs_i->second.script;    }        CYG_FAIL("Invalid package name passed to CdlPackagesDatabase::get_package_script()");    static std::string dummy = "";    return dummy;}boolCdlPackagesDatabaseBody::is_hardware_package(std::string pkg_name) const{    CYG_REPORT_FUNCNAME("CdlPackagesDatabase::is_hardware_package");    CYG_REPORT_FUNCARG1XV(this);    CYG_PRECONDITION_THISC();    std::map<std::string,package_data>::const_iterator pkgs_i = packages.find(pkg_name);    if (pkgs_i != packages.end()) {        CYG_REPORT_RETURN();        return pkgs_i->second.hardware;    }        CYG_FAIL("Invalid package name passed to CdlPackagesDatabase::is_hardware_package()");    return false;}//}}}//{{{  CdlPackagesDatabase:: get target information             // ----------------------------------------------------------------------------

⌨️ 快捷键说明

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