// Copyright (c) 2012-2014 Konstantin Isakov and ZBackup contributors, see CONTRIBUTORS // Part of ZBackup. Licensed under GNU GPLv2 or later + OpenSSL, see LICENSE #ifndef BACKUP_RESTORER_HH_INCLUDED #define BACKUP_RESTORER_HH_INCLUDED #include #include #include #include #undef __DEPRECATED #include #include "chunk_storage.hh" #include "ex.hh" /// Generic interface to stream data out class DataSink { public: virtual void saveData( void const * data, size_t size )=0; virtual ~DataSink() {} }; /// Generic interface to seekable data output class SeekableSink { public: virtual void saveData( int64_t position, void const * data, size_t size )=0; }; namespace __gnu_cxx { template<> struct hash< Bundle::Id > { size_t operator()( Bundle::Id v ) const { return *((size_t*)(v.blob)); } }; } /// Restores the backup namespace BackupRestorer { DEF_EX( Ex, "Backup restorer exception", std::exception ) DEF_EX( exTooManyBytesToEmit, "A backup record asks to emit too many bytes", Ex ) DEF_EX( exBytesToMap, "Can't restore bytes to ChunkMap", Ex ) typedef std::set< ChunkId > ChunkSet; typedef std::vector< std::pair < ChunkId, int64_t > > ChunkPosition; typedef __gnu_cxx::hash_map< Bundle::Id, ChunkPosition > ChunkMap; /// Restores the given backup void restore( ChunkStorage::Reader &, std::string const & backupData, DataSink *, ChunkSet *, ChunkMap *, SeekableSink * ); /// Restores ChunkMap using seekable output void restoreMap( ChunkStorage::Reader & chunkStorageReader, ChunkMap const * chunkMap, SeekableSink *output ); /// Performs restore iterations on backupData void restoreIterations( ChunkStorage::Reader &, BackupInfo &, std::string &, ChunkSet * ); } #endif