void BufferManager::deleteOneTuple(int size, long position) { cout << "----------------Deleting----------------" << endl; if (getFreeSpaceInCurrentPage(position) > size) { char * temp = (char *)malloc(size * sizeof(char)); for (int i = 0; i < size; i++) temp[i] = '\0'; write(temp, getPageNumber(position), getPagePosition(position), size); setFileHeader(getPageNumber(position), 0); free(temp); } else { //More than one segment //First segment int firstSegmentSize = getFreeSpaceInCurrentPage(position); char * temp = (char *)malloc(firstSegmentSize * sizeof(char)); for (int i = 0; i < firstSegmentSize; i++) temp[i] = '\0'; cout << "Delete segment. Start PageNumber: " << getPageNumber(position) << " PagePosition: " << getPagePosition(position) << " Size: " << firstSegmentSize << endl; write(temp, getPageNumber(position), getPagePosition(position), firstSegmentSize); setFileHeader(getPageNumber(position), 0); size -= firstSegmentSize; position += firstSegmentSize; free(temp); //Second to last second segments temp = (char *)malloc(PAGE_SIZE * sizeof(char)); for (int i = 0; i < PAGE_SIZE; i++) temp[i] = '\0'; while (size > PAGE_SIZE) { write(temp, getPageNumber(position), getPagePosition(position), PAGE_SIZE); cout << "Delete segment. Start PageNumber: " << getPageNumber(position) << " PagePosition: " << getPagePosition(position) << " Size: " << PAGE_SIZE << endl; setFileHeader(getPageNumber(position), 0); size -= PAGE_SIZE; position += PAGE_SIZE; } free(temp); //last segment temp = (char *)malloc(size * sizeof(char)); for (int i = 0; i < size; i++) temp[i] = '\0'; write(temp, getPageNumber(position), getPagePosition(position), size); cout << "Delete segment. Start PageNumber: " << getPageNumber(position) << " PagePosition: " << getPagePosition(position) << " Size: " << size << endl; setFileHeader(getPageNumber(position), 0); free(temp); } cout << "----------------Deleting----------------" << endl; }
void EventRecorder::deinit() { if (!_initialized) { return; } setFileHeader(); _needRedraw = false; _initialized = false; _recordMode = kPassthrough; delete _fakeMixerManager; _fakeMixerManager = NULL; _controlPanel->close(); delete _controlPanel; debugC(1, kDebugLevelEventRec, "playback:action=stopplayback"); g_system->getEventManager()->getEventDispatcher()->unregisterSource(this); _recordMode = kPassthrough; _playbackFile->close(); delete _playbackFile; switchMixer(); switchTimerManagers(); DebugMan.disableDebugChannel("EventRec"); }
long BufferManager::insertOneTuple(char * tuple, int size) { DBFileManager * dBFileManager = DBFileManager::getInstance(); cout << "----------------Finding free space----------------" << endl; long insertPosition = findFreeSpace(size); long returnPosition = insertPosition; if (insertPosition == -1) { long fileLength = dBFileManager->length(); if (fileLength < MAX_PAGE_NUM * PAGE_SIZE) { insertPosition = fileLength; } else { cout << "Out of max size of DB File." << endl; exit(0); } } cout << "Find the enough free space from position:'" << insertPosition << "'." << endl; cout << "----------------Finding free space----------------" << endl; cout << "----------------Inserting----------------" << endl; if (getFreeSpaceInCurrentPage(insertPosition) > size) { //Just one segment cout << "Just one segment. PageNumber: " << getPageNumber(insertPosition) << " PagePosition: " << getPagePosition(insertPosition) << " Size: " << (getFreeSpaceInCurrentPage(insertPosition)) << "." << endl; write(tuple, getPageNumber(insertPosition), getPagePosition(insertPosition), size); if (isPageWritable(getPageNumber(insertPosition)) == false) setFileHeader(getPageNumber(insertPosition), 1); } else { //More than one segment //First segment cout << "More than one segment. " << endl; cout<<"Insert first segment. Start PageNumber: " << getPageNumber(insertPosition) << " PagePosition: " << getPagePosition(insertPosition) << " Size: " << getFreeSpaceInCurrentPage(insertPosition) << "." << endl; write(tuple, getPageNumber(insertPosition), getPagePosition(insertPosition), getFreeSpaceInCurrentPage(insertPosition)); if (isPageWritable(getPageNumber(insertPosition)) == false) setFileHeader(getPageNumber(insertPosition), 1); size -= (PAGE_SIZE - getPagePosition(insertPosition)); tuple += (PAGE_SIZE - getPagePosition(insertPosition)); insertPosition += (PAGE_SIZE - getPagePosition(insertPosition)); //Second to last second segments while (size > PAGE_SIZE) { cout << "Insert segment. Start PageNumber: " << getPageNumber(insertPosition) << " PagePosition: " << getPagePosition(insertPosition) << " Size: " << PAGE_SIZE << endl; write(tuple, getPageNumber(insertPosition), getPagePosition(insertPosition), PAGE_SIZE); setFileHeader(getPageNumber(insertPosition), 1); size -= PAGE_SIZE; tuple += PAGE_SIZE; insertPosition += PAGE_SIZE; } //last segment cout << "Insert segment. Start PageNumber: " << getPageNumber(insertPosition) << " PagePosition: " << getPagePosition(insertPosition) << " Size: " << size << endl; write(tuple, getPageNumber(insertPosition), getPagePosition(insertPosition), size); if (isPageWritable(getPageNumber(insertPosition)) == false) setFileHeader(getPageNumber(insertPosition), 1); } cout << "----------------Inserting----------------" << endl; return returnPosition; }