/** * Copyright (c) 2017 by Contributors * @file dgl/runtime/serializer.h * @brief Serializer extension to support DGL data types * Include this file to enable serialization of DGLDataType, DGLContext */ #ifndef DGL_RUNTIME_SERIALIZER_H_ #define DGL_RUNTIME_SERIALIZER_H_ #include #include #include "c_runtime_api.h" #include "smart_ptr_serializer.h" namespace dmlc { namespace serializer { template <> struct Handler { inline static void Write(Stream *strm, const DGLDataType &dtype) { Handler::Write(strm, dtype.code); Handler::Write(strm, dtype.bits); Handler::Write(strm, dtype.lanes); } inline static bool Read(Stream *strm, DGLDataType *dtype) { if (!Handler::Read(strm, &(dtype->code))) return false; if (!Handler::Read(strm, &(dtype->bits))) return false; if (!Handler::Read(strm, &(dtype->lanes))) return false; return true; } }; template <> struct Handler { inline static void Write(Stream *strm, const DGLContext &ctx) { int32_t device_type = static_cast(ctx.device_type); Handler::Write(strm, device_type); Handler::Write(strm, ctx.device_id); } inline static bool Read(Stream *strm, DGLContext *ctx) { int32_t device_type = 0; if (!Handler::Read(strm, &(device_type))) return false; ctx->device_type = static_cast(device_type); if (!Handler::Read(strm, &(ctx->device_id))) return false; return true; } }; } // namespace serializer } // namespace dmlc #endif // DGL_RUNTIME_SERIALIZER_H_