/* Minetest-c55 Copyright (C) 2010 celeron55, Perttu Ahola Copyright (C) 2012 Jonathan Neuschäfer This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef FILECACHE_HEADER #define FILECACHE_HEADER #include #include class FileCache { public: /* 'dir' is the file cache directory to use. */ FileCache(std::string dir): m_dir(dir) { } /* Searches the cache for a file with a given name. If the file is found, lookup copies it into 'os' and returns true. Otherwise false is returned. */ bool loadByName(const std::string &name, std::ostream &os); /* Stores a file in the cache based on its name. Returns true on success, false otherwise. */ bool updateByName(const std::string &name, const std::string &data); /* Loads a file based on a check sum, which may be any kind of rather unique byte sequence. Returns true, if the file could be written into os, false otherwise. */ bool loadByChecksum(const std::string &checksum, std::ostream &os); /* Stores a file in the cache based on its checksum. Returns true on success, false otherwise. */ bool updateByChecksum(const std::string &checksum, const std::string &data); private: std::string m_dir; bool loadByPath(const std::string &path, std::ostream &os); bool updateByPath(const std::string &path, const std::string &data); std::string getPathFromChecksum(const std::string &checksum); }; #endif