#include <IniFile.h>
Public Member Functions | |
IniSection (const char *u) | |
IniSection (const IniParser *p) | |
IniSection (const IniSection &s) | |
void | operator= (const IniSection &s) |
virtual | ~IniSection () |
IniSection (const IniParser *p, string n) | |
void | initValue (const string &key, const string &val, const string &comment, int rb) |
IniSection & | initSection (const string &name, const string &comment, int rb, int wb=-2) |
void | initReadBy () |
void | setRewriteBy (int c) |
int | getRewriteBy () |
int | getSubSectionRewriteBy (const char *name) |
void | setEndComment (const char *c) |
const char * | getEndComment () const |
bool | isDirty () |
virtual void | clean () |
IniSection & | findSection (const vector< string > &path, int from=0) |
int | findEndFromUp (const vector< string > &path, int wanted, int found=-1, int from=0) |
void | Dump () |
int | Read (const YCPPath &p, YCPValue &out, bool rewrite) |
int | Dir (const YCPPath &p, YCPList &out) |
int | Write (const YCPPath &p, const YCPValue &v, bool rewrite) |
int | Delete (const YCPPath &p) |
IniIterator | getContainerBegin () |
IniIterator | getContainerEnd () |
IniSection & | getSection (const char *name) |
Private Member Functions | |
void | reindex () |
int | getMyValue (const YCPPath &p, YCPValue &out, int what, int depth) |
int | getValue (const YCPPath &p, YCPValue &out, int what, int depth=0) |
int | getSectionProp (const YCPPath &p, YCPValue &out, int what, int depth=0) |
int | getAll (const YCPPath &p, YCPValue &out, int depth) |
YCPMap | getAllDoIt () |
int | myDir (YCPList &l, IniType what) |
int | dirHelper (const YCPPath &p, YCPList &out, int sections, int depth=0) |
int | setMyValue (const YCPPath &p, const YCPValue &in, int what, int depth) |
int | setValue (const YCPPath &p, const YCPValue &in, int what, int depth=0) |
int | setSectionProp (const YCPPath &p, const YCPValue &in, int what, int depth) |
int | setAll (const YCPPath &p, const YCPValue &in, int depth) |
int | setAllDoIt (const YCPMap &in) |
int | delValue (const YCPPath &p, int depth) |
int | delSection (const YCPPath &p, int depth) |
void | delMyValue (const string &k) |
void | delValue1 (IniEntryIdxIterator exi) |
void | delSection1 (IniSectionIdxIterator sxi) |
int | getValueFlat (const YCPPath &p, YCPValue &out) |
int | setValueFlat (const YCPPath &p, const YCPValue &in) |
int | delValueFlat (const YCPPath &p) |
int | dirValueFlat (const YCPPath &p, YCPList &l) |
Private Attributes | |
const IniParser * | ip |
string | end_comment |
int | rewrite_by |
IniContainer | container |
IniEntryIndex | ivalues |
IniSectionIndex | isections |
IniSection::IniSection | ( | const char * | u | ) | [inline] |
explicit uninitialized constructor
IniSection::IniSection | ( | const IniParser * | p | ) | [inline] |
IniSection::IniSection | ( | const IniSection & | s | ) | [inline] |
Must define an own copy constructor so that the indices point to the copy, not the original
References reindex().
virtual IniSection::~IniSection | ( | ) | [inline, virtual] |
IniSection::IniSection | ( | const IniParser * | p, | |
string | n | |||
) | [inline] |
this is a constructor for newly added sections --> sets dirty
ip | parser to take options from | |
n | name of section |
void IniSection::clean | ( | ) | [virtual] |
set all subsection and values to clean
Reimplemented from IniBase.
References container, IniBase::dirty, and SECTION.
Referenced by IniParser::write(), IniAgent::Write(), and IniParser::write_helper().
int IniSection::Delete | ( | const YCPPath & | p | ) |
Generic delete for values, sections.
p | path to delete |
References delSection(), delValue(), delValueFlat(), ip, IniParser::isFlat(), and y2error.
Referenced by IniAgent::Write().
void IniSection::delMyValue | ( | const string & | k | ) | [private] |
deletes all values of this name we own
k | normalized key |
References delValue1(), ivalues, and y2debug.
Referenced by delValue(), and delValueFlat().
int IniSection::delSection | ( | const YCPPath & | p, | |
int | depth | |||
) | [private] |
Delete section on path. Deletes also all its subsections.
p | path to delete value at | |
depth | see getSectionProp |
References IniParser::changeCase(), delSection(), delSection1(), ip, isections, y2debug, and y2error.
Referenced by Delete(), and delSection().
void IniSection::delSection1 | ( | IniSectionIdxIterator | sxi | ) | [private] |
deletes a section we own
References container, IniBase::dirty, and isections.
Referenced by delSection(), and setSectionProp().
int IniSection::delValue | ( | const YCPPath & | p, | |
int | depth | |||
) | [private] |
Delete value on path
p | path to delete value at | |
depth | see getSectionProp |
References IniParser::changeCase(), delMyValue(), delValue(), ip, isections, and y2error.
Referenced by Delete(), and delValue().
void IniSection::delValue1 | ( | IniEntryIdxIterator | exi | ) | [private] |
deletes a section we own
References container, IniBase::dirty, and ivalues.
Referenced by delMyValue(), and setMyValue().
int IniSection::delValueFlat | ( | const YCPPath & | p | ) | [private] |
Delete value in flat mode
References IniParser::changeCase(), delMyValue(), and ip.
Referenced by Delete().
Generic interface to SCR::Dir
References YCPList::add(), dirHelper(), dirValueFlat(), ip, IniParser::isFlat(), and y2error.
Referenced by IniAgent::Dir().
int IniSection::dirHelper | ( | const YCPPath & | p, | |
YCPList & | out, | |||
int | sections, | |||
int | depth = 0 | |||
) | [private] |
Recursive function to find the one section we want to dir and at last to do dir.
p | path | |
out | list of sections/keys | |
sections | get sections (0) or values (!0)? | |
depth | see getSectionProp |
References IniParser::changeCase(), dirHelper(), ip, isections, myDir(), SECTION, VALUE, and y2debug.
Referenced by Dir(), and dirHelper().
void IniSection::Dump | ( | ) |
Dump a section with subsections and subvalues to stdout.
References IniBase::comment, IniBase::getComment(), getContainerBegin(), getContainerEnd(), IniBase::getName(), IniEntry::getValue(), isections, ivalues, IniBase::name, SECTION, and VALUE.
int IniSection::findEndFromUp | ( | const vector< string > & | path, | |
int | wanted, | |||
int | found = -1 , |
|||
int | from = 0 | |||
) |
OBSOLETE, to be removed. If currently parsed end-section-tag hasn't matched currently processed section by name, we need to find the best possible match by type (read_by). Hence we look for a section on current path which can be closed by found end-section-tag. Note: this function can abort if the path passed in invalid.
path | stack of the sections | |
wanted | read-by we want to find | |
found | let unset, last path index that matched | |
from | let unset, current path index |
References IniParser::changeCase(), findEndFromUp(), ip, isections, IniBase::read_by, and y2error.
Referenced by findEndFromUp().
IniSection & IniSection::findSection | ( | const vector< string > & | path, | |
int | from = 0 | |||
) |
OBSOLETE, to be removed. Gets section on a path. Recursive. Attention! This function aborts when it doesn't find the section! Use with care! (Used only by IniParser::parse_helper)
path | path to the section | |
from | recursion depth |
References IniParser::changeCase(), findSection(), ip, isections, and y2error.
Referenced by findSection().
Get a complete subtree
p | path : .all or .all.sec1.sec2 | |
out | output is placed here | |
depth | Index of current path component. This function is recursive and depth marks the depth of recursion. We look for path[depth] in current "scope" |
References IniParser::changeCase(), getAllDoIt(), ip, isections, and y2error.
Referenced by Read().
YCPMap IniSection::getAllDoIt | ( | ) | [private, virtual] |
Gets data for this section and all its values and subsections
Reimplemented from IniBase.
References YCPList::add(), YCPMap::add(), getContainerBegin(), getContainerEnd(), rewrite_by, and VALUE.
Referenced by getAll().
IniIterator IniSection::getContainerBegin | ( | ) |
IniIterator IniSection::getContainerEnd | ( | ) |
const char* IniSection::getEndComment | ( | ) | const [inline] |
Get a value (or list of them if repeat_names) in this section It would be enough to pass only k instead of p and depth, but then the error messages would not know the whole path
p | path | |
out | output is placed here as YCPString or YCPInteger | |
what | 0 - value, 1 - comment, other - read-by | |
depth | path index |
References YCPList::add(), IniParser::changeCase(), IniBase::getComment(), IniBase::getReadBy(), IniEntry::getValue(), ip, ivalues, IniParser::repeatNames(), and y2debug.
Referenced by getValue(), and getValueFlat().
int IniSection::getRewriteBy | ( | ) | [inline] |
IniSection & IniSection::getSection | ( | const char * | name | ) |
int IniSection::getSectionProp | ( | const YCPPath & | p, | |
YCPValue & | out, | |||
int | what, | |||
int | depth = 0 | |||
) | [private] |
Get section property -- comment or read-by
p | path to value: .section_commment.sec1.sec2.sec3 | |
out | output is placed here as YCPString or YCPInteger | |
what | 0 - comment, 1 - rewrite_by, other - read-by | |
depth | Index of current path component. This function is recursive and depth marks the depth of recursion. We look for path[depth] in current "scope" |
References YCPList::add(), IniParser::changeCase(), IniBase::comment, getSectionProp(), ip, isections, IniBase::read_by, IniParser::repeatNames(), rewrite_by, and y2debug.
Referenced by getSectionProp(), and Read().
int IniSection::getSubSectionRewriteBy | ( | const char * | name | ) |
Get a value on a path
p | path to value: .value.sec1.sec2.key | |
out | output is placed here as YCPString or YCPInteger | |
what | 0 - value, 1 - comment, other - read-by | |
depth | Index of current path component. This function is recursive and depth marks the depth of recursion. We look for path[depth] in current "scope" |
References IniParser::changeCase(), getMyValue(), ip, isections, and y2debug.
Referenced by Read().
Get value in flat mode.
p | path to value | |
out | output |
References IniParser::changeCase(), getMyValue(), and ip.
Referenced by Read().
void IniSection::initReadBy | ( | ) | [inline] |
This function has very special purpose, it ensures that top-section delimiter is not written when saving multiple files.
References IniBase::read_by.
Referenced by IniParser::write().
IniSection & IniSection::initSection | ( | const string & | name, | |
const string & | comment, | |||
int | rb, | |||
int | wb = -2 | |||
) |
If section already exist, it is updated only in case, that it isn't dirty.
name | section name | |
comment | comment | |
rb | read-by | |
wb | rewrite-by. if -2 (default), it is not changed |
References IniParser::changeCase(), IniBase::comment, container, IniBase::dirty, ip, isections, IniBase::name, IniBase::read_by, IniParser::repeatNames(), and rewrite_by.
Referenced by IniParser::parse_helper().
void IniSection::initValue | ( | const string & | key, | |
const string & | val, | |||
const string & | comment, | |||
int | rb | |||
) |
If value doesn't exist, creates new, otherwise calls method init of the existing one.
key | key | |
val | value | |
comment | comment | |
rb | read-by |
References IniParser::changeCase(), container, IniEntry::init(), ip, ivalues, and IniParser::repeatNames().
Referenced by IniParser::parse_helper().
bool IniSection::isDirty | ( | ) |
Get directory of this section
l | result list | |
what | VALUE or SECTION |
References YCPList::add(), container, and SECTION.
Referenced by dirHelper(), and dirValueFlat().
void IniSection::operator= | ( | const IniSection & | s | ) | [inline] |
References container, end_comment, ip, reindex(), and rewrite_by.
Generic interface to SCR::Read
rewrite | a #19066 hack - if rewriting is active, .st accesses rewrite_by |
References getAll(), getSectionProp(), getValue(), getValueFlat(), ip, IniParser::isFlat(), and y2error.
Referenced by IniAgent::Read().
void IniSection::reindex | ( | ) | [private] |
build ivalues and isections
References IniParser::changeCase(), getContainerBegin(), getContainerEnd(), ip, isections, ivalues, and VALUE.
Referenced by IniSection(), operator=(), and setAllDoIt().
Set all properties and values for a section. No recursive creation of the specified path.
p | path where to start | |
in | value to set | |
depth | see getSectionProp |
References IniParser::changeCase(), ip, isections, setAllDoIt(), and y2debug.
Referenced by Write().
int IniSection::setAllDoIt | ( | const YCPMap & | in | ) | [private, virtual] |
Set all properties and values for a section.
in | value to set |
Reimplemented from IniBase.
References container, IniParser::getFileName(), IniBase::getMapInteger(), IniBase::getMapString(), ip, YCPElement::isNull(), reindex(), rewrite_by, IniEntry::setAllDoIt(), setAllDoIt(), YCPList::size(), YCPList::value(), YCPMap::value(), and y2error.
Referenced by setAll(), and setAllDoIt().
void IniSection::setEndComment | ( | const char * | c | ) |
If there is no comment at the beginning and no values and no sections, it is better to set is as comment at the beginning. Sets also dirty flag.
c | comment |
References IniBase::comment, container, and end_comment.
Referenced by IniParser::parse_helper().
int IniSection::setMyValue | ( | const YCPPath & | p, | |
const YCPValue & | in, | |||
int | what, | |||
int | depth | |||
) | [private] |
Set a value (or list of them if repeat_names) in this section It would be enough to pass only k instead of p and depth, but then the error messages would not know the whole path
p | path | |
in | value to set (YCPString or YCPInteger) (or YCPList) | |
what | 0 -- value, 1 -- comment, other -- read-by. | |
depth | path index |
need to add a value ...
References YCPList::add(), as_integer(), as_list(), as_string(), IniParser::changeCase(), container, delValue1(), IniBase::dirty, ip, YCPElement::isNull(), ivalues, IniParser::repeatNames(), IniBase::setComment(), IniBase::setName(), IniBase::setReadBy(), IniEntry::setValue(), YCPList::size(), to_string(), YCPList::value(), y2debug, and y2error.
Referenced by setValue(), and setValueFlat().
void IniSection::setRewriteBy | ( | int | c | ) | [inline] |
int IniSection::setSectionProp | ( | const YCPPath & | p, | |
const YCPValue & | in, | |||
int | what, | |||
int | depth | |||
) | [private] |
Set section comment or read-by. Creates recursively all non-existing subsections.
p | path to set value on | |
in | value to set (YCPString or YCPInteger) | |
what | 0 -- comment, 1 - rewrite_by, other -- read-by. | |
depth | see getSectionProp |
need to add a section ...
References YCPList::add(), as_integer(), as_list(), as_string(), IniParser::changeCase(), container, delSection1(), ip, isections, YCPElement::isNull(), IniParser::repeatNames(), IniBase::setComment(), IniBase::setReadBy(), setRewriteBy(), YCPList::size(), str, YCPList::value(), and y2debug.
Referenced by Write().
int IniSection::setValue | ( | const YCPPath & | p, | |
const YCPValue & | in, | |||
int | what, | |||
int | depth = 0 | |||
) | [private] |
Set value on path. Creates recursively all non-existing subsections.
p | path to set value on | |
in | value to set (YCPString or YCPInteger) | |
what | 0 -- value, 1 -- comment, other -- read-by. | |
depth | see getSectionProp |
References IniParser::changeCase(), container, ip, isections, setMyValue(), and y2debug.
Referenced by Write().
Set value in flat mode.
p | path to value | |
out | input |
References IniParser::changeCase(), ip, and setMyValue().
Referenced by Write().
Generic interface to SCR::Write
rewrite | a #19066 hack - if rewriting is active, .st accesses rewrite_by |
References ip, IniParser::isFlat(), setAll(), setSectionProp(), setValue(), setValueFlat(), and y2error.
Referenced by IniAgent::Write().
IniContainer IniSection::container [private] |
What entries of cvalues and csections are valid Values contained by this section Sections contained by this section
Referenced by clean(), delSection1(), delValue1(), getContainerBegin(), getContainerEnd(), initSection(), initValue(), myDir(), operator=(), setAllDoIt(), setEndComment(), setMyValue(), setSectionProp(), and setValue().
string IniSection::end_comment [private] |
if this is global section, there may be comment at the end this is quite special case, it is impossible to change it
Referenced by getEndComment(), operator=(), and setEndComment().
const IniParser* IniSection::ip [private] |
The parser, queried about global settings But once the const is discarded to add to deleted_sections
Referenced by Delete(), delSection(), delValue(), delValueFlat(), Dir(), dirHelper(), findEndFromUp(), findSection(), getAll(), getMyValue(), getSectionProp(), getValue(), getValueFlat(), initSection(), initValue(), operator=(), Read(), reindex(), setAll(), setAllDoIt(), setMyValue(), setSectionProp(), setValue(), setValueFlat(), and Write().
IniSectionIndex IniSection::isections [private] |
Index of sections
Referenced by delSection(), delSection1(), delValue(), dirHelper(), Dump(), findEndFromUp(), findSection(), getAll(), getSection(), getSectionProp(), getSubSectionRewriteBy(), getValue(), initSection(), isDirty(), reindex(), setAll(), setSectionProp(), and setValue().
IniEntryIndex IniSection::ivalues [private] |
Index of values
Referenced by delMyValue(), delValue1(), Dump(), getMyValue(), initValue(), reindex(), and setMyValue().
int IniSection::rewrite_by [private] |
index to IniParser::rewrites for filename - section name mapping It appears that read_by was used for both purposes, causing bug (#19066).
Referenced by getAllDoIt(), getRewriteBy(), getSectionProp(), initSection(), operator=(), setAllDoIt(), and setRewriteBy().