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

232 lines
6.2 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 configDeclaration.I
* @author drose
* @date 2004-10-15
*/
/**
* Sorts two declarations in order based on the order in which their
* respective pages were loaded, and the order in which they appear within the
* same page.
*/
INLINE bool ConfigDeclaration::
operator < (const ConfigDeclaration &other) const {
if (get_page() == other.get_page()) {
// On the same page, we compare based on the decl_seq.
return get_decl_seq() < other.get_decl_seq();
}
// On different pages, we compare based on the page importance.
return *get_page() < *other.get_page();
}
/**
* Returns the page on which this declaration can be found.
*/
INLINE ConfigPage *ConfigDeclaration::
get_page() const {
return _page;
}
/**
* Returns the variable that this declaration names. This variable may or may
* not have been defined by the time the declaration is read.
*/
INLINE ConfigVariableCore *ConfigDeclaration::
get_variable() const {
return _variable;
}
/**
* Returns the value assigned to this variable. This is the original one-line
* text defined for the variable in the .prc file (or passed to
* ConfigPage::make_declaration()).
*/
INLINE const std::string &ConfigDeclaration::
get_string_value() const {
return _string_value;
}
/**
* Changes the value assigned to this variable.
*/
INLINE void ConfigDeclaration::
set_string_value(const std::string &string_value) {
_string_value = string_value;
_got_words = false;
invalidate_cache();
}
/**
* Returns the number of words in the declaration's value. A word is defined
* as a sequence of non-whitespace characters delimited by whitespace.
*/
INLINE size_t ConfigDeclaration::
get_num_words() const {
if (!_got_words) {
((ConfigDeclaration *)this)->get_words();
}
return _words.size();
}
/**
* Returns true if the declaration'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 ConfigDeclaration::
has_string_word(size_t n) const {
if (!_got_words) {
((ConfigDeclaration *)this)->get_words();
}
return (n < _words.size());
}
/**
* Returns true if the declaration's value has a valid boolean value for the
* nth word.
*/
INLINE bool ConfigDeclaration::
has_bool_word(size_t n) const {
if (has_string_word(n)) {
((ConfigDeclaration *)this)->check_bool_word(n);
return (_words[n]._flags & F_valid_bool) != 0;
}
return false;
}
/**
* Returns true if the declaration's value has a valid integer value for the
* nth word.
*/
INLINE bool ConfigDeclaration::
has_int_word(size_t n) const {
if (has_string_word(n)) {
((ConfigDeclaration *)this)->check_int_word(n);
return (_words[n]._flags & F_valid_int) != 0;
}
return false;
}
/**
* Returns true if the declaration's value has a valid int64 value for the nth
* word.
*/
INLINE bool ConfigDeclaration::
has_int64_word(size_t n) const {
if (has_string_word(n)) {
((ConfigDeclaration *)this)->check_int64_word(n);
return (_words[n]._flags & F_valid_int64) != 0;
}
return false;
}
/**
* Returns true if the declaration's value has a valid integer value for the
* nth word.
*/
INLINE bool ConfigDeclaration::
has_double_word(size_t n) const {
if (has_string_word(n)) {
((ConfigDeclaration *)this)->check_double_word(n);
return (_words[n]._flags & F_valid_double) != 0;
}
return false;
}
/**
* Returns the string value of the nth word of the declaration's value, or
* empty string if there is no nth value. See also has_string_word().
*/
INLINE std::string ConfigDeclaration::
get_string_word(size_t n) const {
if (has_string_word(n)) {
return _words[n]._str;
}
return std::string();
}
/**
* Returns the boolean value of the nth word of the declaration's value, or
* false if there is no nth value. See also has_bool_word().
*/
INLINE bool ConfigDeclaration::
get_bool_word(size_t n) const {
// We use has_string_word() instead of has_bool_word(), so we can return a
// partial answer if there was one.
if (has_string_word(n)) {
((ConfigDeclaration *)this)->check_bool_word(n);
return _words[n]._bool;
}
return false;
}
/**
* Returns the integer value of the nth word of the declaration's value, or 0
* if there is no nth value. See also has_int_word().
*/
INLINE int ConfigDeclaration::
get_int_word(size_t n) const {
// We use has_string_word() instead of has_int_word(), so we can return a
// partial answer if there was one.
if (has_string_word(n)) {
((ConfigDeclaration *)this)->check_int_word(n);
return _words[n]._int;
}
return 0;
}
/**
* Returns the int64 value of the nth word of the declaration's value, or 0 if
* there is no nth value. See also has_int64_word().
*/
INLINE int64_t ConfigDeclaration::
get_int64_word(size_t n) const {
// We use has_string_word() instead of has_int64_word(), so we can return a
// partial answer if there was one.
if (has_string_word(n)) {
((ConfigDeclaration *)this)->check_int64_word(n);
return _words[n]._int_64;
}
return 0;
}
/**
* Returns the integer value of the nth word of the declaration's value, or 0
* if there is no nth value. See also has_double_word().
*/
INLINE double ConfigDeclaration::
get_double_word(size_t n) const {
// We use has_string_word() instead of has_double_word(), so we can return a
// partial answer if there was one.
if (has_string_word(n)) {
((ConfigDeclaration *)this)->check_double_word(n);
return _words[n]._double;
}
return 0.0;
}
/**
* Returns the sequence number of the declaration within the page. Sequence
* numbers are assigned as each declaration is created; each declaration is
* given a higher sequence number than all the declarations created in the
* page before it.
*/
INLINE int ConfigDeclaration::
get_decl_seq() const {
return _decl_seq;
}
INLINE std::ostream &
operator << (std::ostream &out, const ConfigDeclaration &decl) {
decl.output(out);
return out;
}