SST 15.0
Structural Simulation Toolkit
serialize_string.h
1// Copyright 2009-2025 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-2025, 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_STRING_H
13#define SST_CORE_SERIALIZATION_IMPL_SERIALIZE_STRING_H
14
15#ifndef SST_INCLUDING_SERIALIZE_H
16#warning \
17 "The header file sst/core/serialization/impl/serialize_string.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 <string>
23#include <vector>
24
25namespace SST::Core::Serialization {
26
27class ObjectMapString : public ObjectMap
28{
29protected:
30 std::string* addr_;
31
32public:
33 /**
34 Get the address of the represented object
35
36 @return address of represented object
37 */
38 void* getAddr() override { return addr_; }
39
40 std::string get() override { return *addr_; }
41
42 void set_impl(const std::string& value) override { *addr_ = value; }
43
44 virtual bool isFundamental() override { return true; }
45
46 std::string getType() override
47 {
48 // The demangled name for std::string is ridiculously long, so
49 // just return "std::string"
50 return "std::string";
51 }
52
53 explicit ObjectMapString(std::string* addr) :
54 addr_(addr)
55 {}
56
57 /**
58 Disallow copying and assignment
59 */
60
61 ObjectMapString(const ObjectMapString&) = delete;
62 ObjectMapString& operator=(const ObjectMapString&) = delete;
63
64 ~ObjectMapString() override = default;
65};
66
67template <typename T>
68class serialize_impl<T, std::enable_if_t<std::is_same_v<std::remove_pointer_t<T>, std::string>>>
69{
70 void operator()(T& str, serializer& ser, ser_opt_t options)
71 {
72 // sPtr is a reference to either str if it's a pointer, or to &str if it's not
73 const auto& sPtr = get_ptr(str);
74 const auto mode = ser.mode();
75 if ( mode == serializer::MAP ) {
76 if ( options & SerOption::map_read_only ) {
77 ser.mapper().setNextObjectReadOnly();
78 }
79 ser.mapper().map_primitive(ser.getMapName(), new ObjectMapString(sPtr));
80 }
81 else {
82 if constexpr ( std::is_pointer_v<T> ) {
83 if ( mode == serializer::UNPACK ) str = new std::string();
84 }
85 ser.string(*sPtr);
86 }
87 }
88
89 SST_FRIEND_SERIALIZE();
90};
91
92} // namespace SST::Core::Serialization
93
94#endif // SST_CORE_SERIALIZATION_IMPL_SERIALIZE_STRING_H
Definition serialize_string.h:28
ObjectMapString(const ObjectMapString &)=delete
Disallow copying and assignment.
std::string getType() override
Get the type of the variable represented by the ObjectMap.
Definition serialize_string.h:46
virtual bool isFundamental() override
Check to see if this ObjectMap represents a fundamental or a class treated as a fundamental.
Definition serialize_string.h:44
void * getAddr() override
Get the address of the represented object.
Definition serialize_string.h:38
std::string get() override
Get the value of the variable as a string.
Definition serialize_string.h:40
ObjectMap()=default
Default constructor primarily used for the "top" object in the hierarchy.
Base serialize class.
Definition serialize.h:110
This class is basically a wrapper for objects to declare the order in which their members should be s...
Definition serializer.h:45