reviewed version 1

This commit is contained in:
dongliangchu 2017-08-24 10:50:14 -04:00
parent 1d80d5b69c
commit 90c870f2f5
3 changed files with 35 additions and 56 deletions

@ -33,21 +33,18 @@ namespace cont
VTKM_CONT
MultiBlock::MultiBlock(const vtkm::cont::DataSet& ds)
: capacitytag(false)
{
this->blocks.insert(blocks.end(), ds);
}
VTKM_CONT
MultiBlock::MultiBlock(const vtkm::cont::MultiBlock& src)
: capacitytag(false)
{
this->blocks = src.GetBlocks();
}
VTKM_CONT
MultiBlock::MultiBlock(const std::vector<vtkm::cont::DataSet>& mblocks)
: capacitytag(false)
{
this->blocks = mblocks;
}
@ -55,14 +52,11 @@ MultiBlock::MultiBlock(const std::vector<vtkm::cont::DataSet>& mblocks)
VTKM_CONT
MultiBlock::MultiBlock(vtkm::Id size)
{
this->capacity = size;
this->capacitytag = true;
this->blocks.reserve(static_cast<std::size_t>(size));
}
VTKM_CONT
MultiBlock::MultiBlock()
: capacitytag(false)
{
}
@ -92,32 +86,6 @@ vtkm::Id MultiBlock::GetNumberOfBlocks() const
return static_cast<vtkm::Id>(this->blocks.size());
}
VTKM_CONT
vtkm::Id MultiBlock::GetCapacity()
{
if (this->capacitytag)
return this->capacity;
else
std::cout << "structure capacity not set yet\n";
return 0;
}
VTKM_CONT
void MultiBlock::SetCapacity(vtkm::Id size)
{
if (static_cast<vtkm::Id>(this->blocks.capacity()) < size)
{
this->capacity = size;
this->capacitytag = true;
this->blocks.reserve(static_cast<std::size_t>(size));
}
else
{
std::cout << "required size is too small and rejected<<\n";
}
}
VTKM_CONT
const vtkm::cont::DataSet& MultiBlock::GetBlock(vtkm::Id blockId) const
{
@ -139,29 +107,32 @@ void MultiBlock::AddBlock(vtkm::cont::DataSet& ds)
VTKM_CONT
void MultiBlock::AddBlocks(std::vector<vtkm::cont::DataSet>& mblocks)
{
for (std::size_t i = 0; i < mblocks.size(); i++)
{
AddBlock(mblocks[i]);
}
this->blocks.insert(blocks.end(), mblocks.begin(), mblocks.end());
return;
}
VTKM_CONT
void MultiBlock::InsertBlock(vtkm::Id index, vtkm::cont::DataSet& ds)
{
if (index < static_cast<vtkm::Id>(blocks.size()))
if (index <= static_cast<vtkm::Id>(blocks.size()))
this->blocks.insert(blocks.begin() + index, ds);
else
std::cout << "insertion failure, invalid insertion posotion\n";
{
std::string msg = "invalid insert position\n ";
throw ErrorExecution(msg);
}
}
VTKM_CONT
void MultiBlock::OverWriteBlock(vtkm::Id index, vtkm::cont::DataSet& ds)
void MultiBlock::ReplaceBlock(vtkm::Id index, vtkm::cont::DataSet& ds)
{
if (index < static_cast<vtkm::Id>(blocks.size()))
this->blocks.at(static_cast<std::size_t>(index)) = ds;
else
std::cout << "invalid overwrite posotion\n";
{
std::string msg = "invalid replace position\n ";
throw ErrorExecution(msg);
}
}
VTKM_CONT

@ -64,9 +64,6 @@ public:
VTKM_CONT
vtkm::Id GetNumberOfBlocks() const;
VTKM_CONT
vtkm::Id GetCapacity();
VTKM_CONT
void SetCapacity(vtkm::Id size);
@ -83,7 +80,7 @@ public:
void InsertBlock(vtkm::Id index, vtkm::cont::DataSet& ds);
/// replace the "index" positioned element of the contained DataSet vector with "ds"
VTKM_CONT
void OverWriteBlock(vtkm::Id index, vtkm::cont::DataSet& ds);
void ReplaceBlock(vtkm::Id index, vtkm::cont::DataSet& ds);
/// append the DataSet vector "mblocks" to the end of the contained one
VTKM_CONT
void AddBlocks(std::vector<vtkm::cont::DataSet>& mblocks);
@ -140,9 +137,6 @@ public:
private:
std::vector<vtkm::cont::DataSet> blocks;
vtkm::Id capacity;
bool capacitytag;
std::vector<vtkm::Id> block_ids;
};
}
} // namespace vtkm::cont

@ -115,16 +115,30 @@ static void MultiBlockTest()
multiblock.GetBlock(0).GetField("cellvar").GetRange(&TestRange);
VTKM_TEST_ASSERT(TestRange == SourceRange, "Local field value info incorrect");
multiblock.OverWriteBlock(0, TDset2);
TestDSet = multiblock.GetBlock(0);
DataSet_Compare(TDset2, TestDSet);
multiblock.OverWriteBlock(0, TDset1);
TestDSet = multiblock.GetBlock(0);
vtkm::cont::MultiBlock testblocks1;
std::vector<vtkm::cont::DataSet> blocks = multiblock.GetBlocks();
testblocks1.AddBlocks(blocks);
VTKM_TEST_ASSERT(multiblock.GetNumberOfBlocks() == testblocks1.GetNumberOfBlocks(),
"inconsistent number of blocks");
vtkm::cont::MultiBlock testblocks2(2);
testblocks2.InsertBlock(0, TDset1);
testblocks2.InsertBlock(1, TDset2);
TestDSet = testblocks2.GetBlock(0);
DataSet_Compare(TDset1, TestDSet);
TestDSet = testblocks2.GetBlock(1);
DataSet_Compare(TDset2, TestDSet);
testblocks2.ReplaceBlock(0, TDset2);
testblocks2.ReplaceBlock(1, TDset1);
TestDSet = testblocks2.GetBlock(0);
DataSet_Compare(TDset2, TestDSet);
TestDSet = testblocks2.GetBlock(1);
DataSet_Compare(TDset1, TestDSet);
multiblock.SetCapacity(3);
std::cout << "capacity updated\n";
multiblock.SetCapacity(2);
std::cout << "structure capacity" << multiblock.GetCapacity() << "\n";
}
void DataSet_Compare(vtkm::cont::DataSet& LeftDateSet, vtkm::cont::DataSet& RightDateSet)