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 }