thalassa/lib/inifile/inifile.hpp
2026-03-19 06:23:52 +05:00

114 lines
4.6 KiB
C++

// +-------------------------------------------------------------------------+
// | I n i F i l e vers. 0.3.30 |
// | Copyright (c) Andrey Vikt. Stolyarov [http://www.croco.net/] 2003-2024 |
// | ----------------------------------------------------------------------- |
// | This is free software. Permission is granted to everyone to use, copy |
// | or modify this software under the terms and conditions of |
// | GNU LESSER GENERAL PUBLIC LICENSE, v. 2.1 |
// | as published by Free Software Foundation (see the file LGPL.txt) |
// | |
// | Please visit http://www.croco.net/software/scriptpp to get a fresh copy |
// | ----------------------------------------------------------------------- |
// | This code is provided strictly and exclusively on the "AS IS" basis. |
// | !!! THERE IS NO WARRANTY OF ANY KIND, NEITHER EXPRESSED NOR IMPLIED !!! |
// +-------------------------------------------------------------------------+
#ifndef INIFILE_HPP_SENTRY
#define INIFILE_HPP_SENTRY
class IniFileParser {
struct Parameter {
Parameter *next;
char *name;
char *value;
Parameter(const char *nm, const char *vl);
~Parameter();
void AddDictionaryData(const char *value, bool exclusive = false);
void AddDictionaryLine(const char *value);
};
struct Section {
Section *next;
char *name;
Parameter *firstparam;
Section(const char *nm);
~Section();
Parameter *ProvideParameter(const char *name);
};
struct Group {
Group *next;
char *name;
Section *firstsection;
Group(const char *nm);
~Group();
};
Group *firstgroup;
int last_error_line;
const char *last_error_description;
public:
IniFileParser();
~IniFileParser();
bool Load(const char *path);
bool Save(const char *path);
int GetLastErrorLine() const
{ return last_error_line; }
const char *GetLastErrorDescription() const
{ return last_error_description; }
void SetParam(const char *groupname, const char *sectionname,
const char *paramname, const char *paramval,
bool exclusive = true);
int GetGroupCount() const;
int GetSectionCount(const char *groupname) const;
const char* GetSectionName(const char *groupname, int sectionindex) const;
const char* GetParam(const char *groupname, const char *sectionname,
const char *paramname) const;
void DeleteSection(const char *groupname, const char *sectionname);
void AddIntegerParameter(const char *grname, const char *sectname,
const char *parmname, long value);
void AddTextParameter(const char *grname, const char *sectname,
const char *parmname, const char *value);
void SetTextParameter(const char *grname, const char *sectname,
const char *parmname, const char *value);
const char *GetTextParameter(const char *grname, const char *sectname,
const char *parmname, const char *defaultvalue) const;
const char *GetModifiedTextParameter(const char *grname,
const char *sectname,
const char *parmname,
const char *modifier,
const char *defaultvalue) const;
long GetIntegerParameter(const char *grname, const char *sectname,
const char *parmname, long defaultvalue) const;
long GetModifiedIntegerParameter(const char *grname,
const char *sectname,
const char *parmname,
const char *modifier,
long defaultvalue) const;
static char **BreakParameterAsCSV(const char *param_text);
static void DisposeBrokenParameter(char **bparm);
private:
Section *ProvideSection(const char *groupname, const char *sectionname);
Group *const*FindGroupP(const char *groupname) const;
Section *const*FindSectionP(Group *grp, const char *sectionname) const;
static bool ExtractHeaderData(char *buf,
char **groupname,
char **sectionname);
static bool ExtractDictionaryData(char *buf,
char **name,
char **value);
};
#endif