Panda3D

configVariableBase.cxx
Go to the documentation of this file.
1 /**
2 * PANDA 3D SOFTWARE
3 * Copyright (c) Carnegie Mellon University. All rights reserved.
4 *
5 * All use of this software is subject to the terms of the revised BSD
6 * license. You should have received a copy of this license along
7 * with this source code in a file named "LICENSE."
8 *
9 * @file configVariableBase.cxx
10 * @author drose
11 * @date 2004-10-21
12 */
13
14 #include "configVariableBase.h"
15 #include "config_prc.h"
16
17 ConfigVariableBase::Unconstructed *ConfigVariableBase::_unconstructed;
18
19 /**
20 * This constructor is only intended to be called from a specialized
21 * ConfigVariableFoo derived class.
22 */
23 ConfigVariableBase::
24 ConfigVariableBase(const std::string &name,
25 ConfigVariableBase::ValueType value_type,
26 const std::string &description, int flags) :
27 _core(ConfigVariableManager::get_global_ptr()->make_variable(name))
28 {
29 #ifndef NDEBUG
30 if (was_unconstructed()) {
31 prc_cat->error()
32 << "Late constructing " << this << ": " << name << "\n";
33 }
34 #endif // NDEBUG
35
36 if (value_type != VT_undefined) {
37 _core->set_value_type(value_type);
38 }
39 #ifdef PRC_SAVE_DESCRIPTIONS
40 if (!description.empty()) {
41 _core->set_description(description);
42 }
43 #endif // PRC_SAVE_DESCRIPTIONS
44 if (flags != 0) {
45 _core->set_flags(flags);
46 }
47 }
48
49 /**
50 * Records that this config variable was referenced before it was constructed
51 * (presumably a static-init ordering issue). This is used to print a useful
52 * error message later, when the constructor is actually called (and we then
53 * know what the name of the variable is).
54 */
55 void ConfigVariableBase::
56 record_unconstructed() const {
57 #ifndef NDEBUG
58 if (_unconstructed == nullptr) {
59 _unconstructed = new Unconstructed;
60 }
61 _unconstructed->insert(this);
62 #endif
63 }
64
65 /**
66 * Returns true if record_unconstructed() was ever called on this pointer,
67 * false otherwise.
68 */
69 bool ConfigVariableBase::
70 was_unconstructed() const {
71 #ifndef NDEBUG
72 if (_unconstructed != nullptr) {
73 Unconstructed::const_iterator ui = _unconstructed->find(this);
74 if (ui != _unconstructed->end()) {
75 return true;
76 }
77 }
78 #endif
79 return false;
80 }
ConfigVariableManager
A global object that maintains the set of ConfigVariables (actually, ConfigVariableCores) everywhere ...
Definition: configVariableManager.h:31
pset
This is our own Panda specialization on the default STL set.
Definition: pset.h:49
configVariableBase.h
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
config_prc.h
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.