示例#1
0
文件: dwhash.c 项目: hyypucs/NTWOAD
tBOOL AddHash(DWHASH_TYPE *lpHash, tVOID *lpItem, tINT nInfo)
{
	tINT nPos;
	DWHASH_BLOCK_TYPE HashItem;
	DWHASH_NEXT_TYPE NextItem;

	nPos = lpHash->pHashCalFunc(lpItem);
	if (nPos < 0) nPos *= -1;
	if (nPos >= lpHash->nBucketCount) { // exception
		nPos %= lpHash->nBucketCount;
	}

	memcpy(&HashItem, lpHash->lpBuf + nPos*sizeof(DWHASH_BLOCK_TYPE), sizeof(DWHASH_BLOCK_TYPE));
	if (HashItem.nInfo == -1) { // 아무 것도 없다. good
		HashItem.nInfo = nInfo;
		HashItem.lpNextRec = NULL; // 여기에 해슁이 같으면 달리겠지..
		memcpy(lpHash->lpBuf + nPos*sizeof(DWHASH_BLOCK_TYPE), &HashItem, sizeof(DWHASH_BLOCK_TYPE));
	}
	else { // collision 발생
		if (HashItem.lpNextRec == NULL) { // 벌써 collision이 일어났군..
			HashItem.lpNextRec = (RECORD *)malloc(sizeof(RECORD));
			if (HashItem.lpNextRec == NULL) {
				return FALSE;
			}
			if (AllocRecord(HashItem.lpNextRec, sizeof(DWHASH_NEXT_TYPE), 5, 5) == FALSE) {
				return FALSE;
			}
			memcpy(lpHash->lpBuf + nPos*sizeof(DWHASH_BLOCK_TYPE), &HashItem, sizeof(DWHASH_BLOCK_TYPE)); // mem alloc 했으니.. update 해야지 
		}
		NextItem.nInfo = nInfo;
		AppendRecord(HashItem.lpNextRec, &NextItem);
        	lpHash->nCollision ++;
	}
	return TRUE;
}
示例#2
0
文件: indexth.c 项目: hyypucs/NTWOAD
tBOOL GetFindThDic(tCHAR *szStr, RECORD *lpRetRec)
{
	THSTR_FORMAT ThStr;
	tINT nPos, i;
	STR_FORMAT Str;

	if (bOpenIndexThDic == FALSE) return FALSE;
	if (strlen(szStr) >= MAX_THSTR) return FALSE; // exception
	strcpy(ThStr.szStr, szStr);

	nPos = FindRecord(&RecThStr, &ThStr, TRUE, (CompProcP)CompRecThStr);

	if (nPos == -1) return FALSE;

	GetRecord(&RecThStr, nPos, &ThStr);

	i = 0;
	while (i < C_THSTR && ThStr.nStr[i] >= 0) {
		GetRecord(&RecStr, ThStr.nStr[i], &Str);

		AppendRecord(lpRetRec, &Str);
		i ++ ;
	}

	return TRUE;
}
示例#3
0
tVOID PutThPool(pthread_t ThreadId)
{
	THPOOL_ITEMTYPE PoolItem;

	LockMutexMan(&gMutexThPool, ID_MUTEX_POOL);

	PoolItem.ThreadId = ThreadId;
	gettimeofday(&(PoolItem.tv), NULL);
	PoolItem.nSocketId = -1;
	PoolItem.bActive = FALSE;

	AppendRecord(&gTHPOOL, &PoolItem);

	UnLockMutexMan(&gMutexThPool, ID_MUTEX_POOL);
}
示例#4
0
文件: 1862AC.c 项目: yumendy/OJ
int main(int argc, char const *argv[])
{
	int n, c, Case = 1;
	while(scanf("%d%d",&n,&c) && (n != 0 || c != 0))
	{
		printf("Case %d:\n",Case++);
		struct student *p;

		p = (STUDENT *)malloc(n * sizeof(STUDENT));
		AppendRecord(p, pt, n);
		Sort(pt, n, c);
		free(p);
	}
	return 0;
}
示例#5
0
文件: safeth.c 项目: hyypucs/NTWOAD
tBOOL InsertThTime(pthread_t ThreadId, tINT nSocketId)
{
	tBOOL bRetVal = TRUE;
#if defined(_USE_SAFETH)
	tINT nItem;
	SAFETH_FORMAT SafeItem;
	time_t t = time(NULL); // 현재 시간..
	tINT last_state;

	if (!bStSafeTh) return TRUE;

	//pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, &last_state);
	pthread_cleanup_push((tVOID *)pthread_mutex_unlock, (tVOID *)&gCheckTh);
	pthread_mutex_lock(&gCheckTh);
//	printf("I(%d) : M : Out\n", ThreadId);

	memset(&SafeItem, 0, sizeof(SAFETH_FORMAT));

	SafeItem.ThreadId = ThreadId;
	SafeItem.nSocketId = nSocketId;

	nItem = FindRecord(&RecordThTime,  &SafeItem, FALSE, (CompProcP)Comp_ThreadId);
	if (nItem == -1) { // 새로운 thread
		t = time(NULL);
                memcpy(&(SafeItem.s_time), &t, sizeof(time_t));
		AppendRecord(&RecordThTime, &SafeItem);
	}
	else {
		GetRecord(&RecordThTime, nItem, &SafeItem);
		t = time(NULL);
                memcpy(&(SafeItem.s_time), &t, sizeof(time_t));
		SetRecord(&RecordThTime, nItem, &SafeItem);

		//printf("EI(%d) : UM : In\n", ThreadId);
		bRetVal = FALSE;
		goto EndProc;
	}
	
EndProc:;
	//printf("I(%d) : UM : In\n", ThreadId);
	//pthread_mutex_unlock(&gCheckTh);
	pthread_cleanup_pop(1);
	//printf("I(%d) : UM : Out\n", ThreadId);
	//pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, &last_state);
#endif
	return bRetVal;
}
示例#6
0
void FileReader::run()
{
    QStringList::iterator it;

    for (it = filenames.begin(); it != filenames.end(); it++)
    {
        FileRecord *rec = new FileRecord();
        QFileInfo f(*it);

        if ((f.isFile()) && (!f.isSymLink()))
        {
            rec->setSize(f.size());
            rec->setFileName(f.canonicalFilePath());
            rec->setIsArchive(isFileArchive(*it));
            parseFile((*it), *rec);
        }

        emit AppendRecord(*rec);
        delete rec;
    }
}
示例#7
0
文件: sfs-copy.c 项目: mingpen/OpenNT
/*---------------------------------------------------------------------------------*/
 void SplitRecordGroupRequests ( CCB_Header * h )
