Ignore:
Timestamp:
30/01/2006 20:04:53 (6 years ago)
Author:
ben
Message:

Merge chris/bb-save-state, resolving conflicts

File:
1 edited

Legend:

Unmodified
Added
Removed
  • box/trunk/bin/bbackupd/BackupClientDirectoryRecord.cpp

    r341 r353  
    2626#include "BackupDaemon.h" 
    2727#include "BackupStoreException.h" 
     28#include "Archive.h" 
    2829 
    2930#include "MemLeakFindOn.h" 
     
    12271228{ 
    12281229} 
     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// -------------------------------------------------------------------------- 
     1240void 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// -------------------------------------------------------------------------- 
     1342void 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.