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

📄 cpp_include_paths.hpp

📁 Boost provides free peer-reviewed portable C++ source libraries. We emphasize libraries that work
💻 HPP
📖 第 1 页 / 共 2 页
字号:
        }        ar & make_nvp("was_sys_include_path", was_sys_include_path);    }    BOOST_SERIALIZATION_SPLIT_MEMBER()#endif};/////////////////////////////////////////////////////////////////////////////////  Add an include path to one of the search lists (user include path or system //  include path).inlinebool include_paths::add_include_path (    char const *path_, include_list_type &pathes_){    namespace fs = boost::filesystem;    if (path_) {    fs::path newpath = fs::complete(fs::path(path_, fs::native), current_dir);        if (!fs::exists(newpath) || !fs::is_directory(newpath)) {        // the given path does not form a name of a valid file system directory        // item            return false;        }        pathes_.push_back (include_value_type(newpath, path_));        return true;    }    return false;}/////////////////////////////////////////////////////////////////////////////////  Find an include file by traversing the list of include directoriesinlinebool include_paths::find_include_file (std::string &s, std::string &dir,     include_list_type const &pathes, char const *current_file) const{    namespace fs = boost::filesystem;    typedef include_list_type::const_iterator const_include_list_iter_t;    const_include_list_iter_t it = pathes.begin();    const_include_list_iter_t include_paths_end = pathes.end();#if BOOST_WAVE_SUPPORT_INCLUDE_NEXT != 0        if (0 != current_file) {    // re-locate the directory of the current file (#include_next handling)    // #include_next does not distinguish between <file> and "file"    // inclusion, nor does it check that the file you specify has the same    // name as the current file.  It simply looks for the file named, starting    // with the directory in the search path after the one where the current    // file was found.        fs::path file_path (current_file, fs::native);        for (/**/; it != include_paths_end; ++it) {            fs::path currpath ((*it).first.string(), fs::native);            if (std::equal(currpath.begin(), currpath.end(), file_path.begin()))             {                ++it;     // start searching with the next directory                break;            }        }    }#endif    for (/**/; it != include_paths_end; ++it) {        fs::path currpath (s, fs::native);        if (!currpath.has_root_directory()) {            currpath = fs::path((*it).first.string(), fs::native);            currpath /= fs::path(s, fs::native);      // append filename        }                if (fs::exists(currpath)) {            fs::path dirpath (s, fs::native);            if (!dirpath.has_root_directory()) {                dirpath = fs::path((*it).second, fs::native);                dirpath /= fs::path(s, fs::native);            }                        dir = dirpath.string();            s = currpath.normalize().string();    // found the required file            return true;        }    }    return false;}/////////////////////////////////////////////////////////////////////////////////  Find an include file by searching the user and system includes in the //  correct sequence (as it was configured by the user of the driver program)inline bool include_paths::find_include_file (std::string &s, std::string &dir,     bool is_system, char const *current_file) const{    namespace fs = boost::filesystem;    // if not system include (<...>), then search current directory first    if (!is_system) {        if (!was_sys_include_path) {  // set_sys_include_delimiter() not called        // first have a look at the current directory            fs::path currpath (s, fs::native);            if (!currpath.has_root_directory()) {                currpath = fs::path(current_dir.string(), fs::native);                currpath /= fs::path(s, fs::native);            }                        if (fs::exists(currpath) && 0 == current_file) {            // if 0 != current_path (#include_next handling) it can't be            // the file in the current directory                fs::path dirpath (s, fs::native);                if (!dirpath.has_root_directory()) {                    dirpath = fs::path(current_rel_dir.string(), fs::native);                    dirpath /= fs::path(s, fs::native);                }                                dir = dirpath.string();                s = currpath.normalize().string();    // found in local directory                return true;            }           // iterate all user include file directories to find the file            if (find_include_file(s, dir, user_include_paths, current_file))                return true;        // ... fall through        }        else {        //  if set_sys_include_delimiter() was called, then user include files        //  are searched in the user search path only            return find_include_file(s, dir, user_include_paths, current_file);        }            // if nothing found, fall through    // ...    }// iterate all system include file directories to find the file    return find_include_file (s, dir, system_include_paths, current_file);}/////////////////////////////////////////////////////////////////////////////////  Set current directory from a given file nameinlinevoid include_paths::set_current_directory(char const *path_){    namespace fs = boost::filesystem;        fs::path filepath (path_, fs::native);    fs::path filename = fs::complete(filepath, current_dir);    if (fs::exists(filename) && fs::is_directory(filename)) {        current_dir = filename;        current_rel_dir = filepath;    }    else {        current_dir = filename.branch_path();        current_rel_dir = filepath.branch_path();    }}///////////////////////////////////////////////////////////////////////////////}}}   // namespace boost::wave::util#if BOOST_WAVE_SERIALIZATION != 0///////////////////////////////////////////////////////////////////////////////namespace boost { namespace serialization {/////////////////////////////////////////////////////////////////////////////////  Serialization support for boost::filesystem::pathtemplate<class Archive>inline void save (Archive & ar, boost::filesystem::path const& p,     const unsigned int /* file_version */){    using namespace boost::serialization;    std::string path_str(p.native_file_string());    ar & make_nvp("filepath", path_str);}template<class Archive>inline void load (Archive & ar, boost::filesystem::path &p,    const unsigned int /* file_version */){    using namespace boost::serialization;    std::string path_str;    ar & make_nvp("filepath", path_str);    p = boost::filesystem::path(path_str, boost::filesystem::native);}// split non-intrusive serialization function member into separate// non intrusive save/load member functionstemplate<class Archive>inline void serialize (Archive & ar, boost::filesystem::path &p,    const unsigned int file_version){    boost::serialization::split_free(ar, p, file_version);}/////////////////////////////////////////////////////////////////////////////////  Serialization support for the used multi_indextemplate<class Archive>inline void save (Archive & ar,    const typename boost::wave::util::bidirectional_map<        std::string, std::string    >::type &t,    const unsigned int /* file_version */){    boost::serialization::stl::save_collection<        Archive,         typename boost::wave::util::bidirectional_map<            std::string, std::string        >::type    >(ar, t);}template<class Archive>inline void load (Archive & ar,    typename boost::wave::util::bidirectional_map<std::string, std::string>::type &t,    const unsigned int /* file_version */){    typedef typename boost::wave::util::bidirectional_map<            std::string, std::string        >::type map_type;    boost::serialization::stl::load_collection<        Archive, map_type,        boost::serialization::stl::archive_input_unique<Archive, map_type>,        boost::serialization::stl::no_reserve_imp<map_type>    >(ar, t);}// split non-intrusive serialization function member into separate// non intrusive save/load member functionstemplate<class Archive>inline void serialize (Archive & ar,     typename boost::wave::util::bidirectional_map<        std::string, std::string    >::type &t,    const unsigned int file_version){    boost::serialization::split_free(ar, t, file_version);}///////////////////////////////////////////////////////////////////////////////}}  // namespace boost::serializationBOOST_CLASS_VERSION(boost::wave::util::include_paths,     boost::wave::util::include_paths::version);#endif  // BOOST_WAVE_SERIALIZATION != 0// the suffix header occurs after all of the code#ifdef BOOST_HAS_ABI_HEADERS#include BOOST_ABI_SUFFIX#endif#endif // !defined(CPP_INCLUDE_PATHS_HPP_AF620DA4_B3D2_4221_AD91_8A1ABFFB6944_INCLUDED)

⌨️ 快捷键说明

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