// Copyright Advanced Micro Devices, Inc., or its affiliates. // SPDX-License-Identifier: MIT #pragma once #ifdef ROCROLLER_USE_LLVM #include #endif #include #include #include #include #include "Base.hpp" #include "Containers.hpp" #include "Expression.hpp" #include "Operations.hpp" namespace rocRoller { namespace Serialization { template struct SequenceTraits, IO> : public DefaultSequenceTraits, IO, false> { }; template <> struct KeyConversion { static std::string toString(ArgumentOffsetMap::key_type const& value) { std::stringstream ss; ss << std::get<0>(value) << " " << std::get<1>(value) << " " << std::get<2>(value); return ss.str(); } static ArgumentOffsetMap::key_type fromString(std::string const& value) { std::stringstream ss(value); int tag, dim; std::string argTypeStr; ss >> tag; ss >> argTypeStr; ss >> dim; auto argType = rocRoller::fromString(argTypeStr); return {Operations::OperationTag{tag}, argType, dim}; } }; template struct CustomMappingTraits : public DefaultCustomMappingTraits { }; template struct MappingTraits { static const bool flow = false; using iot = IOTraits; static void mapping(IO& io, Command& command) { iot::mapRequired(io, "sync", command.m_sync); iot::mapRequired(io, "operations", command.m_operations); iot::mapRequired(io, "argOffsetMap", command.m_argOffsetMap); iot::mapRequired(io, "commandArgs", command.m_commandArgs); iot::mapRequired(io, "nextTag", command.m_nextTagValue); iot::mapRequired(io, "runtimeArgsOffset", command.m_runtimeArgsOffset); // XXX reconstruct m_tagMap when !outputting } static void mapping(IO& io, Command& command, EmptyContext& ctx) { mapping(io, command); } }; template struct MappingTraits : public SharedPointerMappingTraits { }; } }