OpenDDS  Snapshot(2023/04/07-19:43)
Public Types | Public Member Functions | Static Public Member Functions | Private Member Functions | Private Attributes | List of all members
TopicKeys::Iterator Class Reference

#include <topic_keys.h>

Collaboration diagram for TopicKeys::Iterator:
Collaboration graph
[legend]

Public Types

typedef AST_Decl * value_type
 { More...
 
typedef AST_Decl ** pointer
 
typedef AST_Decl *& reference
 
typedef std::input_iterator_tag iterator_category
 

Public Member Functions

 Iterator ()
 } More...
 
 Iterator (TopicKeys &parent)
 
 Iterator (const Iterator &other)
 
 ~Iterator ()
 
Iteratoroperator= (const Iterator &other)
 
Iteratoroperator++ ()
 
Iterator operator++ (int)
 
AST_Decl * operator* () const
 
bool operator== (const Iterator &other) const
 
bool operator!= (const Iterator &other) const
 
std::string path ()
 
std::string canonical_path ()
 
size_t level () const
 
RootType root_type () const
 
RootType parents_root_type () const
 
AST_Type * get_ast_type () const
 

Static Public Member Functions

static Iterator end_value ()
 

Private Member Functions

 Iterator (AST_Type *root, Iterator *parent)
 
 Iterator (AST_Field *root, Iterator *parent)
 
void path_i (std::stringstream &ss, bool canonical=false)
 
void cleanup ()
 

Private Attributes

Iteratorparent_
 
unsigned pos_
 
Iteratorchild_
 
AST_Decl * current_value_
 Current value of the entire iterator stack. More...
 
AST_Decl * root_
 
RootType root_type_
 
size_t level_
 
bool recursive_
 
std::vector< size_t > dimensions_
 The Dimensions of the Array. More...
 
size_t element_count_
 Element Count in the Array. More...
 
bool implied_keys_
 Used in struct field key iteration. More...
 

Detailed Description

Iterator for traversing the TAO_IDL AST, looking for nodes within a topic type node that are annotated with .

Definition at line 72 of file topic_keys.h.

Member Typedef Documentation

◆ iterator_category

typedef std::input_iterator_tag TopicKeys::Iterator::iterator_category

Definition at line 81 of file topic_keys.h.

◆ pointer

typedef AST_Decl** TopicKeys::Iterator::pointer

Definition at line 79 of file topic_keys.h.

◆ reference

typedef AST_Decl*& TopicKeys::Iterator::reference

Definition at line 80 of file topic_keys.h.

◆ value_type

{

Standard Iterator Type Declarations

Definition at line 78 of file topic_keys.h.

Constructor & Destructor Documentation

◆ Iterator() [1/5]

TopicKeys::Iterator::Iterator ( )

}

Create new iterator equal to TopicKeys::end()

Definition at line 70 of file topic_keys.cpp.

Referenced by operator++(), and operator=().

71  : parent_(0)
72  , pos_(0)
73  , child_(0)
74  , current_value_(0)
75  , root_(0)
77  , level_(0)
78  , recursive_(false)
79  , element_count_(0)
80  , implied_keys_(false)
81 {
82 }
bool implied_keys_
Used in struct field key iteration.
Definition: topic_keys.h:160
Iterator * child_
Definition: topic_keys.h:147
Iterator * parent_
Definition: topic_keys.h:145
AST_Decl * root_
Definition: topic_keys.h:150
size_t element_count_
Element Count in the Array.
Definition: topic_keys.h:157
AST_Decl * current_value_
Current value of the entire iterator stack.
Definition: topic_keys.h:149

◆ Iterator() [2/5]

TopicKeys::Iterator::Iterator ( TopicKeys parent)

Create new iterator pointing to the first topic key or equal to TopicKeys::end() if there are no keys.

Definition at line 84 of file topic_keys.cpp.

References TopicKeys::root(), root_, TopicKeys::root_type(), and root_type_.

85  : parent_(0)
86  , pos_(0)
87  , child_(0)
88  , current_value_(0)
89  , level_(0)
90  , recursive_(parent.recursive())
91  , element_count_(0)
92  , implied_keys_(false)
93 {
94  root_ = parent.root();
95  root_type_ = parent.root_type();
96  ++*this;
97 }
bool implied_keys_
Used in struct field key iteration.
Definition: topic_keys.h:160
static RootType root_type(AST_Type *type)
Definition: topic_keys.cpp:15
Iterator * child_
Definition: topic_keys.h:147
Iterator * parent_
Definition: topic_keys.h:145
AST_Decl * root_
Definition: topic_keys.h:150
size_t element_count_
Element Count in the Array.
Definition: topic_keys.h:157
AST_Decl * current_value_
Current value of the entire iterator stack.
Definition: topic_keys.h:149
AST_Decl * root() const
Definition: topic_keys.cpp:505
bool recursive() const
Definition: topic_keys.cpp:528

