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; }