.. _program_listing_file_include_flamegpu_runtime_messaging_MessageBucket_MessageBucketHost.h: Program Listing for File MessageBucketHost.h ============================================ |exhale_lsh| :ref:`Return to documentation for file ` (``include/flamegpu/runtime/messaging/MessageBucket/MessageBucketHost.h``) .. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS .. code-block:: cpp #ifndef INCLUDE_FLAMEGPU_RUNTIME_MESSAGING_MESSAGEBUCKET_MESSAGEBUCKETHOST_H_ #define INCLUDE_FLAMEGPU_RUNTIME_MESSAGING_MESSAGEBUCKET_MESSAGEBUCKETHOST_H_ #include #include #include "flamegpu/model/Variable.h" #include "flamegpu/runtime/messaging/MessageBucket.h" #include "flamegpu/runtime/messaging/MessageBruteForce/MessageBruteForceHost.h" namespace flamegpu { class MessageBucket::CUDAModelHandler : public MessageSpecialisationHandler { public: explicit CUDAModelHandler(detail::CUDAMessage &a); ~CUDAModelHandler() override; void init(detail::CUDAScatter &scatter, unsigned int streamId, cudaStream_t stream) override; void buildIndex(detail::CUDAScatter &scatter, unsigned int streamId, cudaStream_t stream) override; void allocateMetaDataDevicePtr(cudaStream_t stream) override; void freeMetaDataDevicePtr() override; const void *getMetaDataDevicePtr() const override { return d_data; } private: void resizeCubTemp(); void resizeKeysVals(unsigned int newSize); unsigned int bucketCount; size_t d_CUB_temp_storage_bytes = 0; unsigned int *d_CUB_temp_storage = nullptr; unsigned int *d_histogram = nullptr; unsigned int *d_keys = nullptr, *d_vals = nullptr; size_t d_keys_vals_storage_bytes = 0; MetaData hd_data; MetaData *d_data = nullptr; detail::CUDAMessage &sim_message; }; struct MessageBucket::Data : public MessageBruteForce::Data { friend class ModelDescription; friend struct ModelData; IntT lowerBound; IntT upperBound; virtual ~Data() = default; std::unique_ptr getSpecialisationHander(detail::CUDAMessage &owner) const override; std::type_index getType() const override; protected: Data *clone(const std::shared_ptr &newParent) override; Data(std::shared_ptr, const Data &other); Data(std::shared_ptr, const std::string &message_name); }; class MessageBucket::CDescription : public MessageBruteForce::CDescription { friend struct Data; public: explicit CDescription(std::shared_ptr data); explicit CDescription(std::shared_ptr data); CDescription(const CDescription& other_agent) = default; CDescription(CDescription&& other_agent) = default; CDescription& operator=(const CDescription& other_agent) = default; CDescription& operator=(CDescription&& other_agent) = default; bool operator==(const CDescription& rhs) const; bool operator!=(const CDescription& rhs) const; IntT getLowerBound() const; IntT getUpperBound() const; }; class MessageBucket::Description : public CDescription { public: explicit Description(std::shared_ptr data); Description(const Description& other_message) = default; Description(Description && other_message) = default; Description& operator=(const Description & other_message) = default; Description& operator=(Description && other_message) = default; using MessageBruteForce::CDescription::setPersistent; using MessageBruteForce::CDescription::newVariable; #ifdef SWIG using MessageBruteForce::CDescription::newVariableArray; #endif void setLowerBound(IntT key); void setUpperBound(IntT key); void setBounds(IntT min, const IntT max); }; } // namespace flamegpu #endif // INCLUDE_FLAMEGPU_RUNTIME_MESSAGING_MESSAGEBUCKET_MESSAGEBUCKETHOST_H_