File indexing completed on 2024-06-16 04:23:17
0001 /* 0002 SPDX-FileCopyrightText: 2009 David Nolden <david.nolden.kdevelop@art-master.de> 0003 0004 SPDX-License-Identifier: LGPL-2.0-only 0005 */ 0006 0007 #ifndef KDEVPLATFORM_UNSURETYPE_H 0008 #define KDEVPLATFORM_UNSURETYPE_H 0009 0010 #include "abstracttype.h" 0011 #include "typesystemdata.h" 0012 #include "../appendedlist.h" 0013 #include <language/languageexport.h> 0014 0015 namespace KDevelop { 0016 KDEVPLATFORMLANGUAGE_EXPORT DECLARE_LIST_MEMBER_HASH(UnsureTypeData, m_types, IndexedType) 0017 0018 struct KDEVPLATFORMLANGUAGE_EXPORT UnsureTypeData 0019 : public AbstractTypeData 0020 { 0021 UnsureTypeData() 0022 { 0023 initializeAppendedLists(m_dynamic); 0024 } 0025 0026 ~UnsureTypeData() 0027 { 0028 freeAppendedLists(); 0029 } 0030 0031 UnsureTypeData(const UnsureTypeData& rhs) : AbstractTypeData(rhs) 0032 { 0033 initializeAppendedLists(m_dynamic); 0034 copyListsFrom(rhs); 0035 } 0036 0037 UnsureTypeData& operator=(const UnsureTypeData& rhs) = delete; 0038 0039 START_APPENDED_LISTS_BASE(UnsureTypeData, AbstractTypeData) 0040 APPENDED_LIST_FIRST(UnsureTypeData, IndexedType, m_types) 0041 END_APPENDED_LISTS(UnsureTypeData, m_types) 0042 }; 0043 0044 class KDEVPLATFORMLANGUAGE_EXPORT UnsureType 0045 : public AbstractType 0046 { 0047 public: 0048 using Ptr = TypePtr<UnsureType>; 0049 0050 UnsureType(const UnsureType& rhs); 0051 UnsureType(); 0052 explicit UnsureType(UnsureTypeData& data); 0053 0054 UnsureType& operator=(const UnsureType& rhs) = delete; 0055 0056 KDevelop::AbstractType* clone() const override; 0057 QString toString() const override; 0058 bool equals(const KDevelop::AbstractType* rhs) const override; 0059 bool contains(const KDevelop::AbstractType* type) const override; 0060 uint hash() const override; 0061 KDevelop::AbstractType::WhichType whichType() const override; 0062 void exchangeTypes(KDevelop::TypeExchanger* exchanger) override; 0063 0064 virtual void addType(const IndexedType& type); 0065 virtual void removeType(const IndexedType& type); 0066 0067 ///Array of represented types. You can conveniently iterate it using the FOREACH_FUNCTION macro, 0068 ///or just access them using indices 0069 const IndexedType* types() const; 0070 ///Count of types accessible through types() 0071 uint typesSize() const; 0072 0073 enum { 0074 Identity = 39 0075 }; 0076 0077 using Data = UnsureTypeData; 0078 0079 protected: 0080 TYPE_DECLARE_DATA(UnsureType) 0081 void accept0(KDevelop::TypeVisitor* v) const override; 0082 }; 0083 } 0084 0085 #endif // KDEVPLATFORM_UNSURETYPE_H