Panda3D
dcTypedef.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 dcTypedef.cxx
10 * @author drose
11 * @date 2004-06-17
12 */
13
14#include "dcTypedef.h"
15#include "dcParameter.h"
16#include "dcSimpleParameter.h"
17#include "dcindent.h"
18
19using std::string;
20
21/**
22 * The DCTypedef object becomes the owner of the supplied parameter pointer
23 * and will delete it upon destruction.
24 */
26DCTypedef(DCParameter *parameter, bool implicit) :
27 _parameter(parameter),
28 _bogus_typedef(false),
29 _implicit_typedef(implicit),
30 _number(-1)
31{
32}
33
34/**
35 * Creates a bogus typedef reference.
36 */
38DCTypedef(const string &name) :
39 _parameter(new DCSimpleParameter(ST_invalid)),
40 _bogus_typedef(true),
41 _implicit_typedef(false),
42 _number(-1)
43{
44 _parameter->set_name(name);
45}
46
47/**
48 *
49 */
50DCTypedef::
51~DCTypedef() {
52 delete _parameter;
53}
54
55/**
56 * Returns a unique index number associated with this typedef definition.
57 * This is defined implicitly when the .dc file(s) are read.
58 */
60get_number() const {
61 return _number;
62}
63
64/**
65 * Returns the name of this typedef.
66 */
67const string &DCTypedef::
68get_name() const {
69 return _parameter->get_name();
70}
71
72/**
73 * Returns a brief decription of the typedef, useful for human consumption.
74 */
76get_description() const {
77 std::ostringstream strm;
78 _parameter->output(strm, true);
79 return strm.str();
80}
81
82/**
83 * Returns true if the typedef has been flagged as a bogus typedef. This is
84 * set for typedefs that are generated by the parser as placeholder for
85 * missing typedefs, as when reading a partial file; it should not occur in a
86 * normal valid dc file.
87 */
89is_bogus_typedef() const {
90 return _bogus_typedef;
91}
92
93/**
94 * Returns true if the typedef has been flagged as an implicit typedef,
95 * meaning it was created for a DCClass that was referenced inline as a type.
96 */
98is_implicit_typedef() const {
99 return _implicit_typedef;
100}
101
102/**
103 * Returns a newly-allocated DCParameter object that uses the same type as
104 * that named by the typedef.
105 */
107make_new_parameter() const {
108 DCParameter *new_parameter = _parameter->make_copy();
109 new_parameter->set_name(string());
110 new_parameter->set_typedef(this);
111 return new_parameter;
112}
113
114/**
115 * Assigns the unique number to this typedef. This is normally called only by
116 * the DCFile interface as the typedef is added.
117 */
119set_number(int number) {
120 _number = number;
121}
122
123/**
124 * Write a string representation of this instance to <out>.
125 */
127output(std::ostream &out, bool brief) const {
128 out << "typedef ";
129 _parameter->output(out, false);
130}
131
132/**
133 *
134 */
135void DCTypedef::
136write(std::ostream &out, bool brief, int indent_level) const {
137 indent(out, indent_level)
138 << "typedef ";
139
140 // We need to preserve the parameter name in the typedef (this is the
141 // typedef name); hence, we pass brief = false to output().
142 _parameter->output(out, false);
143 out << ";";
144
145 if (!brief) {
146 out << " // typedef " << _number;
147 }
148 out << "\n";
149}
virtual void set_name(const std::string &name)
Sets the name of this field.
Definition: dcField.cxx:502
const std::string & get_name() const
Returns the name of this field, or empty string if the field is unnamed.
Represents the type specification for a single parameter within a field specification.
Definition: dcParameter.h:35
void set_typedef(const DCTypedef *dtypedef)
Records the DCTypedef object that generated this parameter.
This is the most fundamental kind of parameter type: a single number or string, one of the DCSubatomi...
DCParameter * make_new_parameter() const
Returns a newly-allocated DCParameter object that uses the same type as that named by the typedef.
Definition: dcTypedef.cxx:107
DCTypedef(DCParameter *parameter, bool implicit=false)
The DCTypedef object becomes the owner of the supplied parameter pointer and will delete it upon dest...
Definition: dcTypedef.cxx:26
bool is_implicit_typedef() const
Returns true if the typedef has been flagged as an implicit typedef, meaning it was created for a DCC...
Definition: dcTypedef.cxx:98
void set_number(int number)
Assigns the unique number to this typedef.
Definition: dcTypedef.cxx:119
int get_number() const
Returns a unique index number associated with this typedef definition.
Definition: dcTypedef.cxx:60
virtual void output(std::ostream &out, bool brief) const
Write a string representation of this instance to <out>.
Definition: dcTypedef.cxx:127
const std::string & get_name() const
Returns the name of this typedef.
Definition: dcTypedef.cxx:68
std::string get_description() const
Returns a brief decription of the typedef, useful for human consumption.
Definition: dcTypedef.cxx:76
bool is_bogus_typedef() const
Returns true if the typedef has been flagged as a bogus typedef.
Definition: dcTypedef.cxx:89
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
std::ostream & indent(std::ostream &out, int indent_level)
A handy function for doing text formatting.
Definition: dcindent.cxx:22
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.