◆ Iterator() [3/5]

TopicKeys::Iterator::Iterator ( const Iterator other)

Create a completely separate copy of another iterator

Definition at line 134 of file topic_keys.cpp.

135  : pos_(0)
136  , child_(0)
137  , current_value_(0)
138  , root_(0)
140  , level_(0)
141  , recursive_(false)
142  , element_count_(0)
143  , implied_keys_(false)
144 {
145  *this = other;
146 }
bool implied_keys_
Used in struct field key iteration.
Definition: topic_keys.h:160
Iterator * child_
Definition: topic_keys.h:147
AST_Decl * root_
Definition: topic_keys.h:150
size_t element_count_
Element Count in the Array.
Definition: topic_keys.h:157
AST_Decl * current_value_
Current value of the entire iterator stack.
Definition: topic_keys.h:149

◆ ~Iterator()

TopicKeys::Iterator::~Iterator ( )

Definition at line 148 of file topic_keys.cpp.

References cleanup().

149 {
150  cleanup();
151 }

◆ Iterator() [4/5]

TopicKeys::Iterator::Iterator ( AST_Type *  root,
Iterator parent 
)
private

Definition at line 99 of file topic_keys.cpp.

References TopicKeys::root(), root_, TopicKeys::root_type(), and root_type_.

100  : parent_(parent)
101  , pos_(0)
102  , child_(0)
103  , current_value_(0)
104  , level_(parent->level() + 1)
105  , recursive_(parent->recursive_)
106  , element_count_(0)
107  , implied_keys_(false)
108 {
110  root_ = root;
111  ++(*this);
112 }
bool implied_keys_
Used in struct field key iteration.
Definition: topic_keys.h:160
Iterator * child_
Definition: topic_keys.h:147
Iterator * parent_
Definition: topic_keys.h:145
AST_Decl * root_
Definition: topic_keys.h:150
size_t element_count_
Element Count in the Array.
Definition: topic_keys.h:157
AST_Decl * current_value_
Current value of the entire iterator stack.
Definition: topic_keys.h:149
AST_Decl * root() const
Definition: topic_keys.cpp:505
RootType root_type() const
Definition: topic_keys.cpp:510

◆ Iterator() [5/5]

TopicKeys::Iterator::Iterator ( AST_Field *  root,
Iterator parent 
)
private

Definition at line 114 of file topic_keys.cpp.

References TopicKeys::PrimitiveType, TopicKeys::root(), root_, TopicKeys::root_type(), and root_type_.

115  : parent_(parent)
116  , pos_(0)
117  , child_(0)
118  , current_value_(0)
119  , level_(parent->level() + 1)
120  , recursive_(parent->recursive_)
121  , element_count_(0)
122  , implied_keys_(false)
123 {
124  AST_Type* type = root->field_type()->unaliased_type();
126  if (root_type_ == PrimitiveType) {
127  root_ = root;
128  } else {
129  root_ = type;
130  }
131  ++(*this);
132 }
bool implied_keys_
Used in struct field key iteration.
Definition: topic_keys.h:160
Iterator * child_
Definition: topic_keys.h:147
Iterator * parent_
Definition: topic_keys.h:145
AST_Decl * root_
Definition: topic_keys.h:150
size_t element_count_
Element Count in the Array.
Definition: topic_keys.h:157
AST_Decl * current_value_
Current value of the entire iterator stack.
Definition: topic_keys.h:149
AST_Decl * root() const
Definition: topic_keys.cpp:505
RootType root_type() const
Definition: topic_keys.cpp:510

Member Function Documentation

◆ canonical_path()

std::string TopicKeys::Iterator::canonical_path ( )

Definition at line 342 of file topic_keys.cpp.

References path_i().

343 {
344  std::stringstream ss;
345  path_i(ss, true);
346  return ss.str();
347 }
void path_i(std::stringstream &ss, bool canonical=false)
Definition: topic_keys.cpp:349

◆ cleanup()

