Files
@ r27835:eabfaa878ced
Branch filter:
Location: cpp/openttd-patchpack/source/src/ini_type.h - annotation
r27835:eabfaa878ced
3.8 KiB
text/x-c
Add: calendar date for Survey results
This means no heuristics is possible on around which date people
play the game.
This means no heuristics is possible on around which date people
play the game.
r12768:980ae0491352 r12768:980ae0491352 r12768:980ae0491352 r12768:980ae0491352 r12768:980ae0491352 r12768:980ae0491352 r12768:980ae0491352 r9996:3fee1f809309 r9996:3fee1f809309 r9996:3fee1f809309 r9996:3fee1f809309 r9996:3fee1f809309 r18005:27851770b57d r18005:27851770b57d r9996:3fee1f809309 r9996:3fee1f809309 r17410:9c573c7b8792 r17410:9c573c7b8792 r17410:9c573c7b8792 r9996:3fee1f809309 r9996:3fee1f809309 r9996:3fee1f809309 r9996:3fee1f809309 r24216:bee2183ce93e r24216:bee2183ce93e r24432:c13edb82020b r24216:bee2183ce93e r9996:3fee1f809309 r24216:bee2183ce93e r9996:3fee1f809309 r10005:7dd15e6609a8 r25469:0f19702a0708 r9996:3fee1f809309 r9996:3fee1f809309 r9996:3fee1f809309 r9996:3fee1f809309 r9996:3fee1f809309 r9996:3fee1f809309 r9996:3fee1f809309 r9996:3fee1f809309 r24216:bee2183ce93e r24216:bee2183ce93e r9996:3fee1f809309 r24216:bee2183ce93e r9996:3fee1f809309 r9996:3fee1f809309 r27543:f8b178a86c14 r27526:da755c10127c r25749:4905ec9578cb r10752:370d8332151c r9996:3fee1f809309 r9996:3fee1f809309 r17407:e0911b00f473 r17407:e0911b00f473 r13086:71e929261037 r13086:71e929261037 r24216:bee2183ce93e r23607:36c15679007d r23607:36c15679007d r9996:3fee1f809309 r23607:36c15679007d r17407:e0911b00f473 r9996:3fee1f809309 r24216:bee2183ce93e r9996:3fee1f809309 r9996:3fee1f809309 r24522:0c6c6ad8ded0 r17408:1b41bc18943a r17408:1b41bc18943a r17408:1b41bc18943a r17408:1b41bc18943a r18005:27851770b57d r23023:7b8669afd1db r23607:36c15679007d r17408:1b41bc18943a r24528:a7298f737f00 r17408:1b41bc18943a r17408:1b41bc18943a r17408:1b41bc18943a r17408:1b41bc18943a r17408:1b41bc18943a r17408:1b41bc18943a r17408:1b41bc18943a r17408:1b41bc18943a r17407:e0911b00f473 r17407:e0911b00f473 r17407:e0911b00f473 r17407:e0911b00f473 r23607:36c15679007d r17407:e0911b00f473 r24522:0c6c6ad8ded0 r17408:1b41bc18943a r24528:a7298f737f00 r17408:1b41bc18943a r9996:3fee1f809309 r9996:3fee1f809309 r9999:dccc36203f8a | /*
* This file is part of OpenTTD.
* OpenTTD 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, version 2.
* OpenTTD 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 OpenTTD. If not, see <http://www.gnu.org/licenses/>.
*/
/** @file ini_type.h Types related to reading/writing '*.ini' files. */
#ifndef INI_TYPE_H
#define INI_TYPE_H
#include "fileio_type.h"
/** Types of groups */
enum IniGroupType {
IGT_VARIABLES = 0, ///< Values of the form "landscape = hilly".
IGT_LIST = 1, ///< A list of values, separated by \n and terminated by the next group block.
IGT_SEQUENCE = 2, ///< A list of uninterpreted lines, terminated by the next group block.
};
/** A single "line" in an ini file. */
struct IniItem {
IniItem *next; ///< The next item in this group
std::string name; ///< The name of this item
std::optional<std::string> value; ///< The value of this item
std::string comment; ///< The comment associated with this item
IniItem(struct IniGroup *parent, const std::string &name);
~IniItem();
void SetValue(const std::string_view value);
};
/** A group within an ini file. */
struct IniGroup {
IniGroup *next; ///< the next group within this file
IniGroupType type; ///< type of group
IniItem *item; ///< the first item in the group
IniItem **last_item; ///< the last item in the group
std::string name; ///< name of group
std::string comment; ///< comment for group
IniGroup(struct IniLoadFile *parent, const std::string &name);
~IniGroup();
IniItem *GetItem(const std::string &name) const;
IniItem &GetOrCreateItem(const std::string &name);
void RemoveItem(const std::string &name);
void Clear();
};
/** Ini file that only supports loading. */
struct IniLoadFile {
IniGroup *group; ///< the first group in the ini
IniGroup **last_group; ///< the last group in the ini
std::string comment; ///< last comment in file
const char * const *list_group_names; ///< nullptr terminated list with group names that are lists
const char * const *seq_group_names; ///< nullptr terminated list with group names that are sequences.
IniLoadFile(const char * const *list_group_names = nullptr, const char * const *seq_group_names = nullptr);
virtual ~IniLoadFile();
IniGroup *GetGroup(const std::string &name, bool create_new = true);
void RemoveGroup(const char *name);
void LoadFromDisk(const std::string &filename, Subdirectory subdir);
/**
* Open the INI file.
* @param filename Name of the INI file.
* @param subdir The subdir to load the file from.
* @param[out] size Size of the opened file.
* @return File handle of the opened file, or \c nullptr.
*/
virtual FILE *OpenFile(const std::string &filename, Subdirectory subdir, size_t *size) = 0;
/**
* Report an error about the file contents.
* @param pre Prefix text of the \a buffer part.
* @param buffer Part of the file with the error.
* @param post Suffix text of the \a buffer part.
*/
virtual void ReportFileError(const char * const pre, const char * const buffer, const char * const post) = 0;
};
/** Ini file that supports both loading and saving. */
struct IniFile : IniLoadFile {
IniFile(const char * const *list_group_names = nullptr);
bool SaveToDisk(const std::string &filename);
virtual FILE *OpenFile(const std::string &filename, Subdirectory subdir, size_t *size);
virtual void ReportFileError(const char * const pre, const char * const buffer, const char * const post);
};
#endif /* INI_TYPE_H */
|