From 02515928ec9bbbdc107c0c36a943e11ac786f27c Mon Sep 17 00:00:00 2001
From: Jeremie Deray <jeremie.deray@pal-robotics.com>
Date: Thu, 26 Oct 2017 09:45:11 +0200
Subject: [PATCH] rm usuless func & cache typeid

---
 src/serialization/cereal/io.h | 21 ++++++++++-----------
 1 file changed, 10 insertions(+), 11 deletions(-)

diff --git a/src/serialization/cereal/io.h b/src/serialization/cereal/io.h
index b90eacfaf..524af2e41 100644
--- a/src/serialization/cereal/io.h
+++ b/src/serialization/cereal/io.h
@@ -9,6 +9,14 @@
 namespace wolf {
 namespace serialization {
 
+/// @todo demangle typeid.name ?
+template <typename T>
+inline const std::string& type_name(const T&)
+{
+  static const std::string typeid_name = typeid(T).name();
+  return typeid_name;
+}
+
 inline std::string extension(const std::string& file)
 {
   const std::size_t p = file.find_last_of(".");
@@ -93,27 +101,18 @@ void serialize_pack(Ar&&)
   // end of expansion
 }
 
-/// @todo demangle typeid.name ?
-
 template <typename Ar, typename T, typename... Args>
 void serialize_pack(Ar&& archive, T&& object, Args&&... args)
 {
-  archive( cereal::make_nvp(typeid(T).name(), std::forward<T>(object)) );
+  archive( cereal::make_nvp(type_name(object), std::forward<T>(object)) );
   serialize_pack(archive, std::forward<Args>(args)...);
 }
 
-template <typename Ar, typename S, typename T>
-void serialize(S& stream, T&& object)
-{
-  Ar archive(stream);
-  archive( cereal::make_nvp(typeid(T).name(), std::forward<T>(object)) );
-}
-
 template <typename Ar, typename S, typename T, typename... Args>
 void serialize(S& stream, T&& object, Args&&... args)
 {
   Ar archive(stream);
-  archive( cereal::make_nvp(typeid(T).name(), std::forward<T>(object)) );
+  archive( cereal::make_nvp(type_name(object), std::forward<T>(object)) );
 
   serialize_pack(archive, std::forward<Args>(args)...);
 }
-- 
GitLab