From ed69545cf05f6afae34eb540783c1b7e3866d51d Mon Sep 17 00:00:00 2001 From: JustinAJ Date: Mon, 18 May 2015 02:47:47 -0400 Subject: [PATCH] Added missing documentation (woops) --- Jupiter/Database.h | 63 ++++++++++++++++++++++++++++++++++++++++++++ Release/Jupiter.lib | Bin 263014 -> 263014 bytes 2 files changed, 63 insertions(+) diff --git a/Jupiter/Database.h b/Jupiter/Database.h index 6b7e24d..e2598af 100644 --- a/Jupiter/Database.h +++ b/Jupiter/Database.h @@ -36,29 +36,92 @@ namespace Jupiter class JUPITER_API Database { public: + /** + * @brief Processes a chunk of data in a database. + * + * @param buffer Buffer to process + * @param file File being processed + * @param pos position that the buffer starts at in the file + */ virtual void process_data(Jupiter::DataBuffer &buffer, FILE *file, fpos_t pos) = 0; + + /** + * @brief Processes the header for a database. + * + * @param file File being processed + */ virtual void process_header(FILE *file); + + /** + * @brief Generates a header for a database. + * + * @param file File being created + */ virtual void create_header(FILE *file); + /** + * @brief Processes a database file. This function calls process_data(). + * + * @param file File being processed + * @return True on success, false otherwise + */ bool process_file(Jupiter::ReadableString &file); bool process_file(Jupiter::CStringType &file); bool process_file(const char *file); bool process_file(FILE *file); + + /** + * @brief Called when process_file() is successfully completed. + * + * @param file File being processed + */ virtual void process_file_finish(FILE *file); + /** + * @brief Appends a DataBuffer to the end of the Database. + * + * @param data DataBuffer to append + */ bool append(Jupiter::DataBuffer &data); + /** + * @brief Appends a DataBuffer to the end of a Database file. + * + * @param file File to append the DataBuffer to + * @param data DataBuffer to append + * @return True on success, false otherwise. + */ static bool append(Jupiter::ReadableString &file, Jupiter::DataBuffer &data); static bool append(Jupiter::CStringType &file, Jupiter::DataBuffer &data); static bool append(const char *file, Jupiter::DataBuffer &data); static bool append(FILE *file, Jupiter::DataBuffer &data); + /** + * @brief Generates a new database, consisting of only a header + * Note: This writes the data *in* the DataBuffer to the file, *not* the DataBuffer itself. + * + * @param flie Name of the Database to generate + * @param header DataBuffer containing the header to write to the file + */ static bool create_database(Jupiter::ReadableString &file, Jupiter::DataBuffer *header = nullptr); static bool create_database(Jupiter::CStringType &file, Jupiter::DataBuffer *header = nullptr); static bool create_database(const char *file, Jupiter::DataBuffer *header = nullptr); + /** + * @brief When True, process_file() will automatically call create_header() if so such file exists. + * Default: true + * + * @return True if databases should automatically be generated, false otherwise. + */ bool is_auto_create(); + + /** + * @brief Sets if databases should be generated automatically in process_file(). + * + * @param auto_create True if databases should be automatically generated, false otherwise. + */ void set_auto_create(bool auto_create); + private: bool process_file(); static bool create_database(FILE *file, Jupiter::DataBuffer *header); diff --git a/Release/Jupiter.lib b/Release/Jupiter.lib index d455bb3d3856e7616cc50e41d7e1842dd7316667..0d9c344e281fb455aa0dd70960c559c313e61566 100644 GIT binary patch delta 17762 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 delta 17762 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

Q<*cak&Ldbq&n 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