/*---------------------------------------------------------------------------------*/
   {
      switch ( h -> RequestCode )
	{
	   case AppendRecordRequest:
	     AppendRecord ( h );
	     break;

	   case CollateFileRequest:
	     SplitCollateFileRequests ( h );
	     break;

	   case CopyRecordRequest:
	     CopyRecord ( h );
	     break;

	   default:
	     NotifyAndActAsProper ( ErrorRequestNotSupported );
	     break;
	}
      return;
   }
示例#8
0
文件: main.c 项目: ernestzhang/edb
int main()
{	
    int i ;
    StLogFile stLog ;
    StMemTable stMemTable1 ;
	StMemTable stMemTable2 ;
	StMemTable stMemTable3 ;
	StSStableLevel stTableLevel ;
	StSStableMem   stTableMem ;
	int iFileSize = 0 ;
	int iRet ;
	int iSplit =  MAX_MERGE_CNT/3 ;
    int iCr = CreateLogFile(LOG_FILE , &stLog);
	if(iCr != 0){
	        printf("create file error:%d\n" , iCr);
        	return -1 ;
    }
	
	memtable_init(&stMemTable1 , compareFunc);
	memtable_init(&stMemTable2 , compareFunc);
	memtable_init(&stMemTable3 , compareFunc);
	for(i = 0 ; i < MAX_MERGE_CNT ; ++i)
	{
		int iRand = rand()*rand();
		char sKey[MAX_KEY_SIZE]	;
		char sVal[2048];
		//iRand = 1 ;
		snprintf(sKey , sizeof(sKey)-1 , "%d_test_key_" , iRand );			
		snprintf(sVal , sizeof(sVal)-1 , "%d_ssssssssssssssssssssbbbbbbbbbbbbbbbbtest d_ssssssssssssssssssssbbbbbbbbbbbbbbbbtestd_ssssssssssssssssssssbbbbbbbbbbbbbbbbtestd_ssssssssssssssssssssbbbbbbbbbbbbbbbbtestd_ssssssssssssssssssssbbbbbbbbbbbbbbbbtestd_ssssssssssssssssssssbbbbbbbbbbbbbbbbtestd_ssssssssssssssssssssbbbbbbbbbbbbbbbbtestwhy so many sb in......................._val_%d" , iRand , i);
		StLogNode stNode ;
		stNode.sKey = sKey;
		stNode.sVal = sVal;
		stNode.uiKeySize = (unsigned int)strlen(stNode.sKey) + 1;
		stNode.uiValSize = (unsigned int)strlen(stNode.sVal) + 1;
		AppendRecord(&stLog , &stNode);

		StValNode stValNode ;
		stValNode.sKey = sKey ;
		stValNode.uiKeySize = stNode.uiKeySize ;
		stValNode.sVal = sVal ;
		stValNode.uiValSize = stNode.uiValSize ;
		
		if(i < iSplit)
		{
			memtable_set(&stMemTable1 , &stValNode);
			if(i == iSplit/ 2)
				printf("t1:%s\n" , stValNode.sKey);
		}
		else if(i >= iSplit && i < iSplit * 2)
		{
			memtable_set(&stMemTable2 , &stValNode);
			if(i == iSplit + iSplit/2)
                        	printf("t1:%s\n" , stValNode.sKey);
		}
		else
		{
			memtable_set(&stMemTable3 , &stValNode);
			iFileSize += stValNode.uiKeySize + sizeof(int) * 3 + stValNode.uiKeySize + stValNode.uiValSize + sizeof(int) * 2 ;
			if(i == iSplit*2 + iSplit/2)
                                printf("t1:%s\n" , stValNode.sKey);			
		}
	
	}
	iFileSize += sizeof(StSSTIndex);
        printf("file size:%d\n" , iFileSize);
	AppendLog(&stLog ,1);
    DestroyFile(&stLog);
	
	//dump file to sstable 	
	StSStableLevel_Init(&stTableLevel) ;
	iRet = SSTable_Dump0Level(&stTableLevel , &stMemTable3);
	if(iRet == 0)
	{
		printf("dump sstable ok .\n");
	}
	else
	{
		printf("dump sstable error:%d .\n" , iRet);
	}
	iRet =  SSTable_Load(&stTableMem , "sst_0_0.dat") ;
	{
		for(i = 0 ; i < stMemTable3.pList->iTotCnt ; ++i)
		{
			char *pIndexNode = stTableMem.pIndex[i];
			StValNode *pValNode  = memtable_find(&stMemTable3 ,pIndexNode+sizeof(int)) ; 
			if(pValNode == NULL)
			{
				printf("xxxxxxxxxxxxxxxxxxxxxxxxxxxx========%d key:%s\n" ,i, pIndexNode + sizeof(int));
				return 0 ;	
			}
			if(strcmp(pIndexNode + sizeof(int) , "-450124004_test_key_") == 0 )
			{
				printf("got it ....\n");
			}
			//if(i < 10 || i > stMemTable3.pList->iTotCnt -10)
			{
				unsigned int uiOffset = *((unsigned int*)(pIndexNode+sizeof(int) + pValNode->uiKeySize));
				unsigned int uiNodeSize = *((unsigned int*)(pIndexNode+sizeof(int)*2 + pValNode->uiKeySize));
				printf("%s %s offset:%d node size:%d\n" , pIndexNode + sizeof(int) , pValNode->sKey , uiOffset , uiNodeSize);	
			}	
		}
	}
	if(iRet == 0)
	{
		printf("load sstable file ok. index cnt:%d\n\n" , stTableMem.uiNodeNum);
	}
	else
	{
		printf("load sstable file error:%d.\n" , iRet );
		return -1 ; 
	}

	{
		StValNode stNode ;
		StValNode *pNode ;	
		stNode.sKey = stTableMem.pIndex[5]+sizeof(int);
		stNode.uiKeySize = strlen(stNode.sKey) + 1;

		//find in mem table 1
		pNode = memtable_find(&stMemTable1 , stNode.sKey);
		if(pNode != NULL)
		{	
			printf("find in memtab1 key:[%s] val:[%s]\n" , pNode->sKey , pNode->sVal);
			return 0 ;
		}
		
		printf("[%s]:can't find in memtab1  , start to find in memtable2.\n" , stNode.sKey);
		//find in mem table 2
		pNode = memtable_find(&stMemTable2 , stNode.sKey);
		if(pNode != NULL)
		{
			printf("find in memtab2 key:[%s] val:[%s]\n" , pNode->sKey ,pNode->sVal);
			return 0 ;
		}
		else
		{

			int iRet ;
			void *pData = NULL ;
			unsigned int uiNodeSize = 0 ;
			printf("[%s]:can't find in memtab2  , start to find in sstable.\n" , stNode.sKey);
			iRet = SSTable_Find(&stTableMem , stNode.sKey , stNode.uiKeySize , &pData , &uiNodeSize) ;
			if(iRet == 0)
			{
				if(pData == NULL)
				{
					printf("can't find:[%s] \n" , stNode.sKey);
				}
				else
				{
					pData = (void *)((char *)pData + sizeof(int) + stNode.uiKeySize + sizeof(int));
					printf("key:[%s] val:[%s]" , stNode.sKey , (char *)pData);
				}
			}
			else
			{
				printf("find:[%s] error:%d\n"  , stNode.sKey , iRet);
				return -1;
			}
		}

	}
	return 0;
}