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 VTKM_CONT
MultiBlock::MultiBlock(const vtkm::cont::DataSet& ds) MultiBlock::MultiBlock(const vtkm::cont::DataSet& ds)
: capacitytag(false)
{ {
this->blocks.insert(blocks.end(), ds); this->blocks.insert(blocks.end(), ds);
} }
VTKM_CONT VTKM_CONT
MultiBlock::MultiBlock(const vtkm::cont::MultiBlock& src) MultiBlock::MultiBlock(const vtkm::cont::MultiBlock& src)
: capacitytag(false)
{ {
this->blocks = src.GetBlocks(); this->blocks = src.GetBlocks();
} }
VTKM_CONT VTKM_CONT
MultiBlock::MultiBlock(const std::vector<vtkm::cont::DataSet>& mblocks) MultiBlock::MultiBlock(const std::vector<vtkm::cont::DataSet>& mblocks)
: capacitytag(false)
{ {
this->blocks = mblocks; this->blocks = mblocks;
} }
@ -55,14 +52,11 @@ MultiBlock::MultiBlock(const std::vector<vtkm::cont::DataSet>& mblocks)
VTKM_CONT VTKM_CONT
MultiBlock::MultiBlock(vtkm::Id size) MultiBlock::MultiBlock(vtkm::Id size)
{ {
this->capacity = size;
this->capacitytag = true;
this->blocks.reserve(static_cast<std::size_t>(size)); this->blocks.reserve(static_cast<std::size_t>(size));
} }
VTKM_CONT VTKM_CONT
MultiBlock::MultiBlock() MultiBlock::MultiBlock()
: capacitytag(false)
{ {
} }
@ -92,32 +86,6 @@ vtkm::Id MultiBlock::GetNumberOfBlocks() const
return static_cast<vtkm::Id>(this->blocks.size()); 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 VTKM_CONT
const vtkm::cont::DataSet& MultiBlock::GetBlock(vtkm::Id blockId) const const vtkm::cont::DataSet& MultiBlock::GetBlock(vtkm::Id blockId) const
{ {
@ -139,29 +107,32 @@ void MultiBlock::AddBlock(vtkm::cont::DataSet& ds)
VTKM_CONT VTKM_CONT
void MultiBlock::AddBlocks(std::vector<vtkm::cont::DataSet>& mblocks) void MultiBlock::AddBlocks(std::vector<vtkm::cont::DataSet>& mblocks)
{ {
for (std::size_t i = 0; i < mblocks.size(); i++) this->blocks.insert(blocks.end(), mblocks.begin(), mblocks.end());
{
AddBlock(mblocks[i]);
}
return; return;
} }
VTKM_CONT VTKM_CONT
void MultiBlock::InsertBlock(vtkm::Id index, vtkm::cont::DataSet& ds) 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); this->blocks.insert(blocks.begin() + index, ds);
else else
std::cout << "insertion failure, invalid insertion posotion\n"; {
std::string msg = "invalid insert position\n ";
throw ErrorExecution(msg);
}
} }
VTKM_CONT 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())) if (index < static_cast<vtkm::Id>(blocks.size()))
this->blocks.at(static_cast<std::size_t>(index)) = ds; this->blocks.at(static_cast<std::size_t>(index)) = ds;
else else
std::cout << "invalid overwrite posotion\n"; {
std::string msg = "invalid replace position\n ";
throw ErrorExecution(msg);
}
} }
VTKM_CONT VTKM_CONT

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

@ -115,16 +115,30 @@ static void MultiBlockTest()
multiblock.GetBlock(0).GetField("cellvar").GetRange(&TestRange); multiblock.GetBlock(0).GetField("cellvar").GetRange(&TestRange);
VTKM_TEST_ASSERT(TestRange == SourceRange, "Local field value info incorrect"); VTKM_TEST_ASSERT(TestRange == SourceRange, "Local field value info incorrect");
multiblock.OverWriteBlock(0, TDset2); vtkm::cont::MultiBlock testblocks1;
TestDSet = multiblock.GetBlock(0); std::vector<vtkm::cont::DataSet> blocks = multiblock.GetBlocks();
DataSet_Compare(TDset2, TestDSet); testblocks1.AddBlocks(blocks);
multiblock.OverWriteBlock(0, TDset1); VTKM_TEST_ASSERT(multiblock.GetNumberOfBlocks() == testblocks1.GetNumberOfBlocks(),
TestDSet = multiblock.GetBlock(0); "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); 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) void DataSet_Compare(vtkm::cont::DataSet& LeftDateSet, vtkm::cont::DataSet& RightDateSet)