示例#1
0
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;

}
示例#2
0
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");
}
示例#3
0
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;
}