Doxygen
Loading...
Searching...
No Matches
membername.h
Go to the documentation of this file.
1/******************************************************************************
2 *
3 * Copyright (C) 1997-2026 by Dimitri van Heesch.
4 *
5 * Permission to use, copy, modify, and distribute this software and its
6 * documentation under the terms of the GNU General Public License is hereby
7 * granted. No representations are made about the suitability of this software
8 * for any purpose. It is provided "as is" without express or implied warranty.
9 * See the GNU General Public License for more details.
10 *
11 * Documents produced by Doxygen are derivative works derived from the
12 * input used in their production; they are not affected by this license.
13 *
14 */
15
16#ifndef MEMBERNAME_H
17#define MEMBERNAME_H
18
19#include "linkedmap.h"
20#include "memberdef.h"
21
23{
24 public:
25 using Ptr = std::unique_ptr<MemberDef>;
26 using Vec = std::vector<Ptr>;
27 using iterator = typename Vec::iterator;
28 using const_iterator = typename Vec::const_iterator;
29 using reverse_iterator = typename Vec::reverse_iterator;
30 using const_reverse_iterator = typename Vec::const_reverse_iterator;
31
32 MemberName(const DString &name) : m_name(name) {}
33 DString memberName() const { return m_name; }
34
35 iterator begin() { return m_members.begin(); }
36 iterator end() { return m_members.end(); }
37 const_iterator begin() const { return m_members.begin(); }
38 const_iterator end() const { return m_members.end(); }
39 const_iterator cbegin() const { return m_members.cbegin(); }
40 const_iterator cend() const { return m_members.cend(); }
41 reverse_iterator rbegin() { return m_members.rbegin(); }
42 reverse_iterator rend() { return m_members.rend(); }
43 const_reverse_iterator crbegin() const { return m_members.crbegin(); }
44 const_reverse_iterator crend() const { return m_members.crend(); }
45 bool empty() const { return m_members.empty(); }
46 size_t size() const { return m_members.size(); }
47 Ptr &back() { return m_members.back(); }
48 const Ptr &back() const { return m_members.back(); }
49 Ptr &front() { return m_members.front(); }
50 const Ptr &front() const { return m_members.front(); }
51 iterator erase(iterator it) { return m_members.erase(it); }
52 void push_back(Ptr &&p) { m_members.push_back(std::move(p)); }
53
54 private:
57};
58
59/** Ordered dictionary of MemberName objects. */
60class MemberNameLinkedMap final : public LinkedMap<MemberName>
61{
62 public:
63 MemberName::Ptr take(const DString &key,const MemberDef *value)
64 {
65 MemberName::Ptr result;
66 MemberName *mn = find(key);
67 if (mn)
68 {
69 auto it = std::find_if(mn->begin(),mn->end(),[&value](const auto &el) { return el.get()==value; });
70 if (it != mn->end())
71 {
72 it->swap(result);
73 mn->erase(it);
74 }
75 if (mn->empty())
76 {
77 del(key);
78 }
79 }
80 return result;
81 }
82};
83
84/** Data associated with a MemberDef in an inheritance relation. */
86{
87 public:
88 MemberInfo(MemberDef *md,Protection p,Specifier v,bool inh,bool vbc) :
89 m_memberDef(md), m_prot(p), m_virt(v), m_inherited(inh), m_virtBaseClass(vbc) {}
90
91 // getters
93 const MemberDef *memberDef() const { return m_memberDef; }
94 Protection prot() const { return m_prot; }
95 Specifier virt() const { return m_virt; }
96 bool inherited() const { return m_inherited; }
97 DString scopePath() const { return m_scopePath; }
99 const ClassDef *ambigClass() const { return m_ambigClass; }
100 bool virtualBaseClass() const { return m_virtBaseClass; }
101
102 // setters
104 void setScopePath(const DString &s) { m_scopePath = s; }
105 void setAmbigClass(const ClassDef *cd) { m_ambigClass = cd; }
106
107 private:
114 const ClassDef *m_ambigClass = nullptr;
116};
117
119{
120 public:
121 using Ptr = std::unique_ptr<MemberInfo>;
122 using Vec = std::vector<Ptr>;
123 using iterator = typename Vec::iterator;
124 using const_iterator = typename Vec::const_iterator;
125
126 MemberNameInfo(const DString &name) : m_name(name) {}
127 DString memberName() const { return m_name; }
128
129 iterator begin() { return m_members.begin(); }
130 iterator end() { return m_members.end(); }
131 const_iterator begin() const { return m_members.begin(); }
132 const_iterator end() const { return m_members.end(); }
133 bool empty() const { return m_members.empty(); }
134 size_t size() const { return m_members.size(); }
135 Ptr &back() { return m_members.back(); }
136 const Ptr &back() const { return m_members.back(); }
137 Ptr &front() { return m_members.front(); }
138 const Ptr &front() const { return m_members.front(); }
139 void push_back(Ptr &&p) { m_members.push_back(std::move(p)); }
140 iterator erase(iterator pos) { return m_members.erase(pos); }
141
142 private:
145};
146
147class MemberNameInfoLinkedMap final : public LinkedMap<MemberNameInfo>
148{
149};
150
151#endif
A abstract class representing of a compound symbol.
Definition classdef.h:100
A String class for use with Doxygen wrapping std::string and adding some additional functionality off...
Definition dstring.h:88
Container class representing a vector of objects with keys.
Definition linkedmap.h:36
bool del(const DString &key)
Definition linkedmap.h:183
const MemberName * find(const std::string &key) const
Definition linkedmap.h:47
A model of a class/file/namespace member symbol.
Definition memberdef.h:45
void setScopePath(const DString &s)
Definition membername.h:104
Protection prot() const
Definition membername.h:94
DString scopePath() const
Definition membername.h:97
MemberDef * memberDef()
Definition membername.h:92
MemberInfo(MemberDef *md, Protection p, Specifier v, bool inh, bool vbc)
Definition membername.h:88
MemberDef * m_memberDef
Definition membername.h:108
Protection m_prot
Definition membername.h:109
DString m_scopePath
Definition membername.h:112
bool m_inherited
Definition membername.h:111
Specifier m_virt
Definition membername.h:110
Specifier virt() const
Definition membername.h:95
bool virtualBaseClass() const
Definition membername.h:100
DString ambiguityResolutionScope() const
Definition membername.h:98
const ClassDef * ambigClass() const
Definition membername.h:99
void setAmbigClass(const ClassDef *cd)
Definition membername.h:105
const ClassDef * m_ambigClass
Definition membername.h:114
bool m_virtBaseClass
Definition membername.h:115
bool inherited() const
Definition membername.h:96
DString m_ambiguityResolutionScope
Definition membername.h:113
void setAmbiguityResolutionScope(const DString &s)
Definition membername.h:103
const MemberDef * memberDef() const
Definition membername.h:93
Ptr & back()
Definition membername.h:47
const_reverse_iterator crbegin() const
Definition membername.h:43
Ptr & front()
Definition membername.h:49
reverse_iterator rend()
Definition membername.h:42
const_iterator cend() const
Definition membername.h:40
DString m_name
Definition membername.h:55
const Ptr & front() const
Definition membername.h:50
const_iterator begin() const
Definition membername.h:37
typename Vec::reverse_iterator reverse_iterator
Definition membername.h:29
DString memberName() const
Definition membername.h:33
const Ptr & back() const
Definition membername.h:48
iterator erase(iterator it)
Definition membername.h:51
const_reverse_iterator crend() const
Definition membername.h:44
typename Vec::const_reverse_iterator const_reverse_iterator
Definition membername.h:30
typename Vec::const_iterator const_iterator
Definition membername.h:28
size_t size() const
Definition membername.h:46
Vec m_members
Definition membername.h:56
const_iterator end() const
Definition membername.h:38
typename Vec::iterator iterator
Definition membername.h:27
reverse_iterator rbegin()
Definition membername.h:41
const_iterator cbegin() const
Definition membername.h:39
std::unique_ptr< MemberDef > Ptr
Definition membername.h:25
bool empty() const
Definition membername.h:45
iterator begin()
Definition membername.h:35
std::vector< Ptr > Vec
Definition membername.h:26
iterator end()
Definition membername.h:36
MemberName(const DString &name)
Definition membername.h:32
void push_back(Ptr &&p)
Definition membername.h:52
std::vector< Ptr > Vec
Definition membername.h:122
const Ptr & front() const
Definition membername.h:138
const_iterator end() const
Definition membername.h:132
typename Vec::const_iterator const_iterator
Definition membername.h:124
const_iterator begin() const
Definition membername.h:131
bool empty() const
Definition membername.h:133
void push_back(Ptr &&p)
Definition membername.h:139
iterator begin()
Definition membername.h:129
iterator end()
Definition membername.h:130
size_t size() const
Definition membername.h:134
typename Vec::iterator iterator
Definition membername.h:123
DString memberName() const
Definition membername.h:127
MemberNameInfo(const DString &name)
Definition membername.h:126
const Ptr & back() const
Definition membername.h:136
iterator erase(iterator pos)
Definition membername.h:140
std::unique_ptr< MemberInfo > Ptr
Definition membername.h:121
Ordered dictionary of MemberName objects.
Definition membername.h:61
MemberName::Ptr take(const DString &key, const MemberDef *value)
Definition membername.h:63
Protection
Definition types.h:32
Specifier
Definition types.h:80