void TopicKeys::Iterator::cleanup ( void  )
private

Definition at line 392 of file topic_keys.cpp.

References child_.

Referenced by operator=(), and ~Iterator().

393 {
394  delete child_;
395 }
Iterator * child_
Definition: topic_keys.h:147

◆ end_value()

TopicKeys::Iterator TopicKeys::Iterator::end_value ( )
static

Definition at line 533 of file topic_keys.cpp.

References TopicKeys::end().

Referenced by TopicKeys::end(), and operator++().

534 {
535  static Iterator end;
536  return end;
537 }
Iterator end()
Definition: topic_keys.cpp:500

◆ get_ast_type()

AST_Type * TopicKeys::Iterator::get_ast_type ( ) const

Get the AST_Type of the current value

Returns 0 if the iterator is invalid

Definition at line 412 of file topic_keys.cpp.

References TopicKeys::ArrayType, child_, current_value_, get_ast_type(), level_, parents_root_type(), recursive_, root_type(), TopicKeys::SequenceType, TopicKeys::StructureType, and TopicKeys::UnionType.

Referenced by get_ast_type().

413 {
414  AST_Field* field = 0;
415  switch (root_type()) {
416  case UnionType:
417  return dynamic_cast<AST_Type*>(current_value_);
418  case StructureType:
419  if (level_ > 0) {
420  if (!recursive_) {
421  return dynamic_cast<AST_Type*>(current_value_);
422  }
423  } else {
424  return child_->get_ast_type();
425  }
426  break;
427  default:
428  break;
429  }
430  switch (parents_root_type()) {
431  case StructureType:
432  field = dynamic_cast<AST_Field*>(current_value_);
433  if (field) {
434  return field->field_type();
435  }
436  break;
437  case ArrayType:
438  return dynamic_cast<AST_Type*>(current_value_);
439  case SequenceType:
440  return dynamic_cast<AST_Type*>(current_value_);
441  default:
442  break;
443  }
444  return 0;
445 }
RootType parents_root_type() const
Definition: topic_keys.cpp:402
Iterator * child_
Definition: topic_keys.h:147
RootType root_type() const
Definition: topic_keys.cpp:397
AST_Type * get_ast_type() const
Definition: topic_keys.cpp:412
AST_Decl * current_value_
Current value of the entire iterator stack.
Definition: topic_keys.h:149

◆ level()

size_t TopicKeys::Iterator::level ( ) const

Get the level of recursion

Definition at line 407 of file topic_keys.cpp.

References child_, level(), and level_.

Referenced by level().

408 {
409  return child_ ? child_->level() : level_;
410 }
Iterator * child_
Definition: topic_keys.h:147
size_t level() const
Definition: topic_keys.cpp:407

◆ operator!=()

bool TopicKeys::Iterator::operator!= ( const Iterator other) const

Definition at line 330 of file topic_keys.cpp.

331 {
332  return !(*this == other);
333 }

◆ operator*()

AST_Decl * TopicKeys::Iterator::operator* ( void  ) const

Definition at line 308 of file topic_keys.cpp.

References current_value_.

309 {
310  return current_value_;
311 }
AST_Decl * current_value_
Current value of the entire iterator stack.
Definition: topic_keys.h:149

◆ operator++() [1/2]

TopicKeys::Iterator & TopicKeys::Iterator::operator++ ( void  )

Definition at line 169 of file topic_keys.cpp.

References TopicKeys::ArrayType, be_global, Fields::begin(), OpenDDS::DCPS::child(), child_, current_value_, dimensions_, element_count_, Fields::end(), end_value(), implied_keys_, TopicKeys::InvalidType, Iterator(), level_, pos_, TopicKeys::PrimitiveType, recursive_, root_, root_type_, TopicKeys::SequenceType, TopicKeys::StructureType, and TopicKeys::UnionType.

