Skip to content
6 changes: 6 additions & 0 deletions CUDADataFormats/CaloCommon/BuildFile.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
<use name="CUDADataFormats/Common" />
<use name="HeterogeneousCore/CUDAUtilities"/>

<export>
<lib name="1"/>
</export>
68 changes: 68 additions & 0 deletions CUDADataFormats/CaloCommon/interface/Common.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
#ifndef CUDADataFormats_CaloCommon_interface_Common_h
#define CUDADataFormats_CaloCommon_interface_Common_h

#include <vector>

#include "HeterogeneousCore/CUDAUtilities/interface/HostAllocator.h"
#include "HeterogeneousCore/CUDAUtilities/interface/device_unique_ptr.h"

namespace calo {
namespace common {

// FIXME: not able to get enums to work with genreflex
namespace tags {

struct Vec {};
struct Ptr {};
struct DevPtr {};

} // namespace tags

template <typename tag>
struct AddSize {};

template <>
struct AddSize<tags::Ptr> {
uint32_t size;
};

template <>
struct AddSize<tags::DevPtr> {
uint32_t size;
};

struct ViewStoragePolicy {
using TagType = tags::Ptr;

template <typename T>
struct StorageSelector {
using type = T*;
};
};

struct DevStoragePolicy {
using TagType = tags::DevPtr;

template <typename T>
struct StorageSelector {
using type = cms::cuda::device::unique_ptr<T[]>;
};
};

template <template <typename> typename Allocator = std::allocator>
struct VecStoragePolicy {
using TagType = tags::Vec;

template <typename T>
struct StorageSelector {
using type = std::vector<T, Allocator<T>>;
};
};

template <typename T>
using CUDAHostAllocatorAlias = cms::cuda::HostAllocator<T>;

} // namespace common
} // namespace calo

#endif // CUDADataFormats_CaloCommon_interface_Common_h
2 changes: 2 additions & 0 deletions CUDADataFormats/CaloCommon/src/classes.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
#include "DataFormats/Common/interface/Wrapper.h"
#include "CUDADataFormats/CaloCommon/interface/Common.h"
8 changes: 8 additions & 0 deletions CUDADataFormats/CaloCommon/src/classes_def.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
<lcgdict>
<enum name="calo::common::tags::Ptr"/>
<enum name="calo::common::tags::Vec"/>
<enum name="calo::common::tags::DevPtr"/>
<class name="calo::common::AddSize<calo::common::tags::Ptr>"/>
<class name="calo::common::AddSize<calo::common::tags::Vec>"/>
<class name="calo::common::AddSize<calo::common::tags::DevPtr>"/>
</lcgdict>
Loading