File indexing completed on 2024-05-12 04:37:56

0001 /*
0002     SPDX-FileCopyrightText: 2002-2005 Roberto Raggi <roberto@kdevelop.org>
0003     SPDX-FileCopyrightText: 2006 Adam Treat <treat@kde.org>
0004     SPDX-FileCopyrightText: 2006 Hamish Rodda <rodda@kde.org>
0005     SPDX-FileCopyrightText: 2007-2008 David Nolden <david.nolden.kdevelop@art-master.de>
0006 
0007     SPDX-License-Identifier: LGPL-2.0-only
0008 */
0009 
0010 #include "classmemberdeclaration.h"
0011 #include "classmemberdeclarationdata.h"
0012 #include "duchainregister.h"
0013 #include <editor/rangeinrevision.h>
0014 
0015 namespace KDevelop {
0016 ClassMemberDeclarationData::ClassMemberDeclarationData()
0017     : m_accessPolicy(Declaration::Public)
0018     , m_isStatic(false)
0019     , m_isAuto(false)
0020     , m_isFriend(false)
0021     , m_isRegister(false)
0022     , m_isExtern(false)
0023     , m_isMutable(false)
0024     , m_bitWidth(ClassMemberDeclaration::NotABitField)
0025     , m_bitOffsetOf(-1)
0026 {
0027 }
0028 
0029 ClassMemberDeclaration::ClassMemberDeclaration(const ClassMemberDeclaration& rhs) : Declaration(*new ClassMemberDeclarationData(
0030             *rhs.d_func()))
0031 {
0032 }
0033 
0034 REGISTER_DUCHAIN_ITEM(ClassMemberDeclaration);
0035 
0036 Declaration* ClassMemberDeclaration::clonePrivate() const
0037 {
0038     return new ClassMemberDeclaration(*this);
0039 }
0040 
0041 ClassMemberDeclaration::ClassMemberDeclaration(const RangeInRevision& range, DUContext* context)
0042     : Declaration(*new ClassMemberDeclarationData, range)
0043 {
0044     d_func_dynamic()->setClassId(this);
0045     if (context)
0046         setContext(context);
0047 }
0048 
0049 ClassMemberDeclaration::ClassMemberDeclaration(ClassMemberDeclarationData& dd, const RangeInRevision& range)
0050     : Declaration(dd, range)
0051 {
0052 }
0053 
0054 ClassMemberDeclaration::ClassMemberDeclaration(ClassMemberDeclarationData& dd)
0055     : Declaration(dd)
0056 {
0057 }
0058 
0059 ClassMemberDeclaration::~ClassMemberDeclaration()
0060 {
0061 }
0062 
0063 bool ClassMemberDeclaration::isStatic() const
0064 {
0065     return d_func()->m_isStatic;
0066 }
0067 
0068 void ClassMemberDeclaration::setStatic(bool isStatic)
0069 {
0070     d_func_dynamic()->m_isStatic = isStatic;
0071 }
0072 
0073 bool ClassMemberDeclaration::isAuto() const
0074 {
0075     return d_func()->m_isAuto;
0076 }
0077 
0078 void ClassMemberDeclaration::setAuto(bool isAuto)
0079 {
0080     d_func_dynamic()->m_isAuto = isAuto;
0081 }
0082 
0083 bool ClassMemberDeclaration::isFriend() const
0084 {
0085     return d_func()->m_isFriend;
0086 }
0087 
0088 void ClassMemberDeclaration::setFriend(bool isFriend)
0089 {
0090     d_func_dynamic()->m_isFriend = isFriend;
0091 }
0092 
0093 bool ClassMemberDeclaration::isRegister() const
0094 {
0095     return d_func()->m_isRegister;
0096 }
0097 
0098 void ClassMemberDeclaration::setRegister(bool isRegister)
0099 {
0100     d_func_dynamic()->m_isRegister = isRegister;
0101 }
0102 
0103 bool ClassMemberDeclaration::isExtern() const
0104 {
0105     return d_func()->m_isExtern;
0106 }
0107 
0108 void ClassMemberDeclaration::setExtern(bool isExtern)
0109 {
0110     d_func_dynamic()->m_isExtern = isExtern;
0111 }
0112 
0113 bool ClassMemberDeclaration::isMutable() const
0114 {
0115     return d_func()->m_isMutable;
0116 }
0117 
0118 void ClassMemberDeclaration::setMutable(bool isMutable)
0119 {
0120     d_func_dynamic()->m_isMutable = isMutable;
0121 }
0122 
0123 Declaration::AccessPolicy ClassMemberDeclaration::accessPolicy() const
0124 {
0125     return d_func()->m_accessPolicy;
0126 }
0127 
0128 void ClassMemberDeclaration::setAccessPolicy(Declaration::AccessPolicy accessPolicy)
0129 {
0130     d_func_dynamic()->m_accessPolicy = accessPolicy;
0131 }
0132 
0133 void ClassMemberDeclaration::setStorageSpecifiers(StorageSpecifiers specifiers)
0134 {
0135     DUCHAIN_D_DYNAMIC(ClassMemberDeclaration);
0136     d->m_isStatic = specifiers & StaticSpecifier;
0137     d->m_isAuto = specifiers & AutoSpecifier;
0138     d->m_isFriend = specifiers & FriendSpecifier;
0139     d->m_isRegister = specifiers & RegisterSpecifier;
0140     d->m_isExtern = specifiers & ExternSpecifier;
0141     d->m_isMutable = specifiers & MutableSpecifier;
0142 }
0143 
0144 int64_t ClassMemberDeclaration::bitOffsetOf() const
0145 {
0146     return d_func()->m_bitOffsetOf;
0147 }
0148 
0149 void ClassMemberDeclaration::setBitOffsetOf(int64_t bitOffsetOf)
0150 {
0151     d_func_dynamic()->m_bitOffsetOf = bitOffsetOf;
0152 }
0153 
0154 int ClassMemberDeclaration::bitWidth() const
0155 {
0156     return d_func()->m_bitWidth;
0157 }
0158 
0159 void ClassMemberDeclaration::setBitWidth(int bitWidth)
0160 {
0161     d_func_dynamic()->m_bitWidth = bitWidth;
0162 }
0163 }