177 lines
5 KiB
Text
177 lines
5 KiB
Text
|
/**
|
||
|
* PANDA 3D SOFTWARE
|
||
|
* Copyright (c) Carnegie Mellon University. All rights reserved.
|
||
|
*
|
||
|
* All use of this software is subject to the terms of the revised BSD
|
||
|
* license. You should have received a copy of this license along
|
||
|
* with this source code in a file named "LICENSE."
|
||
|
*
|
||
|
* @file configPageManager.I
|
||
|
* @author drose
|
||
|
* @date 2004-10-15
|
||
|
*/
|
||
|
|
||
|
/**
|
||
|
* Returns true if the implicit *.prc files have already been loaded, false
|
||
|
* otherwise. Normally this will only be false briefly before startup.
|
||
|
*/
|
||
|
INLINE bool ConfigPageManager::
|
||
|
loaded_implicit_pages() const {
|
||
|
return _loaded_implicit;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Searches the PRC_DIR and/or PRC_PATH directories for *.prc files and loads
|
||
|
* them in as pages. This is normally called automatically at startup time,
|
||
|
* when the first variable's value is referenced. See also
|
||
|
* reload_implicit_pages().
|
||
|
*/
|
||
|
INLINE void ConfigPageManager::
|
||
|
load_implicit_pages() {
|
||
|
if (!_loaded_implicit) {
|
||
|
reload_implicit_pages();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Returns the search path used to locate implicit .prc files. This is
|
||
|
* determined by the PRC_DIR and PRC_PATH environment variables. The object
|
||
|
* returned by this method may be modified to change the path at runtime, and
|
||
|
* then reload_implicit_pages() called.
|
||
|
*/
|
||
|
INLINE DSearchPath &ConfigPageManager::
|
||
|
get_search_path() {
|
||
|
load_implicit_pages();
|
||
|
return _search_path;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Returns the number of patterns, like "*.prc", that are compiled in that
|
||
|
* will be searched for as default config filenames. Normally there is only
|
||
|
* one pattern, and it is "*.prc", but others may be specified with the
|
||
|
* PRC_FILENAME variable in Config.pp.
|
||
|
*/
|
||
|
INLINE size_t ConfigPageManager::
|
||
|
get_num_prc_patterns() const {
|
||
|
return _prc_patterns.size();
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Returns the nth filename pattern that will be considered a match as a valid
|
||
|
* config file. See get_num_prc_patterns().
|
||
|
*/
|
||
|
INLINE std::string ConfigPageManager::
|
||
|
get_prc_pattern(size_t n) const {
|
||
|
nassertr(n < _prc_patterns.size(), std::string());
|
||
|
return _prc_patterns[n].get_pattern();
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Returns the number of patterns, like "*.pre", that are compiled in that
|
||
|
* will be searched for as special config files that are understood to be
|
||
|
* encrypted.
|
||
|
*/
|
||
|
INLINE size_t ConfigPageManager::
|
||
|
get_num_prc_encrypted_patterns() const {
|
||
|
return _prc_encrypted_patterns.size();
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Returns the nth filename pattern that will be considered a match as a valid
|
||
|
* encrypted config file. See get_num_prc_encrypted_patterns().
|
||
|
*/
|
||
|
INLINE std::string ConfigPageManager::
|
||
|
get_prc_encrypted_pattern(size_t n) const {
|
||
|
nassertr(n < _prc_patterns.size(), std::string());
|
||
|
return _prc_encrypted_patterns[n].get_pattern();
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Returns the number of patterns, like "*.exe", that are compiled in that
|
||
|
* will be searched for as special config files that are to be executed as a
|
||
|
* program, and their output taken to be input. This is normally empty.
|
||
|
*/
|
||
|
INLINE size_t ConfigPageManager::
|
||
|
get_num_prc_executable_patterns() const {
|
||
|
return _prc_executable_patterns.size();
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Returns the nth filename pattern that will be considered a match as a valid
|
||
|
* executable-style config file. See get_num_prc_executable_patterns().
|
||
|
*/
|
||
|
INLINE std::string ConfigPageManager::
|
||
|
get_prc_executable_pattern(size_t n) const {
|
||
|
nassertr(n < _prc_patterns.size(), std::string());
|
||
|
return _prc_executable_patterns[n].get_pattern();
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Returns the current number of implicitly-loaded ConfigPages in the world.
|
||
|
* These represent files that were automatically discovered on the disk as
|
||
|
* .prc files.
|
||
|
*/
|
||
|
INLINE size_t ConfigPageManager::
|
||
|
get_num_implicit_pages() const {
|
||
|
return _implicit_pages.size();
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Returns the nth implicit ConfigPage in the world. See
|
||
|
* get_num_implicit_pages().
|
||
|
*/
|
||
|
INLINE ConfigPage *ConfigPageManager::
|
||
|
get_implicit_page(size_t n) const {
|
||
|
check_sort_pages();
|
||
|
nassertr(n < _implicit_pages.size(), nullptr);
|
||
|
return _implicit_pages[n];
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Returns the current number of explicitly-loaded ConfigPages in the world.
|
||
|
* These represent pages that were loaded dynamically at runtime by explicit
|
||
|
* calls to ConfigPageManager::make_explicit_page().
|
||
|
*/
|
||
|
INLINE size_t ConfigPageManager::
|
||
|
get_num_explicit_pages() const {
|
||
|
return _explicit_pages.size();
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Returns the nth explicit ConfigPage in the world. See
|
||
|
* get_num_explicit_pages().
|
||
|
*/
|
||
|
INLINE ConfigPage *ConfigPageManager::
|
||
|
get_explicit_page(size_t n) const {
|
||
|
check_sort_pages();
|
||
|
nassertr(n < _explicit_pages.size(), nullptr);
|
||
|
return _explicit_pages[n];
|
||
|
}
|
||
|
|
||
|
|
||
|
/**
|
||
|
* This method is meant to be used internally to this module; there is no need
|
||
|
* to call it directly. It indicates that the sort values of some pages may
|
||
|
* have changed and pages need to be re-sorted.
|
||
|
*/
|
||
|
INLINE void ConfigPageManager::
|
||
|
mark_unsorted() {
|
||
|
_pages_sorted = false;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Called internally to ensure that the list of pages is properly sorted.
|
||
|
*/
|
||
|
INLINE void ConfigPageManager::
|
||
|
check_sort_pages() const {
|
||
|
if (!_pages_sorted) {
|
||
|
((ConfigPageManager *)this)->sort_pages();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
INLINE std::ostream &
|
||
|
operator << (std::ostream &out, const ConfigPageManager &pageMgr) {
|
||
|
pageMgr.output(out);
|
||
|
return out;
|
||
|
}
|