170 {
171  // Nop if we are a invalid iterator of any type
172  if (!root_ || root_type_ == InvalidType) {
173  return *this;
174  }
175 
176  // If we have a child iterator, ask it for the next value
177  if (child_) {
178  Iterator& child = *child_;
179  ++child;
180  if (child == end_value()) {
181  delete child_;
182  child_ = 0;
183  pos_++;
184  } else {
186  return *this;
187  }
188  }
189 
190  if (root_type_ == StructureType) {
191  // If we are recursive and at a structure, look for key fields
192  if (recursive_ || level_ == 0) {
193  AST_Structure* struct_root = dynamic_cast<AST_Structure*>(root_);
194  if (!struct_root) {
195  throw Error(root_, "Invalid Key Iterator");
196  }
197  const Fields fields(struct_root);
198  const Fields::Iterator fields_end = fields.end();
199 
200  // If a nested struct marked as a key has no keys, all the fields are
201  // implied to be keys (expect those marked with @key(FALSE)).
202  if (pos_ == 0) {
203  if (level_ > 0) {
204  implied_keys_ = true;
205  for (Fields::Iterator i = fields.begin(); i != fields_end && implied_keys_; ++i) {
206  bool key_annotation_value;
207  const bool has_key_annotation = be_global->check_key(*i, key_annotation_value);
208  if (has_key_annotation && key_annotation_value) {
209  implied_keys_ = false;
210  }
211  }
212  } else {
213  implied_keys_ = false;
214  }
215  }
216 
217  for (Fields::Iterator i = fields[pos_]; i != fields_end; ++i) {
218  bool key_annotation_value;
219  const bool has_key_annotation = be_global->check_key(*i, key_annotation_value);
220  const bool implied_key = implied_keys_ && !(has_key_annotation && !key_annotation_value);
221  if (key_annotation_value || implied_key) {
222  child_ = new Iterator(*i, this);
223  Iterator& child = *child_;
224  if (child == end_value()) {
225  delete child_;
226  child_ = 0;
227  throw Error(*i, std::string("field is ") + (implied_key ? "implicitly" : "explicitly") +
228  " marked as key, but does not contain any keys.");
229  } else {
231  pos_ = i.pos();
232  return *this;
233  }
234  }
235  }
236  } else if (pos_ == 0) { // Else return "this" once
237  pos_ = 1;
239  return *this;
240  }
241 
242  // If we are an array, use the base type and repeat for every element
243  } else if (root_type_ == ArrayType) {
244  AST_Array* array_node = dynamic_cast<AST_Array*>(root_);
245  if (!array_node) {
246  throw Error(root_, "Invalid Key Iterator");
247  }
248  if (element_count_ == 0) {
249  element_count_ = 1;
250  ACE_CDR::ULong array_dimension_count = array_node->n_dims();
251  for (unsigned i = 0; i < array_dimension_count; i++) {
252  ACE_CDR::ULong dimension = array_node->dims()[i]->ev()->u.ulval;
253  dimensions_.push_back(dimension);
254  element_count_ *= dimension;
255  }
256  }
257  AST_Type* type_node = array_node->base_type();
258  AST_Type* unaliased_type_node = type_node->unaliased_type();
259  if (pos_ < element_count_) {
260  child_ = new Iterator(unaliased_type_node, this);
261  Iterator& child = *child_;
262  if (child == Iterator()) {
263  delete child_;
264  child_ = 0;
265  throw Error(array_node, "array type is marked as key, but its base type "
266  "does not contain any keys.");
267  }
269  return *this;
270  }
271 
272  // If we are a union, use self if we have a key
273  } else if (root_type_ == UnionType) {
274  if (pos_ == 0) { // Only Allow One Iteration
275  pos_ = 1;
276  AST_Union* union_node = dynamic_cast<AST_Union*>(root_);
277  if (level_ > 0 || be_global->union_discriminator_is_key(union_node)) {
279  return *this;
280  }
281  }
282 
283  } else if (root_type_ == SequenceType) {
284  throw Error(root_, "sequence types are not supported as keys");
285 
286  // If we are a primitive type, use self
287  } else if (root_type_ == PrimitiveType) {
288  if (pos_ == 0) { // Only Allow One Iteration
289  pos_ = 1;
291  return *this;
292  }
293  }
294 
295  // Nothing left to do, set this to null
296  *this = end_value();
297 
298  return *this;
299 }
static Iterator end_value()
Definition: topic_keys.cpp:533
bool implied_keys_
Used in struct field key iteration.
Definition: topic_keys.h:160
Iterator * child_
Definition: topic_keys.h:147
static FilterEvaluator::AstNodeWrapper child(const FilterEvaluator::AstNodeWrapper &node, size_t idx)
AST_Decl * root_
Definition: topic_keys.h:150
ACE_UINT32 ULong
size_t element_count_
Element Count in the Array.
Definition: topic_keys.h:157
AST_Decl * current_value_
Current value of the entire iterator stack.
Definition: topic_keys.h:149
BE_GlobalData * be_global
Definition: be_global.cpp:43
std::vector< size_t > dimensions_
The Dimensions of the Array.
Definition: topic_keys.h:155

