src/ini_type.h
author rubidium
Sun, 24 Aug 2008 13:50:31 +0000
changeset 9996 fceaf224b2f0
child 9999 d88ba8e0fd38
permissions -rw-r--r--
(svn r14153) -Codechange: split ini file reading/saving from settings.cpp.
9996
fceaf224b2f0 (svn r14153) -Codechange: split ini file reading/saving from settings.cpp.
rubidium
parents:
diff changeset
     1
/* $Id$ */
fceaf224b2f0 (svn r14153) -Codechange: split ini file reading/saving from settings.cpp.
rubidium
parents:
diff changeset
     2
fceaf224b2f0 (svn r14153) -Codechange: split ini file reading/saving from settings.cpp.
rubidium
parents:
diff changeset
     3
/** @file ini_type.h Types related to reading/writing '*.ini' files. */
fceaf224b2f0 (svn r14153) -Codechange: split ini file reading/saving from settings.cpp.
rubidium
parents:
diff changeset
     4
fceaf224b2f0 (svn r14153) -Codechange: split ini file reading/saving from settings.cpp.
rubidium
parents:
diff changeset
     5
#ifndef INI_TYPE_H
fceaf224b2f0 (svn r14153) -Codechange: split ini file reading/saving from settings.cpp.
rubidium
parents:
diff changeset
     6
#define INI_TYPE_H
fceaf224b2f0 (svn r14153) -Codechange: split ini file reading/saving from settings.cpp.
rubidium
parents:
diff changeset
     7
fceaf224b2f0 (svn r14153) -Codechange: split ini file reading/saving from settings.cpp.
rubidium
parents:
diff changeset
     8
/** Types of groups */
fceaf224b2f0 (svn r14153) -Codechange: split ini file reading/saving from settings.cpp.
rubidium
parents:
diff changeset
     9
enum IniGroupType {
fceaf224b2f0 (svn r14153) -Codechange: split ini file reading/saving from settings.cpp.
rubidium
parents:
diff changeset
    10
	IGT_VARIABLES = 0, ///< values of the form "landscape = hilly"
fceaf224b2f0 (svn r14153) -Codechange: split ini file reading/saving from settings.cpp.
rubidium
parents:
diff changeset
    11
	IGT_LIST      = 1, ///< a list of values, seperated by \n and terminated by the next group block
fceaf224b2f0 (svn r14153) -Codechange: split ini file reading/saving from settings.cpp.
rubidium
parents:
diff changeset
    12
};
fceaf224b2f0 (svn r14153) -Codechange: split ini file reading/saving from settings.cpp.
rubidium
parents:
diff changeset
    13
fceaf224b2f0 (svn r14153) -Codechange: split ini file reading/saving from settings.cpp.
rubidium
parents:
diff changeset
    14
/** A single "line" in an ini file. */
fceaf224b2f0 (svn r14153) -Codechange: split ini file reading/saving from settings.cpp.
rubidium
parents:
diff changeset
    15
struct IniItem {
fceaf224b2f0 (svn r14153) -Codechange: split ini file reading/saving from settings.cpp.
rubidium
parents:
diff changeset
    16
	IniItem *next; ///< The next item in this group
fceaf224b2f0 (svn r14153) -Codechange: split ini file reading/saving from settings.cpp.
rubidium
parents:
diff changeset
    17
	char *name;    ///< The name of this item
fceaf224b2f0 (svn r14153) -Codechange: split ini file reading/saving from settings.cpp.
rubidium
parents:
diff changeset
    18
	char *value;   ///< The value of this item
fceaf224b2f0 (svn r14153) -Codechange: split ini file reading/saving from settings.cpp.
rubidium
parents:
diff changeset
    19
	char *comment; ///< The comment associated with this item
fceaf224b2f0 (svn r14153) -Codechange: split ini file reading/saving from settings.cpp.
rubidium
parents:
diff changeset
    20
fceaf224b2f0 (svn r14153) -Codechange: split ini file reading/saving from settings.cpp.
rubidium
parents:
diff changeset
    21
	IniItem(struct IniGroup *parent, const char *name, size_t len = 0);
fceaf224b2f0 (svn r14153) -Codechange: split ini file reading/saving from settings.cpp.
rubidium
parents:
diff changeset
    22
	~IniItem();
fceaf224b2f0 (svn r14153) -Codechange: split ini file reading/saving from settings.cpp.
rubidium
parents:
diff changeset
    23
};
fceaf224b2f0 (svn r14153) -Codechange: split ini file reading/saving from settings.cpp.
rubidium
parents:
diff changeset
    24
