// Copyright Advanced Micro Devices, Inc., or its affiliates. // SPDX-License-Identifier: MIT #pragma once #include #include #include #include #include namespace rocRoller { namespace Operations { class Literal : public BaseOperation { public: Literal() = delete; explicit Literal(CommandArgumentValue value); std::string toString() const; CommandArgumentValue value() const; bool operator==(Literal const& rhs) const; private: template friend struct rocRoller::Serialization::MappingTraits; CommandArgumentValue m_value; }; std::ostream& operator<<(std::ostream& stream, Literal const& val); class Scalar : public BaseOperation { public: Scalar() = delete; explicit Scalar(VariableType variableType); std::string toString() const; std::string toString(const unsigned char*) const; void allocateArguments(); CommandArgumentPtr data() const; VariableType variableType() const; bool operator==(Scalar const& rhs) const; private: template friend struct rocRoller::Serialization::MappingTraits; std::string getArgumentString(const unsigned char*) const; CommandArgumentPtr m_pointer; VariableType m_variableType; }; std::ostream& operator<<(std::ostream& stream, Scalar const& val); class Tensor : public BaseOperation { public: Tensor() = delete; Tensor(int numDims, VariableType variableType); Tensor(int numDims, VariableType variableType, std::vector const& literalSizes, std::vector const& literalStrides); std::string toString() const; std::string toString(const unsigned char*) const; void allocateArguments(); std::vector const& literalSizes() const; std::vector const& literalStrides() const; std::vector const& strides() const; std::vector const& sizes() const; CommandArgumentPtr data() const; VariableType variableType() const; DataType dataType() const; bool operator==(Tensor const& rhs) const; private: template friend struct rocRoller::Serialization::MappingTraits; std::string getArgumentString(const unsigned char*) const; VariableType m_variableType; int m_numDims = -1; CommandArgumentPtr m_pointer; std::vector m_sizes; std::vector m_strides; std::vector m_literalSizes; std::vector m_literalStrides; }; std::ostream& operator<<(std::ostream& stream, Tensor const& val); } } #include