void FormLayoutMatrix::addFormWidget(AbstractFormWidget *fw)
{   
    int row, column;
    bool spaceAvailable = findFreeSpace(fw->getWidthUnits(), fw->getHeightUnits(), row, column);

    if (spaceAvailable) {
        setFormWidget(fw, row, column);
    } else {
        createFreeSpace(fw->getWidthUnits(), fw->getHeightUnits(), row, column);
        setFormWidget(fw, row, column);
    }
}
Exemple #2
0
int Rom::findFreeSpace(int startAddr,int size) {
	return findFreeSpace(startAddr,romSize,size,NG);
}
Exemple #3
0
int Rom::findFreeSpace(int startAddr,int endAddr,int size) {
	return findFreeSpace(startAddr,endAddr,size,NG);
}
Exemple #4
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;
}