@@ -79,7 +79,23 @@ namespace poly_scribe::detail
7979 // /
8080 // / \brief Maping from type string to a input caster.
8181 // /
82- std::map<std::string, Casters> map;
82+ using Caster_map = std::map<std::string, Casters>;
83+
84+ // /
85+ // / \brief Maping from archive type id to a input caster map.
86+ // /
87+ using Archives_map = std::map<std::type_index, Caster_map>;
88+
89+ Archives_map archives_map;
90+
91+ // /
92+ // / \brief Obtain serializers map for given archive
93+ // /
94+ template <typename Archive>
95+ Caster_map &map ( )
96+ {
97+ return archives_map[typeid ( Archive )];
98+ }
8399 };
84100
85101 // /
@@ -110,7 +126,23 @@ namespace poly_scribe::detail
110126 // /
111127 // / \brief Maping from std::type_index to a output caster.
112128 // /
113- std::map<std::type_index, Casters> map;
129+ using Caster_map = std::map<std::type_index, Casters>;
130+
131+ // /
132+ // / \brief Maping from archive type id to a output caster map.
133+ // /
134+ using Archives_map = std::map<std::type_index, Caster_map>;
135+
136+ Archives_map archives_map;
137+
138+ // /
139+ // / \brief Obtain serializers map for given archive
140+ // /
141+ template <typename Archive>
142+ Caster_map &map ( )
143+ {
144+ return archives_map[typeid ( Archive )];
145+ }
114146 };
115147
116148 // /
@@ -127,7 +159,7 @@ namespace poly_scribe::detail
127159 // /
128160 InputBindingCreator ( )
129161 {
130- auto &map = ::cereal::detail::StaticObject<InputMap>::getInstance ( ).map ;
162+ auto &map = ::cereal::detail::StaticObject<InputMap>::getInstance ( ).map <Archive>( ) ;
131163 auto lock = ::cereal::detail::StaticObject<InputMap>::lock ( );
132164 auto key = std::string ( BindingName<T>::name ( ) );
133165 auto lower_bound = map.lower_bound ( key );
@@ -184,7 +216,8 @@ namespace poly_scribe::detail
184216 {
185217 OutputBindingCreator ( )
186218 {
187- auto &map = ::cereal::detail::StaticObject<OutputMap>::getInstance ( ).map ;
219+ auto &map = ::cereal::detail::StaticObject<OutputMap>::getInstance ( ).map <Archive>( );
220+ auto lock = ::cereal::detail::StaticObject<OutputMap>::lock ( );
188221 auto key = std::type_index ( typeid ( T ) );
189222 auto lower_bound = map.lower_bound ( key );
190223
@@ -312,7 +345,7 @@ namespace poly_scribe::detail
312345 {
313346 t_archive ( cereal::make_nvp ( " type" , t_name ) );
314347
315- auto const &binding_map = cereal::detail::StaticObject<InputMap>::getInstance ( ).map ;
348+ auto const &binding_map = cereal::detail::StaticObject<InputMap>::getInstance ( ).map <Archive>() ;
316349
317350 auto binding = binding_map.find ( t_name );
318351 if ( binding == binding_map.end ( ) )
0 commit comments