216 lines
6.3 KiB
Text
216 lines
6.3 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 configVariableCore.I
|
||
|
* @author drose
|
||
|
* @date 2004-10-15
|
||
|
*/
|
||
|
|
||
|
/**
|
||
|
* Returns the name of the variable.
|
||
|
*/
|
||
|
INLINE const std::string &ConfigVariableCore::
|
||
|
get_name() const {
|
||
|
return _name;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Returns true if the variable has been referenced by a ConfigVariable
|
||
|
* somewhere in code, false otherwise.
|
||
|
*/
|
||
|
INLINE bool ConfigVariableCore::
|
||
|
is_used() const {
|
||
|
return _is_used;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Returns the stated type of this variable. If the variable has not yet been
|
||
|
* defined, this will be VT_undefined.
|
||
|
*/
|
||
|
INLINE ConfigVariableCore::ValueType ConfigVariableCore::
|
||
|
get_value_type() const {
|
||
|
return _value_type;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Returns the brief description of this variable, if it has been defined.
|
||
|
*/
|
||
|
INLINE const std::string &ConfigVariableCore::
|
||
|
get_description() const {
|
||
|
return _description;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Returns the flags value as set by set_flags(). This includes the trust
|
||
|
* level and some other settings. See the individual methods is_closed(),
|
||
|
* get_trust_level(), etc. to pull out the semantic meaning of these flags
|
||
|
* individually.
|
||
|
*/
|
||
|
INLINE int ConfigVariableCore::
|
||
|
get_flags() const {
|
||
|
return _flags;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Returns true if the variable is not trusted by any prc file (and hence
|
||
|
* cannot be modified from its compiled-in default value), or false for the
|
||
|
* normal case, in which the variable can be modified by any prc file at or
|
||
|
* above its trust level (see get_trust_level()).
|
||
|
*
|
||
|
* This value only has effect in a release build (specifically, when
|
||
|
* PRC_RESPECT_TRUST_LEVEL is defined true in Config.pp).
|
||
|
*/
|
||
|
INLINE bool ConfigVariableCore::
|
||
|
is_closed() const {
|
||
|
return (_flags & F_closed) != 0;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Returns the minimum trust_level a prc file must demonstrate in order to
|
||
|
* redefine the value for this variable. Arguably, this should be called the
|
||
|
* "mistrust level", since the larger the value, the more suspicious we are of
|
||
|
* prc files. This value is not used if is_closed() returns true, which
|
||
|
* indicates no file may be trusted.
|
||
|
*
|
||
|
* This value only has effect in a release build (specifically, when
|
||
|
* PRC_RESPECT_TRUST_LEVEL is defined true in Config.pp).
|
||
|
*/
|
||
|
INLINE int ConfigVariableCore::
|
||
|
get_trust_level() const {
|
||
|
return (_flags & F_trust_level_mask);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Returns true if the variable was indicated as "dynamic" by its constructor,
|
||
|
* indicating that its name was dynamically generated, possibly from a large
|
||
|
* pool, and it should not be listed along with the other variables.
|
||
|
*/
|
||
|
INLINE bool ConfigVariableCore::
|
||
|
is_dynamic() const {
|
||
|
return (_flags & F_dynamic) != 0;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Returns the default variable specified for this variable. If the variable
|
||
|
* has not yet been defined, this will return NULL.
|
||
|
*/
|
||
|
INLINE const ConfigDeclaration *ConfigVariableCore::
|
||
|
get_default_value() const {
|
||
|
return _default_value;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Marks that the variable has been "declared" by a ConfigVariable.
|
||
|
*/
|
||
|
INLINE void ConfigVariableCore::
|
||
|
set_used() {
|
||
|
_is_used = true;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Returns true if this variable's value has been shadowed by a local
|
||
|
* assignment (as created via make_local_value()), or false otherwise.
|
||
|
*/
|
||
|
INLINE bool ConfigVariableCore::
|
||
|
has_local_value() const {
|
||
|
return _local_value != nullptr;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Returns the number of prc files that reference this variable. This is not
|
||
|
* exactly the same as the number of declarations; see get_reference().
|
||
|
*/
|
||
|
INLINE size_t ConfigVariableCore::
|
||
|
get_num_references() const {
|
||
|
check_sort_declarations();
|
||
|
return _declarations.size();
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Returns the nth declaration in a prc file that references this variable.
|
||
|
* This is similar, but not identical to, get_declaration(). The difference
|
||
|
* is that this will list *only* true references in a prc file, and will not
|
||
|
* list default values or locally-assigned values; it also will list even the
|
||
|
* untrusted files.
|
||
|
*/
|
||
|
INLINE const ConfigDeclaration *ConfigVariableCore::
|
||
|
get_reference(size_t n) const {
|
||
|
check_sort_declarations();
|
||
|
nassertr(n < _declarations.size(), nullptr);
|
||
|
return _declarations[n];
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Returns the number of trusted prc files that reference this variable. See
|
||
|
* also get_num_references().
|
||
|
*/
|
||
|
INLINE size_t ConfigVariableCore::
|
||
|
get_num_trusted_references() const {
|
||
|
check_sort_declarations();
|
||
|
return _trusted_declarations.size();
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Returns the nth declaration in a trusted prc file that references this
|
||
|
* variable. This is similar, but not identical to, get_declaration(). The
|
||
|
* difference is that this will list *only* true references in a prc file, and
|
||
|
* will not list default values or locally-assigned values.
|
||
|
*
|
||
|
* This is also similar to get_reference(), except that it only lists the
|
||
|
* trusted declarations, omitting the untrusted ones.
|
||
|
*/
|
||
|
INLINE const ConfigDeclaration *ConfigVariableCore::
|
||
|
get_trusted_reference(size_t n) const {
|
||
|
check_sort_declarations();
|
||
|
nassertr(n < _trusted_declarations.size(), nullptr);
|
||
|
return _trusted_declarations[n];
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Returns the number of trusted, unique (by string value) values there exist
|
||
|
* for this variable.
|
||
|
*/
|
||
|
INLINE size_t ConfigVariableCore::
|
||
|
get_num_unique_references() const {
|
||
|
check_sort_declarations();
|
||
|
return _unique_declarations.size();
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Returns the nth trusted, unique value for this variable. This is similar
|
||
|
* to get_trusted_reference(), except that duplicate values are removed.
|
||
|
*/
|
||
|
INLINE const ConfigDeclaration *ConfigVariableCore::
|
||
|
get_unique_reference(size_t n) const {
|
||
|
check_sort_declarations();
|
||
|
nassertr(n < _unique_declarations.size(), nullptr);
|
||
|
return _unique_declarations[n];
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Called internally to ensure that the list of declarations is properly
|
||
|
* sorted.
|
||
|
*/
|
||
|
INLINE void ConfigVariableCore::
|
||
|
check_sort_declarations() const {
|
||
|
// First, make sure that all of the implicit .prc files have been loaded.
|
||
|
// This may unsort the list by adding a bunch more declarations.
|
||
|
ConfigPageManager::get_global_ptr()->load_implicit_pages();
|
||
|
|
||
|
// Then sort the list if it needs it.
|
||
|
if (!_declarations_sorted) {
|
||
|
((ConfigVariableCore *)this)->sort_declarations();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
INLINE std::ostream &
|
||
|
operator << (std::ostream &out, const ConfigVariableCore &variable) {
|
||
|
variable.output(out);
|
||
|
return out;
|
||
|
}
|