fceaf224b2f0 (svn r14153) -Codechange: split ini file reading/saving from settings.cpp.
rubidium
parents:
diff changeset
    25
/** A group within an ini file. */
fceaf224b2f0 (svn r14153) -Codechange: split ini file reading/saving from settings.cpp.
rubidium
parents:
diff changeset
    26
struct IniGroup {
fceaf224b2f0 (svn r14153) -Codechange: split ini file reading/saving from settings.cpp.
rubidium
parents:
diff changeset
    27
	IniGroup *next;      ///< the next group within this file
fceaf224b2f0 (svn r14153) -Codechange: split ini file reading/saving from settings.cpp.
rubidium
parents:
diff changeset
    28
	IniGroupType type;   ///< type of group
fceaf224b2f0 (svn r14153) -Codechange: split ini file reading/saving from settings.cpp.
rubidium
parents:
diff changeset
    29
	IniItem *item;       ///< the first item in the group
fceaf224b2f0 (svn r14153) -Codechange: split ini file reading/saving from settings.cpp.
rubidium
parents:
diff changeset
    30
	IniItem **last_item; ///< the last item in the group
fceaf224b2f0 (svn r14153) -Codechange: split ini file reading/saving from settings.cpp.
rubidium
parents:
diff changeset
    31
	char *name;          ///< name of group
fceaf224b2f0 (svn r14153) -Codechange: split ini file reading/saving from settings.cpp.
rubidium
parents:
diff changeset
    32
	char *comment;       ///< comment for group
fceaf224b2f0 (svn r14153) -Codechange: split ini file reading/saving from settings.cpp.
rubidium
parents:
diff changeset
    33
fceaf224b2f0 (svn r14153) -Codechange: split ini file reading/saving from settings.cpp.
rubidium
parents:
diff changeset
    34
	/**
fceaf224b2f0 (svn r14153) -Codechange: split ini file reading/saving from settings.cpp.
rubidium
parents:
diff changeset
    35
	 * Construct a new in-memory group of an Ini file.
fceaf224b2f0 (svn r14153) -Codechange: split ini file reading/saving from settings.cpp.
rubidium
parents:
diff changeset
    36
	 * @param parent the file we belong to
fceaf224b2f0 (svn r14153) -Codechange: split ini file reading/saving from settings.cpp.
rubidium
parents:
diff changeset
    37
	 * @param name   the name of the group
fceaf224b2f0 (svn r14153) -Codechange: split ini file reading/saving from settings.cpp.
rubidium
parents:
diff changeset
    38
	 * @param len    the length of the name of the group
fceaf224b2f0 (svn r14153) -Codechange: split ini file reading/saving from settings.cpp.
rubidium
parents:
diff changeset
    39
	 */
fceaf224b2f0 (svn r14153) -Codechange: split ini file reading/saving from settings.cpp.
rubidium
parents:
diff changeset
    40
	IniGroup(struct IniFile *parent, const char *name, size_t len = 0);
fceaf224b2f0 (svn r14153) -Codechange: split ini file reading/saving from settings.cpp.
rubidium
parents:
diff changeset
    41
fceaf224b2f0 (svn r14153) -Codechange: split ini file reading/saving from settings.cpp.
rubidium
parents:
diff changeset
    42
	/** Free everything we loaded. */
fceaf224b2f0 (svn r14153) -Codechange: split ini file reading/saving from settings.cpp.
rubidium
parents:
diff changeset
    43
	~IniGroup();
fceaf224b2f0 (svn r14153) -Codechange: split ini file reading/saving from settings.cpp.
rubidium
parents:
diff changeset
    44
fceaf224b2f0 (svn r14153) -Codechange: split ini file reading/saving from settings.cpp.
rubidium
parents:
diff changeset
    45
	/**
fceaf224b2f0 (svn r14153) -Codechange: split ini file reading/saving from settings.cpp.
rubidium
parents:
diff changeset
    46
	 * Get the item with the given name, and if it doesn't exist
fceaf224b2f0 (svn r14153) -Codechange: split ini file reading/saving from settings.cpp.
rubidium
parents:
diff changeset
    47
	 * and create is true it creates a new item.
fceaf224b2f0 (svn r14153) -Codechange: split ini file reading/saving from settings.cpp.
rubidium
parents:
diff changeset
    48
	 * @param name   name of the item to find.
fceaf224b2f0 (svn r14153) -Codechange: split ini file reading/saving from settings.cpp.
rubidium
parents:
diff changeset
    49
	 * @param create whether to create an item when not found or not.
fceaf224b2f0 (svn r14153) -Codechange: split ini file reading/saving from settings.cpp.
rubidium
parents:
diff changeset
    50
	 * @return the requested item or NULL if not found.
fceaf224b2f0 (svn r14153) -Codechange: split ini file reading/saving from settings.cpp.
rubidium
parents:
diff changeset
    51
	 */
fceaf224b2f0 (svn r14153) -Codechange: split ini file reading/saving from settings.cpp.
rubidium
parents:
diff changeset
    52
	IniItem *GetItem(const char *name, bool create);
fceaf224b2f0 (svn r14153) -Codechange: split ini file reading/saving from settings.cpp.
rubidium
parents:
diff changeset
    53
};
fceaf224b2f0 (svn r14153) -Codechange: split ini file reading/saving from settings.cpp.
rubidium
parents:
diff changeset
    54
