Program Listing for File SubAgentDescription.h

Return to documentation for file (include/flamegpu/model/SubAgentDescription.h)

#ifndef INCLUDE_FLAMEGPU_MODEL_SUBAGENTDESCRIPTION_H_
#define INCLUDE_FLAMEGPU_MODEL_SUBAGENTDESCRIPTION_H_

#include <memory>
#include <string>


namespace flamegpu {

struct ModelData;
struct SubModelData;
struct SubAgentData;


class CSubAgentDescription {
    friend struct SubAgentData;

 public:
    explicit CSubAgentDescription(std::shared_ptr<SubAgentData> data);
    explicit CSubAgentDescription(std::shared_ptr<const SubAgentData> data);
    CSubAgentDescription(const CSubAgentDescription& other_agent) = default;
    CSubAgentDescription(CSubAgentDescription&& other_agent) = default;
    CSubAgentDescription& operator=(const CSubAgentDescription& other_agent) = default;
    CSubAgentDescription& operator=(CSubAgentDescription&& other_agent) = default;
    bool operator==(const CSubAgentDescription& rhs) const;
    bool operator!=(const CSubAgentDescription& rhs) const;

    std::string getStateMapping(const std::string& sub_state_name) const;
    std::string getVariableMapping(const std::string& sub_variable_name) const;

 protected:
    std::shared_ptr<SubAgentData> subagent;
};

class SubAgentDescription : public CSubAgentDescription {
 public:
    explicit SubAgentDescription(std::shared_ptr<SubAgentData> data);
    SubAgentDescription(const SubAgentDescription& other_agent) = default;
    SubAgentDescription(SubAgentDescription&& other_agent) = default;
    SubAgentDescription& operator=(const SubAgentDescription& other_agent) = default;
    SubAgentDescription& operator=(SubAgentDescription&& other_agent) = default;

    void mapState(const std::string &sub_state_name, const std::string &master_state_name);
    void mapVariable(const std::string &sub_variable_name, const std::string &master_variable_name);
};

}  // namespace flamegpu

#endif  // INCLUDE_FLAMEGPU_MODEL_SUBAGENTDESCRIPTION_H_