open_toontown_panda3d/dtool/src/prc/configVariableCore.h

115 lines
3.5 KiB
C++

// Filename: configVariableCore.h
// Created by: drose (15Oct04)
//
////////////////////////////////////////////////////////////////////
//
// 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."
//
////////////////////////////////////////////////////////////////////
#ifndef CONFIGVARIABLECORE_H
#define CONFIGVARIABLECORE_H
#include "dtoolbase.h"
#include "configFlags.h"
#include "configPageManager.h"
#include "pnotify.h"
#include <vector>
class ConfigDeclaration;
////////////////////////////////////////////////////////////////////
// Class : ConfigVariableCore
// Description : The internal definition of a ConfigVariable. This
// object is shared between all instances of a
// ConfigVariable that use the same variable name.
//
// You cannot create a ConfigVariableCore instance
// directly; instead, use the make() method, which may
// return a shared instance. Once created, these
// objects are never destructed.
////////////////////////////////////////////////////////////////////
class EXPCL_DTOOLCONFIG ConfigVariableCore : public ConfigFlags {
private:
ConfigVariableCore(const string &name);
ConfigVariableCore(const ConfigVariableCore &templ, const string &name);
~ConfigVariableCore();
public:
INLINE const string &get_name() const;
INLINE bool is_used() const;
INLINE ValueType get_value_type() const;
INLINE const string &get_description() const;
INLINE int get_flags() const;
INLINE bool is_closed() const;
INLINE int get_trust_level() const;
INLINE bool is_dynamic() const;
INLINE const ConfigDeclaration *get_default_value() const;
void set_value_type(ValueType value_type);
void set_flags(int flags);
void set_description(const string &description);
void set_default_value(const string &default_value);
INLINE void set_used();
ConfigDeclaration *make_local_value();
bool clear_local_value();
INLINE bool has_local_value() const;
bool has_value() const;
int get_num_declarations() const;
const ConfigDeclaration *get_declaration(int n) const;
INLINE int get_num_references() const;
INLINE const ConfigDeclaration *get_reference(int n) const;
INLINE int get_num_trusted_references() const;
INLINE const ConfigDeclaration *get_trusted_reference(int n) const;
INLINE int get_num_unique_references() const;
INLINE const ConfigDeclaration *get_unique_reference(int n) const;
void output(ostream &out) const;
void write(ostream &out) const;
private:
void add_declaration(ConfigDeclaration *decl);
void remove_declaration(ConfigDeclaration *decl);
INLINE void check_sort_declarations() const;
void sort_declarations();
private:
string _name;
bool _is_used;
ValueType _value_type;
string _description;
int _flags;
ConfigDeclaration *_default_value;
ConfigDeclaration *_local_value;
typedef vector<const ConfigDeclaration *> Declarations;
Declarations _declarations;
Declarations _trusted_declarations;
Declarations _untrusted_declarations;
Declarations _unique_declarations;
bool _declarations_sorted;
bool _value_queried;
friend class ConfigDeclaration;
friend class ConfigVariableManager;
};
INLINE ostream &operator << (ostream &out, const ConfigVariableCore &variable);
#include "configVariableCore.I"
#endif