fceaf224b2f0 (svn r14153) -Codechange: split ini file reading/saving from settings.cpp.
rubidium
parents:
diff changeset
    55
/** The complete ini file. */
fceaf224b2f0 (svn r14153) -Codechange: split ini file reading/saving from settings.cpp.
rubidium
parents:
diff changeset
    56
struct IniFile {
fceaf224b2f0 (svn r14153) -Codechange: split ini file reading/saving from settings.cpp.
rubidium
parents:
diff changeset
    57
	IniGroup *group;               ///< the first group in the ini
fceaf224b2f0 (svn r14153) -Codechange: split ini file reading/saving from settings.cpp.
rubidium
parents:
diff changeset
    58
	IniGroup **last_group;         ///< the last group in the ini
fceaf224b2f0 (svn r14153) -Codechange: split ini file reading/saving from settings.cpp.
rubidium
parents:
diff changeset
    59
	char *comment;                 ///< last comment in file
fceaf224b2f0 (svn r14153) -Codechange: split ini file reading/saving from settings.cpp.
rubidium
parents:
diff changeset
    60
	const char **list_group_names; ///< NULL terminated list with group names that are lists
fceaf224b2f0 (svn r14153) -Codechange: split ini file reading/saving from settings.cpp.
rubidium
parents:
diff changeset
    61
fceaf224b2f0 (svn r14153) -Codechange: split ini file reading/saving from settings.cpp.
rubidium
parents:
diff changeset
    62
	/**
fceaf224b2f0 (svn r14153) -Codechange: split ini file reading/saving from settings.cpp.
rubidium
parents:
diff changeset
    63
	 * Construct a new in-memory Ini file representation.
fceaf224b2f0 (svn r14153) -Codechange: split ini file reading/saving from settings.cpp.
rubidium
parents:
diff changeset
    64
	 * @param list_group_names A NULL terminated list with groups that should be
fceaf224b2f0 (svn r14153) -Codechange: split ini file reading/saving from settings.cpp.
rubidium
parents:
diff changeset
    65
	 *                         loaded as lists instead of variables.
fceaf224b2f0 (svn r14153) -Codechange: split ini file reading/saving from settings.cpp.
rubidium
parents:
diff changeset
    66
	 */
fceaf224b2f0 (svn r14153) -Codechange: split ini file reading/saving from settings.cpp.
rubidium
parents:
diff changeset
    67
	IniFile(const char **list_group_names = NULL);
fceaf224b2f0 (svn r14153) -Codechange: split ini file reading/saving from settings.cpp.
rubidium
parents:
diff changeset
    68
fceaf224b2f0 (svn r14153) -Codechange: split ini file reading/saving from settings.cpp.
rubidium
parents:
diff changeset
    69
	/** Free everything we loaded. */
fceaf224b2f0 (svn r14153) -Codechange: split ini file reading/saving from settings.cpp.
rubidium
parents:
diff changeset
    70
	~IniFile();
fceaf224b2f0 (svn r14153) -Codechange: split ini file reading/saving from settings.cpp.
rubidium
parents:
diff changeset
    71
fceaf224b2f0 (svn r14153) -Codechange: split ini file reading/saving from settings.cpp.
rubidium
parents:
diff changeset
    72
	/**
fceaf224b2f0 (svn r14153) -Codechange: split ini file reading/saving from settings.cpp.
rubidium
parents:
diff changeset
    73
	 * Get the group with the given name, and if it doesn't exist
fceaf224b2f0 (svn r14153) -Codechange: split ini file reading/saving from settings.cpp.
rubidium
parents:
diff changeset
    74
	 * create a new group.
fceaf224b2f0 (svn r14153) -Codechange: split ini file reading/saving from settings.cpp.
rubidium
parents:
diff changeset
    75
	 * @param name name of the group to find.
fceaf224b2f0 (svn r14153) -Codechange: split ini file reading/saving from settings.cpp.
rubidium
parents:
diff changeset
    76
	 * @param len  the maximum length of said name.
fceaf224b2f0 (svn r14153) -Codechange: split ini file reading/saving from settings.cpp.
rubidium
parents:
diff changeset
    77
	 * @return the requested group.
fceaf224b2f0 (svn r14153) -Codechange: split ini file reading/saving from settings.cpp.
rubidium
parents:
diff changeset
    78
	 */
fceaf224b2f0 (svn r14153) -Codechange: split ini file reading/saving from settings.cpp.
rubidium
parents:
diff changeset
    79
	IniGroup *GetGroup(const char *name, size_t len = 0);
fceaf224b2f0 (svn r14153) -Codechange: split ini file reading/saving from settings.cpp.
rubidium
parents:
diff changeset
    80
fceaf224b2f0 (svn r14153) -Codechange: split ini file reading/saving from settings.cpp.
rubidium
parents:
diff changeset
    81
	/**
fceaf224b2f0 (svn r14153) -Codechange: split ini file reading/saving from settings.cpp.
rubidium
parents:
diff changeset
    82
	 * Remove the group with the given name.
fceaf224b2f0 (svn r14153) -Codechange: split ini file reading/saving from settings.cpp.
rubidium
parents:
diff changeset
    83
	 * @param name name of the group to remove.
fceaf224b2f0 (svn r14153) -Codechange: split ini file reading/saving from settings.cpp.
rubidium
parents:
diff changeset
    84
	 */
fceaf224b2f0 (svn r14153) -Codechange: split ini file reading/saving from settings.cpp.
rubidium
parents:
diff changeset
    85
	void RemoveGroup(const char *name);
fceaf224b2f0 (svn r14153) -Codechange: split ini file reading/saving from settings.cpp.
rubidium
parents:
diff changeset
    86
fceaf224b2f0 (svn r14153) -Codechange: split ini file reading/saving from settings.cpp.
rubidium
parents:
diff changeset
    87
	/**
fceaf224b2f0 (svn r14153) -Codechange: split ini file reading/saving from settings.cpp.
rubidium
parents:
diff changeset
    88
	 * Load the Ini file's data from the disk.
fceaf224b2f0 (svn r14153) -Codechange: split ini file reading/saving from settings.cpp.
rubidium
parents:
diff changeset
    89
	 * @param filename the file to load.
fceaf224b2f0 (svn r14153) -Codechange: split ini file reading/saving from settings.cpp.
rubidium
parents:
diff changeset
    90
	 * @pre nothing has been loaded yet.
fceaf224b2f0 (svn r14153) -Codechange: split ini file reading/saving from settings.cpp.
rubidium
parents:
diff changeset
    91
	 */
fceaf224b2f0 (svn r14153) -Codechange: split ini file reading/saving from settings.cpp.
rubidium
parents:
diff changeset
    92
	void LoadFromDisk(const char *filename);
fceaf224b2f0 (svn r14153) -Codechange: split ini file reading/saving from settings.cpp.
rubidium
parents:
diff changeset
    93
fceaf224b2f0 (svn r14153) -Codechange: split ini file reading/saving from settings.cpp.
rubidium
parents:
diff changeset
    94
	/**
fceaf224b2f0 (svn r14153) -Codechange: split ini file reading/saving from settings.cpp.
rubidium
parents:
diff changeset
    95
	 * Save the Ini file's data to the disk.
fceaf224b2f0 (svn r14153) -Codechange: split ini file reading/saving from settings.cpp.
rubidium
parents:
diff changeset
    96
	 * @param filename the file to save to.
fceaf224b2f0 (svn r14153) -Codechange: split ini file reading/saving from settings.cpp.
rubidium
parents:
diff changeset
    97
	 * @return true if saving succeeded.
fceaf224b2f0 (svn r14153) -Codechange: split ini file reading/saving from settings.cpp.
rubidium
parents:
diff changeset
    98
	 */
fceaf224b2f0 (svn r14153) -Codechange: split ini file reading/saving from settings.cpp.
rubidium
parents:
diff changeset
    99
	bool SaveToDisk(const char *filename);
fceaf224b2f0 (svn r14153) -Codechange: split ini file reading/saving from settings.cpp.
rubidium
parents:
diff changeset
   100
};
fceaf224b2f0 (svn r14153) -Codechange: split ini file reading/saving from settings.cpp.
rubidium
parents:
diff changeset
   101
fceaf224b2f0 (svn r14153) -Codechange: split ini file reading/saving from settings.cpp.
rubidium
parents:
diff changeset
   102
#endif /* INI_TYPE */