Changeset 353 for box/trunk/bin/bbackupd/BackupClientDirectoryRecord.cpp
- Timestamp:
- 30/01/2006 20:04:53 (6 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
box/trunk/bin/bbackupd/BackupClientDirectoryRecord.cpp
r341 r353 26 26 #include "BackupDaemon.h" 27 27 #include "BackupStoreException.h" 28 #include "Archive.h" 28 29 29 30 #include "MemLeakFindOn.h" … … 1227 1228 { 1228 1229 } 1230 1231 // -------------------------------------------------------------------------- 1232 // 1233 // Function 1234 // Name: BackupClientDirectoryRecord::Deserialize(Archive & rArchive) 1235 // Purpose: Deserializes this object instance from a stream of bytes, using an Archive abstraction. 1236 // 1237 // Created: 2005/04/11 1238 // 1239 // -------------------------------------------------------------------------- 1240 void BackupClientDirectoryRecord::Deserialize(Archive & rArchive) 1241 { 1242 // Make deletion recursive 1243 DeleteSubDirectories(); 1244 1245 // Delete maps 1246 if(mpPendingEntries != 0) 1247 { 1248 delete mpPendingEntries; 1249 mpPendingEntries = 0; 1250 } 1251 1252 // 1253 // 1254 // 1255 rArchive.Read(mObjectID); 1256 rArchive.Read(mSubDirName); 1257 rArchive.Read(mInitialSyncDone); 1258 rArchive.Read(mSyncDone); 1259 1260 // 1261 // 1262 // 1263 int64_t iCount = 0; 1264 rArchive.Read(iCount); 1265 1266 if (iCount != sizeof(mStateChecksum)/sizeof(mStateChecksum[0])) 1267 { 1268 // we have some kind of internal system representation change: throw for now 1269 THROW_EXCEPTION(CommonException, Internal) 1270 } 1271 1272 for (int v = 0; v < iCount; v++) 1273 { 1274 // Load each checksum entry 1275 rArchive.Read(mStateChecksum[v]); 1276 } 1277 1278 // 1279 // 1280 // 1281 iCount = 0; 1282 rArchive.Read(iCount); 1283 1284 if (iCount > 0) 1285 { 1286 // load each pending entry 1287 mpPendingEntries = new std::map<std::string, box_time_t>; 1288 if (!mpPendingEntries) 1289 { 1290 throw std::bad_alloc(); 1291 } 1292 1293 for (int v = 0; v < iCount; v++) 1294 { 1295 std::string strItem; 1296 box_time_t btItem; 1297 1298 rArchive.Read(strItem); 1299 rArchive.Read(btItem); 1300 (*mpPendingEntries)[strItem] = btItem; 1301 } 1302 } 1303 1304 // 1305 // 1306 // 1307 iCount = 0; 1308 rArchive.Read(iCount); 1309 1310 if (iCount > 0) 1311 { 1312 for (int v = 0; v < iCount; v++) 1313 { 1314 std::string strItem; 1315 rArchive.Read(strItem); 1316 1317 BackupClientDirectoryRecord* pSubDirRecord = 1318 new BackupClientDirectoryRecord(0, ""); 1319 // will be deserialized anyway, give it id 0 for now 1320 1321 if (!pSubDirRecord) 1322 { 1323 throw std::bad_alloc(); 1324 } 1325 1326 /***** RECURSE *****/ 1327 pSubDirRecord->Deserialize(rArchive); 1328 mSubDirectories[strItem] = pSubDirRecord; 1329 } 1330 } 1331 } 1332 1333 // -------------------------------------------------------------------------- 1334 // 1335 // Function 1336 // Name: BackupClientDirectoryRecord::Serialize(Archive & rArchive) 1337 // Purpose: Serializes this object instance into a stream of bytes, using an Archive abstraction. 1338 // 1339 // Created: 2005/04/11 1340 // 1341 // -------------------------------------------------------------------------- 1342 void BackupClientDirectoryRecord::Serialize(Archive & rArchive) const 1343 { 1344 // 1345 // 1346 // 1347 rArchive.Write(mObjectID); 1348 rArchive.Write(mSubDirName); 1349 rArchive.Write(mInitialSyncDone); 1350 rArchive.Write(mSyncDone); 1351 1352 // 1353 // 1354 // 1355 int64_t iCount = 0; 1356 1357 // when reading back the archive, we will 1358 // need to know how many items there are. 1359 iCount = sizeof(mStateChecksum) / sizeof(mStateChecksum[0]); 1360 rArchive.Write(iCount); 1361 1362 for (int v = 0; v < iCount; v++) 1363 { 1364 rArchive.Write(mStateChecksum[v]); 1365 } 1366 1367 // 1368 // 1369 // 1370 if (!mpPendingEntries) 1371 { 1372 iCount = 0; 1373 rArchive.Write(iCount); 1374 } 1375 else 1376 { 1377 iCount = mpPendingEntries->size(); 1378 rArchive.Write(iCount); 1379 1380 for (std::map<std::string, box_time_t>::const_iterator 1381 i = mpPendingEntries->begin(); 1382 i != mpPendingEntries->end(); i++) 1383 { 1384 rArchive.Write(i->first); 1385 rArchive.Write(i->second); 1386 } 1387 } 1388 // 1389 // 1390 // 1391 iCount = mSubDirectories.size(); 1392 rArchive.Write(iCount); 1393 1394 for (std::map<std::string, BackupClientDirectoryRecord*>::const_iterator 1395 i = mSubDirectories.begin(); 1396 i != mSubDirectories.end(); i++) 1397 { 1398 const BackupClientDirectoryRecord* pSubItem = i->second; 1399 ASSERT(pSubItem); 1400 1401 rArchive.Write(i->first); 1402 pSubItem->Serialize(rArchive); 1403 } 1404 }
Note: See TracChangeset
for help on using the changeset viewer.
