File indexing completed on 2024-06-23 04:34:45

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_TYPEALIASTYPE_H
0008 #define KDEVPLATFORM_TYPEALIASTYPE_H
0009 
0010 #include "abstracttype.h"
0011 #include "identifiedtype.h"
0012 #include "typeregister.h"
0013 #include <language/languageexport.h>
0014 
0015 namespace KDevelop {
0016 class TypeAliasTypeData;
0017 
0018 using TypeAliasTypeBase = MergeIdentifiedType<AbstractType>;
0019 
0020 class KDEVPLATFORMLANGUAGE_EXPORT TypeAliasType
0021     : public TypeAliasTypeBase
0022 {
0023 public:
0024     using Ptr = TypePtr<TypeAliasType>;
0025 
0026     TypeAliasType(const TypeAliasType& rhs) : TypeAliasTypeBase(copyData<TypeAliasType>(*rhs.d_func()))
0027     {
0028     }
0029 
0030     explicit TypeAliasType(TypeAliasTypeData& data) : TypeAliasTypeBase(data)
0031     {
0032     }
0033 
0034     TypeAliasType() : TypeAliasTypeBase(createData<TypeAliasType>())
0035     {
0036     }
0037 
0038     TypeAliasType& operator=(const TypeAliasType& rhs) = delete;
0039 
0040     KDevelop::AbstractType::Ptr type() const;
0041     void setType(const KDevelop::AbstractType::Ptr& type);
0042 
0043     uint hash() const override;
0044 
0045     QString toString() const override;
0046 
0047 //   virtual QString mangled() const;
0048 
0049     void exchangeTypes(KDevelop::TypeExchanger* exchanger) override;
0050 
0051     KDevelop::AbstractType* clone() const override;
0052 
0053     bool equals(const KDevelop::AbstractType* rhs) const override;
0054 
0055     KDevelop::AbstractType::WhichType whichType() const override;
0056 
0057     enum {
0058         Identity = 9
0059     };
0060 
0061     using Data = TypeAliasTypeData;
0062 
0063 protected:
0064     TYPE_DECLARE_DATA(TypeAliasType);
0065 
0066     void accept0 (KDevelop::TypeVisitor* v) const override;
0067 };
0068 }
0069 
0070 #endif // KDEVPLATFORM_TYPEALIASTYPE_H