示例#1
0
/**
 * 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);
    }
}
示例#2
0
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(); }