◆ operator++() [2/2]

TopicKeys::Iterator TopicKeys::Iterator::operator++ ( int  )

Definition at line 301 of file topic_keys.cpp.

302 {
303  Iterator prev(*this);
304  ++(*this);
305  return prev;
306 }

◆ operator=()

TopicKeys::Iterator & TopicKeys::Iterator::operator= ( const Iterator other)

Definition at line 153 of file topic_keys.cpp.

References child_, cleanup(), current_value_, dimensions_, element_count_, Iterator(), level_, parent_, pos_, recursive_, root_, and root_type_.

154 {
155  cleanup();
156  parent_ = other.parent_;
157  pos_ = other.pos_;
158  current_value_ = other.current_value_;
159  root_ = other.root_;
160  root_type_ = other.root_type_;
161  level_ = other.level_;
162  recursive_ = other.recursive_;
163  dimensions_ = other.dimensions_;
164  child_ = other.child_ ? new Iterator(*other.child_) : 0;
165  element_count_ = other.element_count_;
166  return *this;
167 }
Iterator * child_
Definition: topic_keys.h:147
Iterator * parent_
Definition: topic_keys.h:145
AST_Decl * root_
Definition: topic_keys.h:150
size_t element_count_
Element Count in the Array.
Definition: topic_keys.h:157
AST_Decl * current_value_
Current value of the entire iterator stack.
Definition: topic_keys.h:149
std::vector< size_t > dimensions_
The Dimensions of the Array.
Definition: topic_keys.h:155

◆ operator==()

bool TopicKeys::Iterator::operator== ( const Iterator other) const

Definition at line 313 of file topic_keys.cpp.

References child_, current_value_, dimensions_, element_count_, level_, parent_, pos_, recursive_, root_, and root_type_.

314 {
315  return
316  parent_ == other.parent_ &&
317  root_ == other.root_ &&
318  root_type_ == other.root_type_ &&
319  pos_ == other.pos_ &&
320  current_value_ == other.current_value_ &&
321  level_ == other.level_ &&
322  recursive_ == other.recursive_ &&
323  dimensions_ == other.dimensions_ &&
324  element_count_ == other.element_count_ &&
325  (
326  (child_ && other.child_) ? *child_ == *other.child_ : child_ == other.child_
327  );
328 }
Iterator * child_
Definition: topic_keys.h:147
Iterator * parent_
Definition: topic_keys.h:145
AST_Decl * root_
Definition: topic_keys.h:150
size_t element_count_
Element Count in the Array.
Definition: topic_keys.h:157
AST_Decl * current_value_
Current value of the entire iterator stack.
Definition: topic_keys.h:149
std::vector< size_t > dimensions_
The Dimensions of the Array.
Definition: topic_keys.h:155

◆ parents_root_type()

TopicKeys::RootType TopicKeys::Iterator::parents_root_type ( ) const

Get the final child's parent's root type

Returns InvalidType if it is the root or a invalid iterator

Definition at line 402 of file topic_keys.cpp.

References child_, TopicKeys::InvalidType, parent_, parents_root_type(), and root_type_.

Referenced by get_ast_type(), and parents_root_type().

403 {
405 }
RootType parents_root_type() const
Definition: topic_keys.cpp:402
Iterator * child_
Definition: topic_keys.h:147
Iterator * parent_
Definition: topic_keys.h:145

◆ path()

std::string TopicKeys::Iterator::path ( )

Get the path of the key in reference to the root_

Definition at line 335 of file topic_keys.cpp.

References path_i().

Referenced by keys_generator::gen_struct(), and marshal_generator::gen_typedef().

336 {
337  std::stringstream ss;
338  path_i(ss);
339  return ss.str();
340 }
void path_i(std::stringstream &ss, bool canonical=false)
Definition: topic_keys.cpp:349

◆ path_i()

void TopicKeys::Iterator::path_i ( std::stringstream &  ss,
bool  canonical = false 
)
private

Internal Recursive Impl. of path()

Definition at line 349 of file topic_keys.cpp.

References TopicKeys::ArrayType, canonical_name(), child_, dimensions_, level_, path_i(), pos_, TopicKeys::PrimitiveType, recursive_, root_, root_type_, TopicKeys::StructureType, and TopicKeys::UnionType.

Referenced by canonical_path(), path(), and path_i().

