summaryrefslogtreecommitdiffstats
path: root/src/format.hpp
diff options
context:
space:
mode:
authorBrad Bishop <bradleyb@fuzziesquirrel.com>2017-05-23 18:17:25 -0400
committerBrad Bishop <bradleyb@fuzziesquirrel.com>2017-06-19 16:25:59 -0400
commit893b348890781dba2603ead61cf6f724350d0b47 (patch)
tree9b5f6d6c4a7a57afd7065ef8ec474a6593e93c5d /src/format.hpp
parent13fd8722e616dd424cd585187fb0ef65f6316023 (diff)
downloadphosphor-dbus-monitor-893b348890781dba2603ead61cf6f724350d0b47.tar.gz
phosphor-dbus-monitor-893b348890781dba2603ead61cf6f724350d0b47.zip
Add printf format utility
Add a template for obtaining a format string at build for a built-in C++ type. Change-Id: I8e5d26d4481b3ddafb5ffddbb058a1c75b3a2257 Signed-off-by: Brad Bishop <bradleyb@fuzziesquirrel.com>
Diffstat (limited to 'src/format.hpp')
-rw-r--r--src/format.hpp83
1 files changed, 83 insertions, 0 deletions
diff --git a/src/format.hpp b/src/format.hpp
new file mode 100644
index 0000000..9c8341c
--- /dev/null
+++ b/src/format.hpp
@@ -0,0 +1,83 @@
+#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
OpenPOWER on IntegriCloud