Panda3D
Loading...
Searching...
No Matches
dcParameter.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 dcParameter.cxx
10 * @author drose
11 * @date 2004-06-15
12 */
13
14#include "dcParameter.h"
15#include "dcArrayParameter.h"
16#include "hashGenerator.h"
17#include "dcindent.h"
18#include "dcTypedef.h"
19
20using std::ostream;
21using std::string;
22
23/**
24 *
25 */
26DCParameter::
27DCParameter() {
28 _typedef = nullptr;
29 _has_fixed_byte_size = false;
30 _has_fixed_structure = false;
31 _num_nested_fields = -1;
32}
33
34/**
35 *
36 */
37DCParameter::
38DCParameter(const DCParameter &copy) :
39 DCField(copy),
40 _typedef(copy._typedef)
41{
42}
43
44/**
45 *
46 */
47DCParameter::
48~DCParameter() {
49}
50
51/**
52 *
53 */
54DCParameter *DCParameter::
55as_parameter() {
56 return this;
57}
58
59/**
60 *
61 */
62const DCParameter *DCParameter::
63as_parameter() const {
64 return this;
65}
66
67/**
68 *
69 */
70DCSimpleParameter *DCParameter::
71as_simple_parameter() {
72 return nullptr;
73}
74
75/**
76 *
77 */
78const DCSimpleParameter *DCParameter::
79as_simple_parameter() const {
80 return nullptr;
81}
82
83/**
84 *
85 */
86DCClassParameter *DCParameter::
87as_class_parameter() {
88 return nullptr;
89}
90
91/**
92 *
93 */
94const DCClassParameter *DCParameter::
95as_class_parameter() const {
96 return nullptr;
97}
98
99/**
100 *
101 */
102DCSwitchParameter *DCParameter::
103as_switch_parameter() {
104 return nullptr;
105}
106
107/**
108 *
109 */
110const DCSwitchParameter *DCParameter::
111as_switch_parameter() const {
112 return nullptr;
113}
114
115/**
116 *
117 */
118DCArrayParameter *DCParameter::
119as_array_parameter() {
120 return nullptr;
121}
122
123/**
124 *
125 */
126const DCArrayParameter *DCParameter::
127as_array_parameter() const {
128 return nullptr;
129}
130
131/**
132 * If this type has been referenced from a typedef, returns the DCTypedef
133 * instance, or NULL if the type was declared on-the-fly.
134 */
136get_typedef() const {
137 return _typedef;
138}
139
140/**
141 * Records the DCTypedef object that generated this parameter. This is
142 * normally called only from DCTypedef::make_new_parameter().
143 */
145set_typedef(const DCTypedef *dtypedef) {
146 _typedef = dtypedef;
147}
148
149/**
150 * Returns the type represented by this_type[size].
151 *
152 * In the case of a generic DCParameter, this means it returns a
153 * DCArrayParameter wrapped around this type.
154 */
159
160/**
161 *
162 */
163void DCParameter::
164output(ostream &out, bool brief) const {
165 string name;
166 if (!brief) {
167 name = get_name();
168 }
169 output_instance(out, brief, "", name, "");
170}
171
172/**
173 *
174 */
175void DCParameter::
176write(ostream &out, bool brief, int indent_level) const {
177 // we must always output the name when the parameter occurs by itself within
178 // a class, so we pass get_name() even if brief is true.
179 write_instance(out, brief, indent_level, "", get_name(), "");
180}
181
182/**
183 * Formats the parameter in the C++-like dc syntax as a typename and
184 * identifier.
185 */
187write_instance(ostream &out, bool brief, int indent_level,
188 const string &prename, const string &name,
189 const string &postname) const {
190 indent(out, indent_level);
191 output_instance(out, brief, prename, name, postname);
192 output_keywords(out);
193 out << ";";
194 if (!brief && _number >= 0) {
195 out << " // field " << _number;
196 }
197 out << "\n";
198}
199
200/**
201 * Formats the instance like output_instance, but uses the typedef name
202 * instead.
203 */
205output_typedef_name(ostream &out, bool, const string &prename,
206 const string &name, const string &postname) const {
207 out << get_typedef()->get_name();
208 if (!prename.empty() || !name.empty() || !postname.empty()) {
209 out << " " << prename << name << postname;
210 }
211}
212
213/**
214 * Formats the instance like write_instance, but uses the typedef name
215 * instead.
216 */
218write_typedef_name(ostream &out, bool brief, int indent_level,
219 const string &prename, const string &name,
220 const string &postname) const {
221 indent(out, indent_level)
222 << get_typedef()->get_name();
223 if (!prename.empty() || !name.empty() || !postname.empty()) {
224 out << " " << prename << name << postname;
225 }
226 output_keywords(out);
227 out << ";";
228 if (!brief && _number >= 0) {
229 out << " // field " << _number;
230 }
231 out << "\n";
232}
233
234/**
235 * Accumulates the properties of this type into the hash.
236 */
238generate_hash(HashGenerator &hashgen) const {
239 // We specifically don't call up to DCField::generate_hash(), since the
240 // parameter name is not actually significant to the hash.
241
242 if (get_num_keywords() != 0) {
244 }
245}
This represents an array of some other kind of object, meaning this parameter type accepts an arbitra...
This represents a class (or struct) object used as a parameter itself.
A single field of a Distributed Class, either atomic or molecular.
Definition dcField.h:37
void generate_hash(HashGenerator &hashgen) const
Accumulates the properties of these keywords into the hash.
int get_num_keywords() const
Returns the number of keywords in the list.
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
virtual void write_instance(std::ostream &out, bool brief, int indent_level, const std::string &prename, const std::string &name, const std::string &postname) const
Formats the parameter in the C++-like dc syntax as a typename and identifier.
virtual void generate_hash(HashGenerator &hashgen) const
Accumulates the properties of this type into the hash.
void write_typedef_name(std::ostream &out, bool brief, int indent_level, const std::string &prename, const std::string &name, const std::string &postname) const
Formats the instance like write_instance, but uses the typedef name instead.
const DCTypedef * get_typedef() const
If this type has been referenced from a typedef, returns the DCTypedef instance, or NULL if the type ...
void output_typedef_name(std::ostream &out, bool brief, const std::string &prename, const std::string &name, const std::string &postname) const
Formats the instance like output_instance, but uses the typedef name instead.
virtual DCParameter * append_array_specification(const DCUnsignedIntRange &size)
Returns the type represented by this_type[size].
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...
This represents a switch object used as a parameter itself, which packs the appropriate fields of the...
This represents a single typedef declaration in the dc file.
Definition dcTypedef.h:26
const std::string & get_name() const
Returns the name of this typedef.
Definition dcTypedef.cxx:68
This class generates an arbitrary hash number from a sequence of ints.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
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 indent.cxx:20