Пример #1
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));
		}
	}
}
bool TrainScheduleEngine::updateSourceEvent(const QString& name)
{
	QStringList list = name.split("-");
	QString newStation = list[1];
	int newNb = list[2].toInt();
	int newStart = list[3].toInt();

	setNb(newNb);
	setStart(newStart);
	setStation(newStation);

	request();

	return true;
}
Пример #3
0
void BPTree::delete_entry(_F_FileAddr L, pKey_Attr pPrimKey, _F_FileAddr pRec) {
	BPTreeNode NodeL;
	NodeL.readNodeFromFile(L);
	// delete the (V,P) entry
	if( 1 == NodeL.IsLeaf )
		NodeL.deleteKeyInLeaf(pPrimKey);
	else 
		NodeL.deleteKeyNotLeaf(pPrimKey);
	// L is root and has only one son and not a leaf
	if( isRoot(L) && ( 0 == NodeL.ItemOnNode ) && (0 == NodeL.IsLeaf) )  {
		grantRoot(NodeL.p[0]); // grant root to the son
		deleteNodeInFile(L);   // delete node 
	}
	else 
		if( !isRoot(L) && NodeL.isNotEnoughPoints() )  {// isn't root and not enough points
			//set L_ neighbour of L
			bool IsLLeftOfL_;
			_F_FileAddr L_;
			pKey_Attr pPrimKey_;
			setNb(L, &L_, &pPrimKey_, &IsLLeftOfL_);
    
			BPTreeNode NodeL_;
			NodeL_.readNodeFromFile(L_);
			if( canCoalesce(&NodeL, &NodeL_)) {
				if(IsLLeftOfL_) 
					swapVariables(L,L_); 
				coalesce(&NodeL, &NodeL_, pPrimKey_, IsLLeftOfL_);
				if( NodeL.IsLeaf && IsLLeftOfL_ ) // differe from book 
					swapVariables(L,L_);       

				delete_entry(getParent(L), pPrimKey_, L);
				if( NodeL.IsLeaf && IsLLeftOfL_ )  // L is a leaf and L < L_. Different from the book
					deleteNodeInFile(L_);  // delete the node pointed by L_
				else
					deleteNodeInFile(L);   // delete the node pointed by L
			}
			else 
			  reDistribute(&NodeL, &NodeL_, pPrimKey_, IsLLeftOfL_, L);

			NodeL_.writeNodeToFile(L_);
		}
		NodeL.writeNodeToFile(L);  // if though the node is delete
}