SST  14.1.0
StructuralSimulationToolkit
serialize_multiset.h
1 // Copyright 2009-2024 NTESS. Under the terms
2 // of Contract DE-NA0003525 with NTESS, the U.S.
3 // Government retains certain rights in this software.
4 //
5 // Copyright (c) 2009-2024, NTESS
6 // All rights reserved.
7 //
8 // This file is part of the SST software package. For license
9 // information, see the LICENSE file in the top level directory of the
10 // distribution.
11 
12 #ifndef SST_CORE_SERIALIZATION_IMPL_SERIALIZE_MULTISET_H
13 #define SST_CORE_SERIALIZATION_IMPL_SERIALIZE_MULTISET_H
14 
15 #ifndef SST_INCLUDING_SERIALIZE_H
16 #warning \
17  "The header file sst/core/serialization/impl/serialize_multiset.h should not be directly included as it is not part of the stable public API. The file is included in sst/core/serialization/serialize.h"
18 #endif
19 
20 #include "sst/core/serialization/serializer.h"
21 
22 #include <set>
23 #include <unordered_set>
24 
25 namespace SST {
26 namespace Core {
27 namespace Serialization {
28 
29 template <class T, class C>
30 class serialize<std::multiset<T, C>>
31 {
32  typedef std::multiset<T, C> MultiSet;
33 
34 public:
35  void operator()(MultiSet& v, serializer& ser)
36  {
37  typedef typename std::multiset<T>::iterator iterator;
38  switch ( ser.mode() ) {
39  case serializer::SIZER:
40  {
41  size_t size = v.size();
42  ser.size(size);
43  iterator it, end = v.end();
44  for ( it = v.begin(); it != end; ++it ) {
45  T& t = const_cast<T&>(*it);
46  ser& t;
47  }
48  break;
49  }
50  case serializer::PACK:
51  {
52  size_t size = v.size();
53  ser.pack(size);
54  iterator it, end = v.end();
55  for ( it = v.begin(); it != end; ++it ) {
56  T& t = const_cast<T&>(*it);
57  ser& t;
58  }
59  break;
60  }
61  case serializer::UNPACK:
62  {
63  size_t size;
64  ser.unpack(size);
65  for ( size_t i = 0; i < size; ++i ) {
66  T t;
67  ser& t;
68  v.insert(t);
69  }
70  break;
71  }
72  case serializer::MAP:
73  // The version of function not called in mapping mode
74  break;
75  }
76  }
77 
78  void operator()(MultiSet& UNUSED(v), serializer& UNUSED(ser), const char* UNUSED(name))
79  {
80  // TODO: Add support for mapping mode
81  }
82 };
83 
84 template <class T>
85 class serialize<std::unordered_multiset<T>>
86 {
87  typedef std::unordered_multiset<T> MultiSet;
88 
89 public:
90  void operator()(MultiSet& v, serializer& ser)
91  {
92  typedef typename std::unordered_multiset<T>::iterator iterator;
93  switch ( ser.mode() ) {
94  case serializer::SIZER:
95  {
96  size_t size = v.size();
97  ser.size(size);
98  iterator it, end = v.end();
99  for ( it = v.begin(); it != end; ++it ) {
100  T& t = const_cast<T&>(*it);
101  ser& t;
102  }
103  break;
104  }
105  case serializer::PACK:
106  {
107  size_t size = v.size();
108  ser.pack(size);
109  iterator it, end = v.end();
110  for ( it = v.begin(); it != end; ++it ) {
111  T& t = const_cast<T&>(*it);
112  ser& t;
113  }
114  break;
115  }
116  case serializer::UNPACK:
117  {
118  size_t size;
119  ser.unpack(size);
120  for ( size_t i = 0; i < size; ++i ) {
121  T t = {};
122  ser& t;
123  v.insert(t);
124  }
125  break;
126  }
127  case serializer::MAP:
128  // The version of function not called in mapping mode
129  break;
130  }
131  }
132 
133  void operator()(MultiSet& UNUSED(v), serializer& UNUSED(ser), const char* UNUSED(name))
134  {
135  // TODO: Add support for mapping mode
136  }
137 };
138 
139 } // namespace Serialization
140 } // namespace Core
141 } // namespace SST
142 
143 #endif // SST_CORE_SERIALIZATION_IMPL_SERIALIZE_MULTISET_H
This class is basically a wrapper for objects to declare the order in which their members should be s...
Definition: serializer.h:43
Definition: action.cc:18
Serialization "gateway" object.
Definition: serialize.h:133