示例#1
0
void
Ebase::CommitRecord(EbRecord *pRecord)
{
    EB_ASSERT(pRecord->_lField != NULL);

    // check if there is any modification to the record
    // NOTE for a new record, every field is marked modified
    EbBoolean modified = EB_FALSE;
    for (EbUint32 i=0; i< _dbDef->NumberOfFields(); i++) {
        if (pRecord->_lField[i]._changed == EB_TRUE) {
            modified = EB_TRUE;
        }
    }

    // return if nothing is modified
    if (modified == EB_FALSE) return;

    // check if it is a new record
    if (pRecord->_lField[RECORD_ID_INDEX]._changed == EB_TRUE &&
        *(EbInt32*)pRecord->_lField[RECORD_ID_INDEX]._decodedData ==
        NEW_RECORD_ID) {
        AddNewRecord(pRecord);
    } else {
        ModifyRecord(pRecord);
    }
}
BOOL CWriteMonitorResult::Run()
{
	vector<CFileAction *>::iterator iter;
	vector<CFileAction *> ListCopy;
	while(!m_bExit)
	{
		EnterCriticalSection(&g_FileActionListCS);
		ListCopy.assign(g_MonotorFileActionList.begin(),g_MonotorFileActionList.end());
		g_MonotorFileActionList.clear();
		LeaveCriticalSection(&g_FileActionListCS);

		if (ListCopy.empty())
		{
			Sleep(1000);
			continue;
		}
		
		iter = ListCopy.begin(); 
		for (iter;iter!=ListCopy.end();)
		{
			if (m_bExit)
				break;

			if ((*iter)->m_Type == CFileAction::AC_ADD)
				AddRecord(*iter);

			else if ((*iter)->m_Type == CFileAction::AC_DEL)
				RemoveRecord(*iter);

			else if ((*iter)->m_Type == CFileAction::AC_RENAME)
				ModifyRecord(*iter);

			iter = ListCopy.erase(iter);
		}

		for (size_t i=0;i< ListCopy.size();i++)
			delete ListCopy[i];

		ListCopy.clear();
	}
	
	return TRUE;
}