serialize.hh (11067:5379f099e488) | serialize.hh (11068:9c39ca645966) |
---|---|
1/* 2 * Copyright (c) 2015 ARM Limited 3 * All rights reserved 4 * 5 * The license below extends only to copyright in the software and shall 6 * not be construed as granting a license to any other intellectual 7 * property including but not limited to intellectual property relating 8 * to a hardware implementation of the functionality of the software --- 122 unchanged lines hidden (view full) --- 131 132template <class T> 133void arrayParamIn(CheckpointIn &cp, const std::string &name, 134 std::list<T> ¶m); 135 136void 137objParamIn(CheckpointIn &cp, const std::string &name, SimObject * ¶m); 138 | 1/* 2 * Copyright (c) 2015 ARM Limited 3 * All rights reserved 4 * 5 * The license below extends only to copyright in the software and shall 6 * not be construed as granting a license to any other intellectual 7 * property including but not limited to intellectual property relating 8 * to a hardware implementation of the functionality of the software --- 122 unchanged lines hidden (view full) --- 131 132template <class T> 133void arrayParamIn(CheckpointIn &cp, const std::string &name, 134 std::list<T> ¶m); 135 136void 137objParamIn(CheckpointIn &cp, const std::string &name, SimObject * ¶m); 138 |
139template <typename T> 140void fromInt(T &t, int i) 141{ 142 t = (T)i; 143} 144 145template <typename T> 146void fromSimObject(T &t, SimObject *s) 147{ 148 t = dynamic_cast<T>(s); 149} 150 | |
151// 152// These macros are streamlined to use in serialize/unserialize 153// functions. It's assumed that serialize() has a parameter 'os' for 154// the ostream, and unserialize() has parameters 'cp' and 'section'. 155#define SERIALIZE_SCALAR(scalar) paramOut(cp, #scalar, scalar) 156 157#define UNSERIALIZE_SCALAR(scalar) paramIn(cp, #scalar, scalar) 158#define UNSERIALIZE_OPT_SCALAR(scalar) optParamIn(cp, #scalar, scalar) 159 160// ENUMs are like SCALARs, but we cast them to ints on the way out 161#define SERIALIZE_ENUM(scalar) paramOut(cp, #scalar, (int)scalar) 162 | 139// 140// These macros are streamlined to use in serialize/unserialize 141// functions. It's assumed that serialize() has a parameter 'os' for 142// the ostream, and unserialize() has parameters 'cp' and 'section'. 143#define SERIALIZE_SCALAR(scalar) paramOut(cp, #scalar, scalar) 144 145#define UNSERIALIZE_SCALAR(scalar) paramIn(cp, #scalar, scalar) 146#define UNSERIALIZE_OPT_SCALAR(scalar) optParamIn(cp, #scalar, scalar) 147 148// ENUMs are like SCALARs, but we cast them to ints on the way out 149#define SERIALIZE_ENUM(scalar) paramOut(cp, #scalar, (int)scalar) 150 |
163#define UNSERIALIZE_ENUM(scalar) \ 164 do { \ 165 int tmp; \ 166 paramIn(cp, #scalar, tmp); \ 167 fromInt(scalar, tmp); \ 168 } while (0) | 151#define UNSERIALIZE_ENUM(scalar) \ 152 do { \ 153 int tmp; \ 154 paramIn(cp, #scalar, tmp); \ 155 scalar = static_cast<decltype(scalar)>(tmp); \ 156 } while (0) |
169 170#define SERIALIZE_ARRAY(member, size) \ 171 arrayParamOut(cp, #member, member, size) 172 173#define UNSERIALIZE_ARRAY(member, size) \ 174 arrayParamIn(cp, #member, member, size) 175 176#define SERIALIZE_CONTAINER(member) \ --- 11 unchanged lines hidden (view full) --- 188 } while(0) 189 190#define SERIALIZE_OBJ(obj) obj.serializeSection(cp, #obj) 191#define UNSERIALIZE_OBJ(obj) obj.unserializeSection(cp, #obj) 192 193#define SERIALIZE_OBJPTR(objptr) paramOut(cp, #objptr, (objptr)->name()) 194 195#define UNSERIALIZE_OBJPTR(objptr) \ | 157 158#define SERIALIZE_ARRAY(member, size) \ 159 arrayParamOut(cp, #member, member, size) 160 161#define UNSERIALIZE_ARRAY(member, size) \ 162 arrayParamIn(cp, #member, member, size) 163 164#define SERIALIZE_CONTAINER(member) \ --- 11 unchanged lines hidden (view full) --- 176 } while(0) 177 178#define SERIALIZE_OBJ(obj) obj.serializeSection(cp, #obj) 179#define UNSERIALIZE_OBJ(obj) obj.unserializeSection(cp, #obj) 180 181#define SERIALIZE_OBJPTR(objptr) paramOut(cp, #objptr, (objptr)->name()) 182 183#define UNSERIALIZE_OBJPTR(objptr) \ |
196 do { \ 197 SimObject *sptr; \ 198 objParamIn(cp, #objptr, sptr); \ 199 fromSimObject(objptr, sptr); \ 200 } while (0) | 184 do { \ 185 SimObject *sptr; \ 186 objParamIn(cp, #objptr, sptr); \ 187 objptr = dynamic_cast<decltype(objptr)>(sptr); \ 188 } while (0) |
201 202/** 203 * Basic support for object serialization. 204 * 205 * Objects that support serialization should derive from this 206 * class. Such objects can largely be divided into two categories: 1) 207 * True SimObjects (deriving from SimObject), and 2) child objects 208 * (non-SimObjects). --- 295 unchanged lines hidden --- | 189 190/** 191 * Basic support for object serialization. 192 * 193 * Objects that support serialization should derive from this 194 * class. Such objects can largely be divided into two categories: 1) 195 * True SimObjects (deriving from SimObject), and 2) child objects 196 * (non-SimObjects). --- 295 unchanged lines hidden --- |