File indexing completed on 2024-06-16 04:23:16
0001 /* 0002 SPDX-FileCopyrightText: 2006 Roberto Raggi <roberto@kdevelop.org> 0003 SPDX-FileCopyrightText: 2006-2008 Hamish Rodda <rodda@kde.org> 0004 SPDX-FileCopyrightText: 2007-2008 David Nolden <david.nolden.kdevelop@art-master.de> 0005 0006 SPDX-License-Identifier: LGPL-2.0-only 0007 */ 0008 0009 #include "delayedtype.h" 0010 0011 #include "typeregister.h" 0012 #include "typesystem.h" 0013 0014 #include <QHash> 0015 0016 namespace KDevelop { 0017 REGISTER_TYPE(DelayedType); 0018 0019 DelayedType::DelayedType(DelayedTypeData& data) : AbstractType(data) 0020 { 0021 } 0022 0023 AbstractType* DelayedType::clone() const 0024 { 0025 return new DelayedType(*this); 0026 } 0027 0028 bool DelayedType::equals(const AbstractType* _rhs) const 0029 { 0030 if (this == _rhs) 0031 return true; 0032 0033 if (!AbstractType::equals(_rhs)) 0034 return false; 0035 0036 Q_ASSERT(dynamic_cast<const DelayedType*>(_rhs)); 0037 const auto* rhs = static_cast<const DelayedType*>(_rhs); 0038 0039 return d_func()->m_identifier == rhs->d_func()->m_identifier && rhs->d_func()->m_kind == d_func()->m_kind; 0040 } 0041 0042 AbstractType::WhichType DelayedType::whichType() const 0043 { 0044 return AbstractType::TypeDelayed; 0045 } 0046 0047 QString DelayedType::toString() const 0048 { 0049 return AbstractType::toString(false) + identifier().toString(); 0050 } 0051 0052 DelayedType::Kind DelayedType::kind() const 0053 { 0054 return d_func()->m_kind; 0055 } 0056 0057 void DelayedType::setKind(Kind kind) 0058 { 0059 d_func_dynamic()->m_kind = kind; 0060 } 0061 0062 DelayedType::DelayedType() 0063 : AbstractType(createData<DelayedType>()) 0064 { 0065 } 0066 0067 DelayedType::DelayedType(const DelayedType& rhs) : AbstractType(copyData<DelayedType>(*rhs.d_func())) 0068 { 0069 } 0070 0071 DelayedType::~DelayedType() 0072 { 0073 } 0074 0075 void DelayedType::setIdentifier(const IndexedTypeIdentifier& identifier) 0076 { 0077 d_func_dynamic()->m_identifier = identifier; 0078 } 0079 0080 IndexedTypeIdentifier DelayedType::identifier() const 0081 { 0082 return d_func()->m_identifier; 0083 } 0084 0085 void DelayedType::accept0(KDevelop::TypeVisitor* v) const 0086 { 0087 v->visit(this); 0088 /* v->endVisit(this);*/ 0089 } 0090 0091 inline uint qHash(DelayedType::Kind kind) 0092 { 0093 return ::qHash(static_cast<quint8>(kind)); 0094 } 0095 0096 uint DelayedType::hash() const 0097 { 0098 return KDevHash(AbstractType::hash()) << d_func()->m_identifier.hash() << d_func()->m_kind; 0099 } 0100 }