/** * Set or replace the value for the key */ void setRefManager(RefManager manager, Reference ref) { if (manager->onlyUpdateMode && containsRefManager(manager, ref->id)) { Reference oldRef = getRefManager(manager, ref->id); setHashMap(manager->map, oldRef->id, updateReference(oldRef, ref)); } else if (!manager->onlyUpdateMode && !containsRefManager(manager, ref->id)) { setHashMap(manager->map, ref->id, ref); } }
void normalizeKey(RefManager manager) { HashMap nbUse = newHashMap(hashString, comparString); initIteratorRefManager(manager); while(hasNextRefManager(manager)) { Reference ref = nextRefManager(manager); char id [SIZE_BUFFER_ID]; char* author = ref->champs[ref_author]; if (strlen(author) > 0) { strcpy(id, getInitialesAuthor(author)); } sprintf(id + strlen(id), ":%s", ref->champs[ref_year]); printf("\n\n\n\n\n\n%s\n\n\n\n\n\n", id); if (containsHashMap(nbUse, id)) { char* nbTmp = getHashMap(nbUse, id); int occurence = getNb(nbTmp); size_t tailleCle = strlen(id); if (occurence == 1) { Reference oldRef = getRefManager(manager, id); char buffer[SIZE_BUFFER_ID]; strcpy(buffer, id); snprintf(buffer + tailleCle, SIZE_BUFFER_ID - tailleCle, ":1"); free(oldRef->id); oldRef->id = buffer; removeRefManager(manager, id); setRefManager(manager, oldRef); } snprintf(id + tailleCle, SIZE_BUFFER_ID - tailleCle, ":%d", occurence + 1); ref->id = id; setHashMap(nbUse, id, setNb(occurence + 1)); setRefManager(manager, ref); } else { removeRefManager(manager, ref->id); ref->id = id; setRefManager(manager, ref); setHashMap(nbUse, id, setNb(1)); } } }
int weakCount() const { return getRefManager()->getWeakRefCount(); }
int strongCount() const { return getRefManager()->getStrongRefCount(); }