1 /****************************************************************************** 2 * 3 * 4 * 5 * Copyright (C) 1997-2015 by Dimitri van Heesch. 6 * 7 * Permission to use, copy, modify, and distribute this software and its 8 * documentation under the terms of the GNU General Public License is hereby 9 * granted. No representations are made about the suitability of this software 10 * for any purpose. It is provided "as is" without express or implied warranty. 11 * See the GNU General Public License for more details. 12 * 13 * Documents produced by Doxygen are derivative works derived from the 14 * input used in their production; they are not affected by this license. 15 * 16 */ 17 18 #ifndef MEMBERNAME_H 19 #define MEMBERNAME_H 20 21 #include "memberdef.h" 22 #include "linkedmap.h" 23 24 class MemberName 25 { 26 public: 27 using Ptr = std::unique_ptr<MemberDef>; 28 using Vec = std::vector<Ptr>; 29 using iterator = typename Vec::iterator; 30 using const_iterator = typename Vec::const_iterator; 31 using reverse_iterator = typename Vec::reverse_iterator; 32 using const_reverse_iterator = typename Vec::const_reverse_iterator; 33 MemberName(const QCString & name)34 MemberName(const QCString &name) : m_name(name) {} memberName()35 QCString memberName() const { return m_name; } 36 begin()37 iterator begin() { return m_members.begin(); } end()38 iterator end() { return m_members.end(); } begin()39 const_iterator begin() const { return m_members.begin(); } end()40 const_iterator end() const { return m_members.end(); } cbegin()41 const_iterator cbegin() const { return m_members.cbegin(); } cend()42 const_iterator cend() const { return m_members.cend(); } rbegin()43 reverse_iterator rbegin() { return m_members.rbegin(); } rend()44 reverse_iterator rend() { return m_members.rend(); } crbegin()45 const_reverse_iterator crbegin() const { return m_members.crbegin(); } crend()46 const_reverse_iterator crend() const { return m_members.crend(); } empty()47 bool empty() const { return m_members.empty(); } size()48 size_t size() const { return m_members.size(); } back()49 Ptr &back() { return m_members.back(); } back()50 const Ptr &back() const { return m_members.back(); } front()51 Ptr &front() { return m_members.front(); } front()52 const Ptr &front() const { return m_members.front(); } push_back(Ptr && p)53 void push_back(Ptr &&p) { m_members.push_back(std::move(p)); } 54 55 private: 56 QCString m_name; 57 Vec m_members; 58 }; 59 60 /** Ordered dictionary of MemberName objects. */ 61 class MemberNameLinkedMap : public LinkedMap<MemberName> 62 { 63 }; 64 65 /** Data associated with a MemberDef in an inheritance relation. */ 66 class MemberInfo 67 { 68 public: MemberInfo(const MemberDef * md,Protection p,Specifier v,bool inh)69 MemberInfo(const MemberDef *md,Protection p,Specifier v,bool inh) : 70 m_memberDef(md), m_prot(p), m_virt(v), m_inherited(inh) {} ~MemberInfo()71 ~MemberInfo() {} 72 73 // getters memberDef()74 const MemberDef *memberDef() { return m_memberDef; } memberDef()75 const MemberDef *memberDef() const { return m_memberDef; } prot()76 Protection prot() const { return m_prot; } virt()77 Specifier virt() const { return m_virt; } inherited()78 bool inherited() const { return m_inherited; } scopePath()79 QCString scopePath() const { return m_scopePath; } ambiguityResolutionScope()80 QCString ambiguityResolutionScope() const { return m_ambiguityResolutionScope; } ambigClass()81 const ClassDef *ambigClass() const { return m_ambigClass; } 82 83 // setters setAmbiguityResolutionScope(const QCString & s)84 void setAmbiguityResolutionScope(const QCString &s) { m_ambiguityResolutionScope = s; } setScopePath(const QCString & s)85 void setScopePath(const QCString &s) { m_scopePath = s; } setAmbigClass(const ClassDef * cd)86 void setAmbigClass(const ClassDef *cd) { m_ambigClass = cd; } 87 88 private: 89 const MemberDef *m_memberDef; 90 Protection m_prot; 91 Specifier m_virt; 92 bool m_inherited; 93 QCString m_scopePath; 94 QCString m_ambiguityResolutionScope; 95 const ClassDef *m_ambigClass = 0; 96 }; 97 98 class MemberNameInfo 99 { 100 public: 101 using Ptr = std::unique_ptr<MemberInfo>; 102 using Vec = std::vector<Ptr>; 103 using iterator = typename Vec::iterator; 104 using const_iterator = typename Vec::const_iterator; 105 MemberNameInfo(const QCString & name)106 MemberNameInfo(const QCString &name) : m_name(name) {} memberName()107 QCString memberName() const { return m_name; } 108 begin()109 iterator begin() { return m_members.begin(); } end()110 iterator end() { return m_members.end(); } begin()111 const_iterator begin() const { return m_members.begin(); } end()112 const_iterator end() const { return m_members.end(); } empty()113 bool empty() const { return m_members.empty(); } size()114 size_t size() const { return m_members.size(); } back()115 Ptr &back() { return m_members.back(); } back()116 const Ptr &back() const { return m_members.back(); } front()117 Ptr &front() { return m_members.front(); } front()118 const Ptr &front() const { return m_members.front(); } push_back(Ptr && p)119 void push_back(Ptr &&p) { m_members.push_back(std::move(p)); } 120 121 private: 122 QCString m_name; 123 Vec m_members; 124 }; 125 126 class MemberNameInfoLinkedMap : public LinkedMap<MemberNameInfo> 127 { 128 }; 129 130 #endif 131