diff options
Diffstat (limited to 'plugins/Dbx_kyoto/src/kyotocabinet/kcfile.h')
-rw-r--r-- | plugins/Dbx_kyoto/src/kyotocabinet/kcfile.h | 388 |
1 files changed, 388 insertions, 0 deletions
diff --git a/plugins/Dbx_kyoto/src/kyotocabinet/kcfile.h b/plugins/Dbx_kyoto/src/kyotocabinet/kcfile.h new file mode 100644 index 0000000000..c3436cb14c --- /dev/null +++ b/plugins/Dbx_kyoto/src/kyotocabinet/kcfile.h @@ -0,0 +1,388 @@ +/************************************************************************************************* + * Filesystem abstraction + * Copyright (C) 2009-2012 FAL Labs + * This file is part of Kyoto Cabinet. + * 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 + * 3 of the License, or 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, see <http://www.gnu.org/licenses/>. + *************************************************************************************************/ + + +#ifndef _KCFILE_H // duplication check +#define _KCFILE_H + +#include <kccommon.h> +#include <kcutil.h> +#include <kcthread.h> + +namespace kyotocabinet { // common namespace + + +/** + * Filesystem abstraction. + */ +class File { + public: + struct Status; + public: + /** Path delimiter character. */ + static const char PATHCHR; + /** Path delimiter string. */ + static const char* const PATHSTR; + /** Extension delimiter character. */ + static const char EXTCHR; + /** Extension delimiter string. */ + static const char* const EXTSTR; + /** Current directory string. */ + static const char* const CDIRSTR; + /** Parent directory string. */ + static const char* const PDIRSTR; + /** + * Status information. + */ + struct Status { + bool isdir; ///< whether directory or not + int64_t size; ///< file size + int64_t mtime; ///< last modified time + }; + /** + * Open modes. + */ + enum OpenMode { + OREADER = 1 << 0, ///< open as a reader + OWRITER = 1 << 1, ///< open as a writer + OCREATE = 1 << 2, ///< writer creating + OTRUNCATE = 1 << 3, ///< writer truncating + ONOLOCK = 1 << 4, ///< open without locking + OTRYLOCK = 1 << 5 ///< lock without blocking + }; + /** + * Default constructor. + */ + explicit File(); + /** + * Destructor. + * @note If the file is not closed, it is closed implicitly. + */ + ~File(); + /** + * Get the last happened error information. + * @return the last happened error information. + */ + const char* error() const; + /** + * Open a file. + * @param path the path of a file. + * @param mode the connection mode. File::OWRITER as a writer, File::OREADER as a reader. + * The following may be added to the writer mode by bitwise-or: File::OCREATE, which means it + * creates a new file if the file does not exist, File::OTRUNCATE, which means it creates a + * new file regardless if the file exists. The following may be added to both of the reader + * mode and the writer mode by bitwise-or: File::ONOLOCK, which means it opens the file + * without file locking, File::TRYLOCK, which means locking is performed without blocking. + * @param msiz the size of the internal memory-mapped region. + * @return true on success, or false on failure. + */ + bool open(const std::string& path, uint32_t mode = OWRITER | OCREATE, int64_t msiz = 0); + /** + * Close the file. + * @return true on success, or false on failure. + */ + bool close(); + /** + * Write data. + * @param off the offset of the destination. + * @param buf the pointer to the data region. + * @param size the size of the data region. + * @return true on success, or false on failure. + */ + bool write(int64_t off, const void* buf, size_t size); + /** + * Write data. + * @note Equal to the original File::write method except that the sigunature is different. + */ + bool write(int64_t off, const std::string& str) { + _assert_(off >= 0); + return write(off, str.c_str(), str.size()); + } + /** + * Write data with assuring the region does not spill from the file size. + * @param off the offset of the destination. + * @param buf the pointer to the data region. + * @param size the size of the data region. + * @return true on success, or false on failure. + */ + bool write_fast(int64_t off, const void* buf, size_t size); + /** + * Write data with assuring the region does not spill from the file size. + * @note Equal to the original File::write_fast method except that the sigunature is different. + */ + bool write_fast(int64_t off, const std::string& str) { + _assert_(off >= 0); + return write_fast(off, str.c_str(), str.size()); + } + /** + * Write data at the end of the file. + * @param buf the pointer to the data region. + * @param size the size of the data region. + * @return true on success, or false on failure. + */ + bool append(const void* buf, size_t size); + /** + * Write data at the end of the file. + * @note Equal to the original File::append method except that the sigunature is different. + */ + bool append(const std::string& str) { + _assert_(true); + return append(str.c_str(), str.size()); + } + /** + * Read data. + * @param off the offset of the source. + * @param buf the pointer to the destination region. + * @param size the size of the data to be read. + * @return true on success, or false on failure. + */ + bool read(int64_t off, void* buf, size_t size); + /** + * Read data. + * @note Equal to the original File::read method except that the sigunature is different. + */ + bool read(int64_t off, std::string* buf, size_t size) { + _assert_(off >= 0 && buf); + char* tbuf = new char[size]; + if (!read(off, tbuf, size)) { + delete[] tbuf; + return false; + } + buf->append(std::string(tbuf, size)); + delete[] tbuf; + return true; + } + /** + * Read data with assuring the region does not spill from the file size. + * @param off the offset of the source. + * @param buf the pointer to the destination region. + * @param size the size of the data to be read. + * @return true on success, or false on failure. + */ + bool read_fast(int64_t off, void* buf, size_t size); + /** + * Read data. + * @note Equal to the original File::read method except that the sigunature is different. + */ + bool read_fast(int64_t off, std::string* buf, size_t size) { + _assert_(off >= 0 && buf); + char* tbuf = new char[size]; + if (!read_fast(off, tbuf, size)) { + delete[] tbuf; + return false; + } + buf->append(std::string(tbuf, size)); + delete[] tbuf; + return true; + } + /** + * Truncate the file. + * @param size the new size of the file. + * @return true on success, or false on failure. + */ + bool truncate(int64_t size); + /** + * Synchronize updated contents with the file and the device. + * @param hard true for physical synchronization with the device, or false for logical + * synchronization with the file system. + * @return true on success, or false on failure. + */ + bool synchronize(bool hard); + /** + * Refresh the internal state for update by others. + * @return true on success, or false on failure. + */ + bool refresh(); + /** + * Begin transaction. + * @param hard true for physical synchronization with the device, or false for logical + * synchronization with the file system. + * @param off the beginning offset of the guarded region + * @return true on success, or false on failure. + */ + bool begin_transaction(bool hard, int64_t off); + /** + * End transaction. + * @param commit true to commit the transaction, or false to abort the transaction. + * @return true on success, or false on failure. + */ + bool end_transaction(bool commit); + /** + * Write a WAL message of transaction explicitly. + * @param off the offset of the source. + * @param size the size of the data to be read. + * @return true on success, or false on failure. + */ + bool write_transaction(int64_t off, size_t size); + /** + * Get the size of the file. + * @return the size of the file, or 0 on failure. + */ + int64_t size() const; + /** + * Get the path of the file. + * @return the path of the file in bytes, or an empty string on failure. + */ + std::string path() const; + /** + * Check whether the file was recovered or not. + * @return true if recovered, or false if not. + */ + bool recovered() const; + /** + * Read the whole data from a file. + * @param path the path of a file. + * @param sp the pointer to the variable into which the size of the region of the return value + * is assigned. + * @param limit the limit length to read. If it is nagative, no limit is specified. + * @return the pointer to the region of the read data, or NULL on failure. + * @note Because an additional zero code is appended at the end of the region of the return + * value, the return value can be treated as a C-style string. Because the region of the + * return value is allocated with the the new[] operator, it should be released with the + * delete[] operator when it is no longer in use. + */ + static char* read_file(const std::string& path, int64_t* sp, int64_t limit = -1); + /** + * Write the whole data into a file. + * @param path the path of a file. + * @param buf the data buffer to write. + * @param size the size of the data buffer. + * @return true on success, or false on failure. + * @note The existing file corresponding to the path is overwritten. If no file corresponds + * to the path, a new file is created. + */ + static bool write_file(const std::string& path, const char* buf, int64_t size); + /** + * Get the status information of a file. + * @param path the path of a file. + * @param buf a structure of status information. If it is NULL, it is omitted. + * @return true on success, or false on failure. + */ + static bool status(const std::string& path, Status* buf = NULL); + /** + * Get the absolute path of a file. + * @param path the path of a file. + * @return the absolute path of the file, or an empty string on failure. + */ + static std::string absolute_path(const std::string& path); + /** + * Remove a file. + * @param path the path of a file. + * @return true on success, or false on failure. + */ + static bool remove(const std::string& path); + /** + * Change the name or location of a file. + * @param opath the old path of a file. + * @param npath the new path of a file. + * @return true on success, or false on failure. + */ + static bool rename(const std::string& opath, const std::string& npath); + /** + * Read a directory. + * @param path the path of a directory. + * @param strvec a string list to contain the result. + * @return true on success, or false on failure. + */ + static bool read_directory(const std::string& path, std::vector<std::string>* strvec); + /** + * Make a directory. + * @param path the path of a directory. + * @return true on success, or false on failure. + */ + static bool make_directory(const std::string& path); + /** + * Remove a directory. + * @param path the path of a directory. + * @return true on success, or false on failure. + */ + static bool remove_directory(const std::string& path); + /** + * Remove a file or a directory recursively. + * @param path the path of a file or a directory. + * @return true on success, or false on failure. + */ + static bool remove_recursively(const std::string& path); + /** + * Get the path of the current working directory. + * @return the path of the current working directory, or an empty string on failure. + */ + static std::string get_current_directory(); + /** + * Set the current working directory. + * @param path the path of a directory. + * @return true on success, or false on failure. + */ + static bool set_current_directory(const std::string& path); + /** + * Synchronize the whole of the file system with the device. + * @return true on success, or false on failure. + */ + static bool synchronize_whole(); + private: + /** Dummy constructor to forbid the use. */ + File(const File&); + /** Dummy Operator to forbid the use. */ + File& operator =(const File&); + /** Opaque pointer. */ + void* opq_; +}; + + +/** + * Directory stream abstraction. + */ +class DirStream { + public: + /** + * Default constructor. + */ + explicit DirStream(); + /** + * Destructor. + * @note If the file is not closed, it is closed implicitly. + */ + ~DirStream(); + /** + * Open a directory. + * @param path the path of a directory. + * @return true on success, or false on failure. + */ + bool open(const std::string& path); + /** + * Close the file. + * @return true on success, or false on failure. + */ + bool close(); + /** + * Read the next file in the directory. + * @param path a string to store the file path. + * @return true on success, or false on failure. + */ + bool read(std::string* path); + private: + /** Dummy constructor to forbid the use. */ + DirStream(const DirStream&); + /** Dummy Operator to forbid the use. */ + DirStream& operator =(const DirStream&); + /** Opaque pointer. */ + void* opq_; +}; + + +} // common namespace + +#endif // duplication check + +// END OF FILE |