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