Skip to content

Commit 597ba19

Browse files
storeChunk: Add an overload for shared_ptr<T[]> (#1296)
* Add storeChunk(shared_ptr<T[]>, ...) overload * Use overload in examples * Revert "Use overload in examples" This reverts commit 990b33a. * Compatibility with clang-6
1 parent 34e7df6 commit 597ba19

File tree

2 files changed

+19
-0
lines changed

2 files changed

+19
-0
lines changed

include/openPMD/RecordComponent.hpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -241,6 +241,9 @@ class RecordComponent : public BaseRecordComponent
241241
template <typename T>
242242
void storeChunk(std::shared_ptr<T>, Offset, Extent);
243243

244+
template <typename T>
245+
void storeChunk(std::shared_ptr<T[]>, Offset, Extent);
246+
244247
template <typename T_ContiguousContainer>
245248
typename std::enable_if<
246249
traits::IsContiguousContainer<T_ContiguousContainer>::value>::type

include/openPMD/RecordComponent.tpp

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -208,6 +208,16 @@ RecordComponent::storeChunk(std::shared_ptr<T> data, Offset o, Extent e)
208208
rc.m_chunks.push(IOTask(this, dWrite));
209209
}
210210

211+
template <typename T>
212+
inline void
213+
RecordComponent::storeChunk(std::shared_ptr<T[]> data, Offset o, Extent e)
214+
{
215+
storeChunk(
216+
std::static_pointer_cast<T>(std::move(data)),
217+
std::move(o),
218+
std::move(e));
219+
}
220+
211221
template< typename T_ContiguousContainer >
212222
inline typename std::enable_if<
213223
traits::IsContiguousContainer< T_ContiguousContainer >::value
@@ -310,6 +320,8 @@ RecordComponent::storeChunk( Offset o, Extent e, F && createBuffer )
310320
auto &out = *getBufferView.out;
311321
if (!out.backendManagedBuffer)
312322
{
323+
// note that data might have either
324+
// type shared_ptr<T> or shared_ptr<T[]>
313325
auto data = std::forward<F>(createBuffer)(size);
314326
out.ptr = static_cast<void *>(data.get());
315327
storeChunk(std::move(data), std::move(o), std::move(e));
@@ -326,8 +338,12 @@ RecordComponent::storeChunk( Offset offset, Extent extent )
326338
std::move( extent ),
327339
[]( size_t size )
328340
{
341+
#if defined(__clang_major__) && __clang_major__ < 7
329342
return std::shared_ptr< T >{
330343
new T[ size ], []( auto * ptr ) { delete[] ptr; } };
344+
#else
345+
return std::shared_ptr< T[] >{ new T[ size ] };
346+
#endif
331347
} );
332348
}
333349
}

0 commit comments

Comments
 (0)