File indexing completed on 2024-05-12 04:37:59
0001 /* 0002 SPDX-FileCopyrightText: 2008 David Nolden <david.nolden.kdevelop@art-master.de> 0003 0004 SPDX-License-Identifier: LGPL-2.0-only 0005 */ 0006 0007 #include "duchainregister.h" 0008 #include "duchainbase.h" 0009 0010 #include <QDebug> 0011 0012 #define ENSURE_VALID_CLASSID(id) \ 0013 qFatal("Invalid class id: %i", id); 0014 0015 namespace KDevelop { 0016 DUChainItemSystem::~DUChainItemSystem() 0017 { 0018 qDeleteAll(m_factories); 0019 } 0020 0021 DUChainBase* DUChainItemSystem::create(DUChainBaseData* data) const 0022 { 0023 if (uint(m_factories.size()) <= data->classId || m_factories[data->classId] == nullptr) 0024 return nullptr; 0025 return m_factories[data->classId]->create(data); 0026 } 0027 0028 DUChainBaseData* DUChainItemSystem::cloneData(const DUChainBaseData& data) const 0029 { 0030 if (uint(m_factories.size()) <= data.classId || m_factories[data.classId] == nullptr) { 0031 ENSURE_VALID_CLASSID(data.classId) 0032 return nullptr; 0033 } 0034 return m_factories[data.classId]->cloneData(data); 0035 } 0036 0037 void DUChainItemSystem::callDestructor(DUChainBaseData* data) const 0038 { 0039 if (uint(m_factories.size()) <= data->classId || m_factories[data->classId] == nullptr) 0040 return; 0041 m_factories[data->classId]->callDestructor(data); 0042 } 0043 0044 void DUChainItemSystem::freeDynamicData(KDevelop::DUChainBaseData* data) const 0045 { 0046 if (uint(m_factories.size()) <= data->classId || m_factories[data->classId] == nullptr) 0047 return; 0048 m_factories[data->classId]->freeDynamicData(data); 0049 } 0050 0051 void DUChainItemSystem::deleteDynamicData(DUChainBaseData* data) const 0052 { 0053 if (uint(m_factories.size()) <= data->classId || m_factories[data->classId] == nullptr) 0054 return; 0055 m_factories[data->classId]->deleteDynamicData(data); 0056 } 0057 0058 uint DUChainItemSystem::dynamicSize(const DUChainBaseData& data) const 0059 { 0060 if (uint(m_factories.size()) <= data.classId || m_factories[data.classId] == nullptr) 0061 return 0; 0062 return m_factories[data.classId]->dynamicSize(data); 0063 } 0064 0065 uint DUChainItemSystem::dataClassSize(const DUChainBaseData& data) const 0066 { 0067 if (uint(m_dataClassSizes.size()) <= data.classId || m_dataClassSizes[data.classId] == 0) 0068 return 0; 0069 return m_dataClassSizes[data.classId]; 0070 } 0071 0072 void DUChainItemSystem::copy(const DUChainBaseData& from, DUChainBaseData& to, bool constant) const 0073 { 0074 if (uint(m_factories.size()) <= from.classId || m_factories[from.classId] == nullptr) { 0075 ENSURE_VALID_CLASSID(from.classId) 0076 return; 0077 } 0078 m_factories[from.classId]->copy(from, to, constant); 0079 } 0080 0081 DUChainItemSystem& DUChainItemSystem::self() 0082 { 0083 static DUChainItemSystem system; 0084 return system; 0085 } 0086 }