350 {
351  const char* error_msg = "Can't get path for invalid topic key iterator!";
352  if (root_type_ == StructureType) {
353  AST_Structure* struct_root = dynamic_cast<AST_Structure*>(root_);
354  if (!struct_root) {
355  throw Error(root_, error_msg);
356  }
357  AST_Field* field = *Fields(struct_root)[child_ ? pos_ : pos_ - 1];
358  ss << (level_ ? "." : "");
359  if (canonical) {
360  ss << canonical_name(field);
361  } else {
362  ss << field->local_name()->get_string();
363  }
364  } else if (root_type_ == UnionType) {
365  // Nothing
366  } else if (root_type_ == ArrayType) {
367  // Figure out what the vector version of the scalar pos_ is
368  std::vector<size_t>::reverse_iterator di, dfinished = dimensions_.rend();
369  size_t acc = pos_;
370  size_t div = 1;
371  std::vector<size_t> results;
372  for (di = dimensions_.rbegin(); di != dfinished; ++di) {
373  acc /= div;
374  results.push_back(acc % *di);
375  div = *di;
376  }
377 
378  std::vector<size_t>::reverse_iterator
379  ri = results.rbegin(),
380  rfinished = results.rend();
381  for (; ri != rfinished; ++ri) {
382  ss << '[' << *ri << ']';
383  }
384  } else if (root_type_ != PrimitiveType) {
385  throw Error(root_, error_msg);
386  }
387  if (child_ && recursive_) {
388  child_->path_i(ss, canonical);
389  }
390 }
void path_i(std::stringstream &ss, bool canonical=false)
Definition: topic_keys.cpp:349
std::string canonical_name(UTL_ScopedName *sn)
Iterator * child_
Definition: topic_keys.h:147
AST_Decl * root_
Definition: topic_keys.h:150
std::vector< size_t > dimensions_
The Dimensions of the Array.
Definition: topic_keys.h:155

◆ root_type()

TopicKeys::RootType TopicKeys::Iterator::root_type ( ) const

Get the root type of the final child

Definition at line 397 of file topic_keys.cpp.

References child_, root_type(), and root_type_.

Referenced by get_ast_type(), and root_type().

398 {
399  return child_ ? child_->root_type() : root_type_;
400 }
Iterator * child_
Definition: topic_keys.h:147
RootType root_type() const
Definition: topic_keys.cpp:397

Member Data Documentation

◆ child_

Iterator* TopicKeys::Iterator::child_
private

◆ current_value_

AST_Decl* TopicKeys::Iterator::current_value_
private

Current value of the entire iterator stack.

Definition at line 149 of file topic_keys.h.

Referenced by get_ast_type(), operator*(), operator++(), operator=(), and operator==().

◆ dimensions_

std::vector<size_t> TopicKeys::Iterator::dimensions_
private

The Dimensions of the Array.

Definition at line 155 of file topic_keys.h.

Referenced by operator++(), operator=(), operator==(), and path_i().

◆ element_count_

size_t TopicKeys::Iterator::element_count_
private

Element Count in the Array.

Definition at line 157 of file topic_keys.h.

Referenced by operator++(), operator=(), and operator==().

◆ implied_keys_

bool TopicKeys::Iterator::implied_keys_
private

Used in struct field key iteration.

Definition at line 160 of file topic_keys.h.

Referenced by operator++().

◆ level_

size_t TopicKeys::Iterator::level_
private

Definition at line 152 of file topic_keys.h.

Referenced by get_ast_type(), level(), operator++(), operator=(), operator==(), and path_i().

◆ parent_

Iterator* TopicKeys::Iterator::parent_
private

Definition at line 145 of file topic_keys.h.

Referenced by operator=(), operator==(), and parents_root_type().

◆ pos_

unsigned TopicKeys::Iterator::pos_
private

Definition at line 146 of file topic_keys.h.

Referenced by operator++(), operator=(), operator==(), and path_i().

◆ recursive_

bool TopicKeys::Iterator::recursive_
private

Definition at line 153 of file topic_keys.h.

Referenced by get_ast_type(), operator++(), operator=(), operator==(), and path_i().

◆ root_

AST_Decl* TopicKeys::Iterator::root_
private

Definition at line 150 of file topic_keys.h.

Referenced by Iterator(), operator++(), operator=(), operator==(), and path_i().

◆ root_type_

RootType TopicKeys::Iterator::root_type_
private

The documentation for this class was generated from the following files: