128
128
const DynamicIdentifierPrivate& m_identifier;
131
RepositoryManager< ItemRepository<ConstantIdentifierPrivate, IdentifierItemRequest>, false> identifierRepository("Identifier Repository");
131
static RepositoryManager< ItemRepository<ConstantIdentifierPrivate, IdentifierItemRequest>, false>& identifierRepository() {
132
static RepositoryManager< ItemRepository<ConstantIdentifierPrivate, IdentifierItemRequest>, false> identifierRepositoryObject("Identifier Repository");
133
return identifierRepositoryObject;
133
136
///This has to be initialized now, else we will get a crash when multiple threads try accessing it for the first time in the same moment
134
137
uint emptyConstantIdentifierPrivateIndex() {
135
static uint index = identifierRepository->index(DynamicIdentifierPrivate());
138
static uint index = identifierRepository()->index(DynamicIdentifierPrivate());
137
140
if(index == 0) ///Just so the function is instantiated right now
138
identifierRepository->deleteItem(0);
141
identifierRepository()->deleteItem(0);
143
146
const ConstantIdentifierPrivate* emptyConstantIdentifierPrivate() {
144
return identifierRepository->itemFromIndex(emptyConstantIdentifierPrivateIndex());
147
return identifierRepository()->itemFromIndex(emptyConstantIdentifierPrivateIndex());
147
150
bool IndexedIdentifier::isEmpty() const {
271
274
AbstractRepositoryManager* returnIdentifierRepository() {
272
return &identifierRepository;
275
return &identifierRepository();
275
RepositoryManager< ItemRepository<ConstantQualifiedIdentifierPrivate, QualifiedIdentifierItemRequest>, false> qualifiedidentifierRepository("Qualified Identifier Repository", 1, &returnIdentifierRepository);
278
static RepositoryManager< ItemRepository<ConstantQualifiedIdentifierPrivate, QualifiedIdentifierItemRequest>, false>& qualifiedidentifierRepository() {
279
static RepositoryManager< ItemRepository<ConstantQualifiedIdentifierPrivate, QualifiedIdentifierItemRequest>, false> qualifiedidentifierRepositoryObject("Qualified Identifier Repository", 1, &returnIdentifierRepository);
280
return qualifiedidentifierRepositoryObject;
277
283
uint emptyConstantQualifiedIdentifierPrivateIndex() {
278
static uint index = qualifiedidentifierRepository->index(DynamicQualifiedIdentifierPrivate());
284
static uint index = qualifiedidentifierRepository()->index(DynamicQualifiedIdentifierPrivate());
279
285
if(index == 0) ///Just so the function is instantiated right now
280
identifierRepository->deleteItem(0);
286
identifierRepository()->deleteItem(0);
284
290
const ConstantQualifiedIdentifierPrivate* emptyConstantQualifiedIdentifierPrivate() {
285
return qualifiedidentifierRepository->itemFromIndex(emptyConstantQualifiedIdentifierPrivateIndex());
291
return qualifiedidentifierRepository()->itemFromIndex(emptyConstantQualifiedIdentifierPrivateIndex());
288
294
// uint QualifiedIdentifier::combineHash(uint leftHash, uint /*leftSize*/, Identifier appendIdentifier) {
1043
1049
IndexedIdentifier::IndexedIdentifier() : index(emptyConstantIdentifierPrivateIndex()) {
1044
1050
if(shouldDoDUChainReferenceCounting(this)) {
1045
QMutexLocker lock(identifierRepository->mutex());
1046
increase(identifierRepository->dynamicItemFromIndexSimple(index)->m_refCount, index);
1051
QMutexLocker lock(identifierRepository()->mutex());
1052
increase(identifierRepository()->dynamicItemFromIndexSimple(index)->m_refCount, index);
1050
1056
IndexedIdentifier::IndexedIdentifier(const Identifier& id) : index(id.index()) {
1051
1057
if(shouldDoDUChainReferenceCounting(this)) {
1052
QMutexLocker lock(identifierRepository->mutex());
1053
increase(identifierRepository->dynamicItemFromIndexSimple(index)->m_refCount, index);
1058
QMutexLocker lock(identifierRepository()->mutex());
1059
increase(identifierRepository()->dynamicItemFromIndexSimple(index)->m_refCount, index);
1057
1063
IndexedIdentifier::IndexedIdentifier(const IndexedIdentifier& rhs) : index(rhs.index) {
1058
1064
if(shouldDoDUChainReferenceCounting(this)) {
1059
QMutexLocker lock(identifierRepository->mutex());
1060
increase(identifierRepository->dynamicItemFromIndexSimple(index)->m_refCount, index);
1065
QMutexLocker lock(identifierRepository()->mutex());
1066
increase(identifierRepository()->dynamicItemFromIndexSimple(index)->m_refCount, index);
1064
1070
IndexedIdentifier::~IndexedIdentifier() {
1065
1071
if(shouldDoDUChainReferenceCounting(this)) {
1066
QMutexLocker lock(identifierRepository->mutex());
1067
decrease(identifierRepository->dynamicItemFromIndexSimple(index)->m_refCount, index);
1072
QMutexLocker lock(identifierRepository()->mutex());
1073
decrease(identifierRepository()->dynamicItemFromIndexSimple(index)->m_refCount, index);
1071
1077
IndexedIdentifier& IndexedIdentifier::operator=(const Identifier& id) {
1072
1078
if(shouldDoDUChainReferenceCounting(this)) {
1073
QMutexLocker lock(identifierRepository->mutex());
1074
decrease(identifierRepository->dynamicItemFromIndexSimple(index)->m_refCount, index);
1079
QMutexLocker lock(identifierRepository()->mutex());
1080
decrease(identifierRepository()->dynamicItemFromIndexSimple(index)->m_refCount, index);
1077
1083
index = id.index();
1079
1085
if(shouldDoDUChainReferenceCounting(this)) {
1080
QMutexLocker lock(identifierRepository->mutex());
1081
increase(identifierRepository->dynamicItemFromIndexSimple(index)->m_refCount, index);
1086
QMutexLocker lock(identifierRepository()->mutex());
1087
increase(identifierRepository()->dynamicItemFromIndexSimple(index)->m_refCount, index);
1086
1092
IndexedIdentifier& IndexedIdentifier::operator=(const IndexedIdentifier& id) {
1087
1093
if(shouldDoDUChainReferenceCounting(this)) {
1088
QMutexLocker lock(identifierRepository->mutex());
1089
decrease(identifierRepository->dynamicItemFromIndexSimple(index)->m_refCount, index);
1094
QMutexLocker lock(identifierRepository()->mutex());
1095
decrease(identifierRepository()->dynamicItemFromIndexSimple(index)->m_refCount, index);
1092
1098
index = id.index;
1094
1100
if(shouldDoDUChainReferenceCounting(this)) {
1095
QMutexLocker lock(identifierRepository->mutex());
1096
increase(identifierRepository->dynamicItemFromIndexSimple(index)->m_refCount, index);
1101
QMutexLocker lock(identifierRepository()->mutex());
1102
increase(identifierRepository()->dynamicItemFromIndexSimple(index)->m_refCount, index);
1172
1178
ifDebug( kDebug() << "(" << ++cnt << ")" << identifier().toString() << index; )
1174
1180
if(shouldDoDUChainReferenceCounting(this)) {
1175
QMutexLocker lock(qualifiedidentifierRepository->mutex());
1181
QMutexLocker lock(qualifiedidentifierRepository()->mutex());
1177
1183
ifDebug( kDebug() << "decreasing"; )
1178
decrease(qualifiedidentifierRepository->dynamicItemFromIndexSimple(index)->m_refCount, index);
1184
decrease(qualifiedidentifierRepository()->dynamicItemFromIndexSimple(index)->m_refCount, index);
1180
1186
index = id.index();
1182
1188
ifDebug( kDebug() << index << "increasing"; )
1183
increase(qualifiedidentifierRepository->dynamicItemFromIndexSimple(index)->m_refCount, index);
1189
increase(qualifiedidentifierRepository()->dynamicItemFromIndexSimple(index)->m_refCount, index);
1185
1191
index = id.index();
1193
1199
ifDebug( kDebug() << "(" << ++cnt << ")" << identifier().toString() << index; )
1195
1201
if(shouldDoDUChainReferenceCounting(this)) {
1196
QMutexLocker lock(qualifiedidentifierRepository->mutex());
1202
QMutexLocker lock(qualifiedidentifierRepository()->mutex());
1197
1203
ifDebug( kDebug() << "decreasing"; )
1199
decrease(qualifiedidentifierRepository->dynamicItemFromIndexSimple(index)->m_refCount, index);
1205
decrease(qualifiedidentifierRepository()->dynamicItemFromIndexSimple(index)->m_refCount, index);
1201
1207
index = rhs.index;
1203
1209
ifDebug( kDebug() << index << "increasing"; )
1204
increase(qualifiedidentifierRepository->dynamicItemFromIndexSimple(index)->m_refCount, index);
1210
increase(qualifiedidentifierRepository()->dynamicItemFromIndexSimple(index)->m_refCount, index);
1206
1212
index = rhs.index;
1213
1219
ifDebug( kDebug() << "(" << ++cnt << ")" << identifier().toString() << index; )
1214
1220
if(shouldDoDUChainReferenceCounting(this)) {
1215
1221
ifDebug( kDebug() << index << "decreasing"; )
1216
QMutexLocker lock(qualifiedidentifierRepository->mutex());
1217
decrease(qualifiedidentifierRepository->dynamicItemFromIndexSimple(index)->m_refCount, index);
1222
QMutexLocker lock(qualifiedidentifierRepository()->mutex());
1223
decrease(qualifiedidentifierRepository()->dynamicItemFromIndexSimple(index)->m_refCount, index);