1
0
Fork 0

check for existing segments before creating

This commit is contained in:
Kevin Matz 2021-09-19 12:19:53 -04:00
parent c5c4df1888
commit 95916aea56
1 changed files with 19 additions and 15 deletions

View File

@ -180,12 +180,13 @@ public:
template<class T>
void createHeader()
{
if (flags_.hasHeader)
{
header_ = std::make_shared<T>();
if (stream_ && stream_->good())
header_->iStream(stream_);
}
if (!flags_.hasHeader)
return; // doesn't get a header segment, inherits
if (header_)
return; // already has a header segment
header_ = std::make_shared<T>();
if (stream_ && stream_->good())
header_->iStream(stream_);
}
/**
* @brief createData
@ -193,21 +194,24 @@ public:
template<class T>
void createData()
{
if (flags_.hasData)
{
data_ = std::make_shared<T>();
if (stream_ && stream_->good())
data_->iStream(stream_);
}
if (!flags_.hasData)
return; // doesn't get a data segment, inherits
if (data_)
return; // already has a data segment
data_ = std::make_shared<T>();
if (stream_ && stream_->good())
data_->iStream(stream_);
}
/**
* @brief createDataBlock
*/
template<class T>
void createDataBlock() {
createData<Block<T>>();
auto block = std::static_pointer_cast<Block<T>>(data_);
block->setParent(shared_from_this());
if (!data_) { // may already have a data segment
createData<Block<T>>();
auto block = std::static_pointer_cast<Block<T>>(data_);
block->setParent(shared_from_this());
}
}
protected: