blob: 9c8341ca49bf224effec615f2bad2a554d61f5f9 [file] [log] [blame]
#pragma once
#include "data_types.hpp"
namespace phosphor
{
namespace dbus
{
namespace monitoring
{
namespace detail
{
/** @brief Map format strings to undecorated C++ types. */
template <typename T> struct GetFormatType
{
};
template <> struct GetFormatType<char>
{
static constexpr auto format = "=%hhd";
};
template <> struct GetFormatType<short int>
{
static constexpr auto format = "=%hd";
};
template <> struct GetFormatType<int>
{
static constexpr auto format = "=%d";
};
template <> struct GetFormatType<long int>
{
static constexpr auto format = "=%ld";
};
template <> struct GetFormatType<long long int>
{
static constexpr auto format = "=%lld";
};
template <> struct GetFormatType<unsigned char>
{
static constexpr auto format = "=%hhd";
};
template <> struct GetFormatType<unsigned short int>
{
static constexpr auto format = "=%hd";
};
template <> struct GetFormatType<unsigned int>
{
static constexpr auto format = "=%d";
};
template <> struct GetFormatType<unsigned long int>
{
static constexpr auto format = "=%ld";
};
template <> struct GetFormatType<unsigned long long int>
{
static constexpr auto format = "=%lld";
};
template <> struct GetFormatType<std::string>
{
static constexpr auto format = "=%s";
};
template <> struct GetFormatType<char*>
{
static constexpr auto format = "=%s";
};
template <> struct GetFormatType<const char*>
{
static constexpr auto format = "=%s";
};
} // namespace detail
/** @brief Get the format string for a C++ type. */
template <typename T> struct GetFormat
{
static constexpr auto format =
detail::GetFormatType<DowncastType<T>>::format;
};
} // namespace monitoring
} // namespace dbus
} // namespace phosphor