historical/toontown-classic.git/panda/include/configVariable.I
2024-01-16 11:20:27 -06:00

282 lines
7.7 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 configVariable.I
* @author drose
* @date 2004-10-18
*/
/**
* This constructor is only intended to be called from a specialized
* ConfigVariableFoo derived class.
*/
INLINE ConfigVariable::
ConfigVariable(const std::string &name, ConfigVariable::ValueType value_type) :
ConfigVariableBase(name, value_type)
{
}
/**
* This constructor is only intended to be called from a specialized
* ConfigVariableFoo derived class.
*/
INLINE ConfigVariable::
ConfigVariable(const std::string &name, ConfigVariable::ValueType value_type,
const std::string &description, int flags) :
ConfigVariableBase(name, value_type, description, flags)
{
}
/**
* Use this constructor to make a ConfigVariable of an unspecified type.
* Usually you'd want to do this just to reference a previously-defined
* ConfigVariable of a specific type, without having to know what type it is.
*/
INLINE ConfigVariable::
ConfigVariable(const std::string &name) :
ConfigVariableBase(name, VT_undefined)
{
_core->set_used();
}
/**
*
*/
INLINE ConfigVariable::
~ConfigVariable() {
}
/**
* Returns the default variable specified for this variable. If the variable
* has not yet been defined, this will return NULL.
*/
INLINE const ConfigDeclaration *ConfigVariable::
get_default_value() const {
nassertr(is_constructed(), nullptr);
return _core->get_default_value();
}
/**
* Returns the toplevel value of the variable, formatted as a string.
*/
INLINE const std::string &ConfigVariable::
get_string_value() const {
nassertr(is_constructed(), *new std::string());
const ConfigDeclaration *decl = _core->get_declaration(0);
return decl->get_string_value();
}
/**
* Changes the value assigned to this variable. This creates a local value
* that shadows any values defined in the .prc files, until
* clear_local_value() is called.
*/
INLINE void ConfigVariable::
set_string_value(const std::string &string_value) {
nassertv(is_constructed());
_core->make_local_value()->set_string_value(string_value);
}
/**
* Removes the value assigned to this variable, and lets its original value
* (as read from the prc files) show through.
*/
INLINE void ConfigVariable::
clear_value() {
nassertv(is_constructed());
_core->clear_local_value();
}
/**
* Returns the number of words in the variable's value. A word is defined as
* a sequence of non-whitespace characters delimited by whitespace.
*/
INLINE size_t ConfigVariable::
get_num_words() const {
nassertr(is_constructed(), 0);
const ConfigDeclaration *decl = _core->get_declaration(0);
return decl->get_num_words();
}
/**
* Returns true if the variable's value has a valid string value for the nth
* word. This is really the same thing as asking if there are at least n
* words in the value.
*/
INLINE bool ConfigVariable::
has_string_word(size_t n) const {
nassertr(is_constructed(), false);
const ConfigDeclaration *decl = _core->get_declaration(0);
return decl->has_string_word(n);
}
/**
* Returns true if the variable's value has a valid boolean value for the nth
* word.
*/
INLINE bool ConfigVariable::
has_bool_word(size_t n) const {
nassertr(is_constructed(), false);
const ConfigDeclaration *decl = _core->get_declaration(0);
return decl->has_bool_word(n);
}
/**
* Returns true if the variable's value has a valid integer value for the nth
* word.
*/
INLINE bool ConfigVariable::
has_int_word(size_t n) const {
nassertr(is_constructed(), false);
const ConfigDeclaration *decl = _core->get_declaration(0);
return decl->has_int_word(n);
}
/**
* Returns true if the variable's value has a valid 64-bit integer value for
* the nth word.
*/
INLINE bool ConfigVariable::
has_int64_word(size_t n) const {
nassertr(is_constructed(), false);
const ConfigDeclaration *decl = _core->get_declaration(0);
return decl->has_int64_word(n);
}
/**
* Returns true if the variable's value has a valid integer value for the nth
* word.
*/
INLINE bool ConfigVariable::
has_double_word(size_t n) const {
nassertr(is_constructed(), false);
const ConfigDeclaration *decl = _core->get_declaration(0);
return decl->has_double_word(n);
}
/**
* Returns the string value of the nth word of the variable's value, or empty
* string if there is no nth value. See also has_string_word().
*/
INLINE std::string ConfigVariable::
get_string_word(size_t n) const {
nassertr(is_constructed(), std::string());
const ConfigDeclaration *decl = _core->get_declaration(0);
return decl->get_string_word(n);
}
/**
* Returns the boolean value of the nth word of the variable's value, or false
* if there is no nth value. See also has_bool_word().
*/
INLINE bool ConfigVariable::
get_bool_word(size_t n) const {
nassertr(is_constructed(), false);
const ConfigDeclaration *decl = _core->get_declaration(0);
return decl->get_bool_word(n);
}
/**
* Returns the integer value of the nth word of the variable's value, or 0 if
* there is no nth value. See also has_int_word().
*/
INLINE int ConfigVariable::
get_int_word(size_t n) const {
nassertr(is_constructed(), 0);
const ConfigDeclaration *decl = _core->get_declaration(0);
return decl->get_int_word(n);
}
/**
* Returns the int64 value of the nth word of the variable's value, or 0 if
* there is no nth value. See also has_int_word().
*/
INLINE int64_t ConfigVariable::
get_int64_word(size_t n) const {
nassertr(is_constructed(), 0);
const ConfigDeclaration *decl = _core->get_declaration(0);
return decl->get_int64_word(n);
}
/**
* Returns the integer value of the nth word of the variable's value, or 0 if
* there is no nth value. See also has_double_word().
*/
INLINE double ConfigVariable::
get_double_word(size_t n) const {
nassertr(is_constructed(), 0.0);
const ConfigDeclaration *decl = _core->get_declaration(0);
return decl->get_double_word(n);
}
/**
* Changes the nth word to the indicated value without affecting the other
* words.
*/
INLINE void ConfigVariable::
set_string_word(size_t n, const std::string &value) {
nassertv(is_constructed());
_core->make_local_value()->set_string_word(n, value);
}
/**
* Changes the nth word to the indicated value without affecting the other
* words.
*/
INLINE void ConfigVariable::
set_bool_word(size_t n, bool value) {
nassertv(is_constructed());
_core->make_local_value()->set_bool_word(n, value);
}
/**
* Changes the nth word to the indicated value without affecting the other
* words.
*/
INLINE void ConfigVariable::
set_int_word(size_t n, int value) {
nassertv(is_constructed());
_core->make_local_value()->set_int_word(n, value);
}
/**
* Changes the nth word to the indicated value without affecting the other
* words.
*/
INLINE void ConfigVariable::
set_int64_word(size_t n, int64_t value) {
nassertv(is_constructed());
_core->make_local_value()->set_int64_word(n, value);
}
/**
* Changes the nth word to the indicated value without affecting the other
* words.
*/
INLINE void ConfigVariable::
set_double_word(size_t n, double value) {
nassertv(is_constructed());
_core->make_local_value()->set_double_word(n, value);
}
/**
* Returns true if the constructor has been called and _core initialized,
* false if the constructor has not yet been called and _core is NULL. This
* is intended to be placed in an assertion check, to guard against static-
* init ordering issues.
*/
INLINE bool ConfigVariable::
is_constructed() const {
#ifndef NDEBUG
if (_core == nullptr) {
report_unconstructed();
return false;
}
#endif
return true;
}