int BufferManager::insertBlock(const std::string &fileName, const std::string& content) { int n = fileName.find(".index", 0); std::string indexName = fileName.substr(0, n); Index* indexPtr = Cat.getIndexPtr(indexName); std::list<Block*>::iterator it; if (indexPtr->emptyBlockOffset.empty() == 1) { it = addBlockInFile(fileName); (*it)->blockOffset = indexPtr->blockNum; (*it)->fileName = fileName; (*it)->isDirty = 1; indexPtr->blockNum++; (*it)->changeContent(0, content); } else { int blockOffset = indexPtr->emptyBlockOffset.back(); indexPtr->emptyBlockOffset.pop_back(); it = readFileBlock(fileName, blockOffset); (*it)->changeContent(0, content); } return (*it)->blockOffset; }
std::string BufferManager::getBlock(const std::string& fileName, int blockOffset,int start,int end) { int n = fileName.find(".index", 0); Index *indexPtr = Cat.getIndexPtr(fileName.substr(0, n)); std::list<Block*>::iterator it = readFileBlock(fileName, blockOffset); std::string record = ""; for (int i = start; i < end; i++) record += (*it)->content[i]; return record; }
void BufferManager::readFile(const std::string& fileName) { int blockNum; int n; if ((n = fileName.find(".table", 0)) != std::string::npos) { Table* tablePtr = Cat.getTablePtr(fileName.substr(0,n)); blockNum = tablePtr->blockNum; } if ((n = fileName.find(".index", 0)) != std::string::npos) { Index* indexPtr = Cat.getIndexPtr(fileName.substr(0, n)); blockNum = indexPtr->blockNum; } std::list<Block*>::iterator it; for (int i = 0; i < blockNum; i++) it = readFileBlock(fileName, i); }