40 #include <boost/serialization/nvp.hpp> 41 #include <boost/serialization/shared_ptr.hpp> 48 using boost::serialization::make_nvp;
52 namespace persistence {
63 template <
class Archive,
typename T>
64 static void serializeItem(Archive& ar,
std::string const& name,
67 if (Archive::is_saving::value) {
69 ar & make_nvp(
"value", value);
72 ar & make_nvp(
"value", value);
82 template <
class Archive>
83 static void serializeDateTime(Archive& ar,
std::string const& name,
87 if (Archive::is_saving::value) {
90 i != value.
end(); ++i) {
93 ar & make_nvp(
"value", nsecs);
96 ar & make_nvp(
"value", nsecs);
98 i != nsecs.
end(); ++i) {
101 ps->
set(name, value);
113 template <
class Archive>
121 ar & make_nvp(
"base",
122 boost::serialization::base_object<dafBase::Persistable>(*ps));
126 if (Archive::is_saving::value) {
128 nNames = names.
size();
130 ar & make_nvp(
"nitems", nNames);
134 for (
size_t i = 0; i < nNames; ++i) {
135 if (Archive::is_saving::value) {
139 if (
id ==
typeid(
bool)) type =
'b';
140 else if (
id ==
typeid(
char)) type =
'c';
141 else if (
id ==
typeid(
signed char)) type =
'y';
142 else if (
id ==
typeid(
unsigned char)) type =
'C';
143 else if (
id ==
typeid(
short)) type =
'w';
144 else if (
id ==
typeid(
unsigned short)) type =
'W';
145 else if (
id ==
typeid(
int)) type =
'i';
146 else if (
id ==
typeid(
unsigned int)) type =
'I';
147 else if (
id ==
typeid(
long)) type =
'l';
148 else if (
id ==
typeid(
unsigned long)) type =
'L';
149 else if (
id ==
typeid(
long long)) type =
'x';
150 else if (
id ==
typeid(
unsigned long long)) type =
'X';
151 else if (
id ==
typeid(
float)) type =
'f';
152 else if (
id ==
typeid(
double)) type =
'd';
159 ": Unknown type in PropertySet serialize");
163 ar & make_nvp(
"name", name);
164 ar & make_nvp(
"type", type);
166 case 'b': serializeItem<Archive, bool>(ar, name, ps);
break;
167 case 'c': serializeItem<Archive, char>(ar, name, ps);
break;
168 case 'y': serializeItem<Archive, signed char>(ar, name, ps);
break;
169 case 'C': serializeItem<Archive, unsigned char>(ar, name, ps);
break;
170 case 'w': serializeItem<Archive, short>(ar, name, ps);
break;
171 case 'W': serializeItem<Archive, unsigned short>(ar, name, ps);
break;
172 case 'i': serializeItem<Archive, int>(ar, name, ps);
break;
173 case 'I': serializeItem<Archive, unsigned int>(ar, name, ps);
break;
174 case 'l': serializeItem<Archive, long>(ar, name, ps);
break;
175 case 'L': serializeItem<Archive, unsigned long>(ar, name, ps);
break;
176 case 'x': serializeItem<Archive, long long>(ar, name, ps);
break;
177 case 'X': serializeItem<Archive, unsigned long long>(ar, name, ps);
break;
178 case 'f': serializeItem<Archive, float>(ar, name, ps);
break;
179 case 'd': serializeItem<Archive, double>(ar, name, ps);
break;
180 case 's': serializeItem<Archive, std::string>(ar, name, ps);
break;
181 case 'T': serializeDateTime<Archive>(ar, name, ps);
break;
182 case 'p': serializeItem<Archive, dafBase::Persistable::Ptr>(ar, name, ps);
break;
186 type +
", name = " + name);
std::vector< T > getArray(std::string const &name) const
std::vector< std::string > paramNames(bool topLevelOnly=true) const
void set(std::string const &name, T const &value)
#define LSST_EXCEPT(type,...)
std::shared_ptr< Persistable > Ptr
std::type_info const & typeOf(std::string const &name) const