check for existing segments before creating
This commit is contained in:
parent
c5c4df1888
commit
95916aea56
|
@ -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:
|
||||
|
|
Loading…
Reference in New Issue