18 #ifndef viskores_viskores_cont_internal_Buffer_h
19 #define viskores_viskores_cont_internal_Buffer_h
50 std::size_t typeSize);
55 return NumberOfValuesToNumberOfBytes(numValues,
sizeof(T));
71 using DeleterType = void(
void*);
74 void BasicDeleter(
void* mem)
76 T* obj =
reinterpret_cast<T*
>(mem);
80 using CopierType =
void*(
const void*);
82 void* BasicCopier(
const void* mem)
84 return new T(*
reinterpret_cast<const T*
>(mem));
95 class VISKORES_CONT_EXPORT Buffer final
97 class InternalsStruct;
98 std::shared_ptr<InternalsStruct> Internals;
100 friend struct viskores::cont::internal::detail::BufferHelper;
137 VISKORES_CONT bool MetaDataIsType(
const std::string& type)
const;
139 const std::string& type,
140 detail::DeleterType* deleter,
141 detail::CopierType copier)
const;
142 VISKORES_CONT void* GetMetaData(
const std::string& type)
const;
151 template <
typename MetaDataType>
154 return this->MetaDataIsType(viskores::cont::TypeToString<MetaDataType>());
166 template <
typename MetaDataType>
167 VISKORES_CONT void SetMetaData(
const MetaDataType& metadata)
const
169 MetaDataType* metadataCopy =
new MetaDataType(metadata);
170 this->SetMetaData(metadataCopy,
172 detail::BasicDeleter<MetaDataType>,
173 detail::BasicCopier<MetaDataType>);
186 template <
typename MetaDataType>
189 if (!this->HasMetaData())
191 this->SetMetaData(MetaDataType{});
193 return *
reinterpret_cast<MetaDataType*
>(
194 this->GetMetaData(viskores::cont::TypeToString<MetaDataType>()));
270 VISKORES_CONT void DeepCopyFrom(
const viskores::cont::internal::Buffer& source)
const;
271 VISKORES_CONT void DeepCopyFrom(
const viskores::cont::internal::Buffer& source,
284 VISKORES_CONT void Reset(
const viskores::cont::internal::BufferInfo& buffer);
300 VISKORES_CONT viskores::cont::internal::BufferInfo GetHostBufferInfo()
const;
307 VISKORES_CONT viskores::cont::internal::BufferInfo GetDeviceBufferInfo(
313 VISKORES_CONT viskores::cont::internal::TransferredBuffer TakeHostBufferOwnership()
const;
318 VISKORES_CONT viskores::cont::internal::TransferredBuffer TakeDeviceBufferOwnership(
338 return (this->Internals == rhs.Internals);
343 return (this->Internals != rhs.Internals);
347 template <
typename... ResetArgs>
348 VISKORES_CONT viskores::cont::internal::Buffer MakeBuffer(ResetArgs&&... resetArgs)
350 viskores::cont::internal::Buffer buffer;
351 buffer.Reset(viskores::cont::internal::BufferInfo(std::forward<ResetArgs>(resetArgs)...));
365 struct VISKORES_CONT_EXPORT Serialization<
viskores::cont::internal::Buffer>
367 static VISKORES_CONT void save(BinaryBuffer& bb,
const viskores::cont::internal::Buffer& obj);
368 static VISKORES_CONT void load(BinaryBuffer& bb, viskores::cont::internal::Buffer& obj);
374 #endif //viskores_viskores_cont_internal_Buffer_h