@@ -79,7 +79,23 @@ namespace poly_scribe::detail
79
79
// /
80
80
// / \brief Maping from type string to a input caster.
81
81
// /
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
+ }
83
99
};
84
100
85
101
// /
@@ -110,7 +126,23 @@ namespace poly_scribe::detail
110
126
// /
111
127
// / \brief Maping from std::type_index to a output caster.
112
128
// /
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
+ }
114
146
};
115
147
116
148
// /
@@ -127,7 +159,7 @@ namespace poly_scribe::detail
127
159
// /
128
160
InputBindingCreator ( )
129
161
{
130
- auto &map = ::cereal::detail::StaticObject<InputMap>::getInstance ( ).map ;
162
+ auto &map = ::cereal::detail::StaticObject<InputMap>::getInstance ( ).map <Archive>( ) ;
131
163
auto lock = ::cereal::detail::StaticObject<InputMap>::lock ( );
132
164
auto key = std::string ( BindingName<T>::name ( ) );
133
165
auto lower_bound = map.lower_bound ( key );
@@ -184,7 +216,8 @@ namespace poly_scribe::detail
184
216
{
185
217
OutputBindingCreator ( )
186
218
{
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 ( );
188
221
auto key = std::type_index ( typeid ( T ) );
189
222
auto lower_bound = map.lower_bound ( key );
190
223
@@ -312,7 +345,7 @@ namespace poly_scribe::detail
312
345
{
313
346
t_archive ( cereal::make_nvp ( " type" , t_name ) );
314
347
315
- auto const &binding_map = cereal::detail::StaticObject<InputMap>::getInstance ( ).map ;
348
+ auto const &binding_map = cereal::detail::StaticObject<InputMap>::getInstance ( ).map <Archive>() ;
316
349
317
350
auto binding = binding_map.find ( t_name );
318
351
if ( binding == binding_map.end ( ) )
0 commit comments