예제 #1
0
void bufferManager::rmInfo(CString table_name)
{
	int i = readBlockFromDisk(0);
	address add;
	buffer[i].getNextLink(1,add);

	address oldAdd, nextAdd;
	CString name;
	int size;
	oldAdd.block_position = 0;
	oldAdd.index_position = 1;
	int j;
	while(add.block_position != -1 && add.index_position != -1)
	{
		j = readBlockFromDisk(add.block_position);
		size = buffer[j].getDataSize(add.index_position);
		char* TableInfo = new char[size];
		buffer[j].getData(add.index_position,TableInfo);
		buffer[j].getNextLink(add.index_position,nextAdd);
		name = TableInfo;
		if(name == table_name)
		{
			int front = readBlockFromDisk(oldAdd.block_position);
			buffer[front].setNextLink(oldAdd.index_position, nextAdd);
			rmData(add);
			delete [] TableInfo;
			break;
		}
		delete [] TableInfo;
		oldAdd.block_position = add.block_position;
		oldAdd.index_position = add.index_position;
		add.block_position = nextAdd.block_position;
		add.index_position = nextAdd.index_position;
	}
}
TEST_F(FourierTransformerGPUTest, FwdBwdFilterTest)
{
	RealMatrix	rmData(5,5), rmFilter(4,4); // MAGIC NUMBERS WHICH END UP AT 8x8

	rmData << 	17, 24, 1, 8, 15,
			23, 5, 7, 14, 16,
			4, 6, 13, 20, 22,
			10, 12, 19, 21, 3,
			11, 18, 25, 2, 9;

	rmFilter << 16,	2,	3, 13,
				5,	11,	10, 8,
				9,	7,	6, 12,
				4,  14, 15, 1;

	RealMatrix		rmDataPadded, rmFilterPadded;
	FourierPadder padder(5, 4);
	padder.padData(rmData,rmDataPadded);
	padder.padFilter(rmFilter,rmFilterPadded);

	ComplexMatrix	cmData(ftfftw->rows_,ftfftw->cols_/2+1);
	ComplexMatrix	cmFilter(ftfftw->rows_,ftfftw->cols_/2+1);
	cmData.setZero(); 	cmFilter.setZero();

	ftfftw->forward(rmDataPadded,cmData);
	ftfftw->forward(rmFilterPadded,cmFilter);

	ComplexMatrix cmResult = cmData.cwiseProduct(cmFilter);

	ftfftw->backward(cmResult,rmDataPadded);
	rmDataPadded = rmDataPadded/(ftfftw->rows_*ftfftw->cols_);
	padder.extractDenseOutput(rmDataPadded,rmData);

	RealMatrix expectedResult(5,5);
	expectedResult << 	831, 1224, 1338,  810,  784,
						1360, 1779, 1366, 1473, 1159,
						1422, 1400, 1847, 1615,  877,
						944, 1423, 1462, 1315,  726,
						811,  973, 1064,  751,  144;

	std::cout << rmData << std::endl;
	ASSERT_EQ(true,rmData.isApprox(expectedResult,0.000001));
}