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); } }
int Rom::findFreeSpace(int startAddr,int size) { return findFreeSpace(startAddr,romSize,size,NG); }
int Rom::findFreeSpace(int startAddr,int endAddr,int size) { return findFreeSpace(startAddr,endAddr,size,NG); }
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; }